Hi !
В исходных кодах есть пример (qt-everywhere-opensource-src-4.8.4/examples/graphicsview/portedcanvas), в нем интересен только метод печати.
Поправил его так (добавил печать в pdf):
void Main::print()
{
//---------------add------------------
    QPrinter printerP;
    printerP.setOutputFormat(QPrinter::PdfFormat);
    printerP.setOutputFileName("test.pdf");
    printerP.setPaperSize(QSizeF(1, 1), QPrinter::Inch);
    printerP.setPageMargins(0, 0, 0, 0, QPrinter::Inch);
    QPainter pP(&printerP);
    canvas.render(&pP);
    pP.end();
//---------------add------------------
    if ( !printer ) printer = new QPrinter;
    QPrintDialog dialog(printer, this);
    if(dialog.exec()) {
        QPainter pp(printer);
        printer->setPaperSize(QSizeF(1, 1), QPrinter::Inch);
        printer->setPageMargins(0, 0, 0, 0, QPrinter::Inch);
        canvas.render(&pp);
    }
}
При этом test.pdf создается с желаемым размером, а если напечатать на реальный принтер (или в pdf средствами системы), то имею A4 - почему так ?
Также ms office word может распечатать (и на pdf) принтер с любыми размерами.
Т.о. что не хватает в приведенном коде для печати на желаемый размер бумаги ?