Create a PDF from Qt Creator
-
@TheCipo76 said in Create a PDF from Qt Creator:
setOutputFileName
Interesting. I use the QPrinter way, and the only difference to my code I spotted was that I explicitly set the page margins and resolution. Also, I assume that you open the file for writing in your first code just as you do it in the second one, right?
But try out the Text Edit example (in widgets\richtext) - it contains a PDF export.
-
@Asperamanca
No, i've followed a Video Tutorial and copy the same code
(https://www.youtube.com/watch?v=lA5D8b_QPxo)the only differences is that i've done it in a Dialog and not in MainWindows
i've already tried to create a new project and do it in MainWindows but the result is the same..
No PDf was Created
-
@TheCipo76
Hi
Code does look fine.
Could you try this sample ?
https://wiki.qt.io/Exporting_a_document_to_PDF
and see if you get pdf from that ? -
@TheCipo76
Hi
My guess would be that printer object goes out of scope ? -
@mrjj i've tried with this code:
qreal top=20, left=15, right=15, bottom=20; QPrinter printer(QPrinter::PrinterResolution); QPrintDialog dialog(&printer, this); if(dialog.exec() == QDialog::Accepted){ QPrinterInfo pinfo(printer); qDebug() << "Printer valid: " << printer.isValid(); qDebug() << "Printer Name: " << printer.printerName(); qDebug() << "Printer program: " << printer.printProgram(); qDebug() << "Is printer null: " << pinfo.isNull(); qDebug() << "Printer State: " << pinfo.state(); qDebug() << "Is printer default: " << pinfo.isDefault(); qDebug() << "Is printer remote: " << pinfo.isRemote(); } printer.setPaperSize(QPrinter::A4); printer.setPageMargins(left, top, right, bottom, QPrinter::Millimeter); printer.setOutputFormat(QPrinter::PdfFormat); printer.setOutputFileName("PrimoPDF.pdf"); QPainter painter; if (! painter.begin(&printer)) { // failed to open file qWarning("failed to open file, is it writable?"); return; } painter.drawText(10, 10, "Primo PDF Creato!"); painter.drawText(10, 30, "Test 1"); if (! printer.newPage()) { qWarning("failed in flushing page to disk, disk full?"); return; } painter.drawText(10, 10, "Test 2"); painter.end();
and this is the result:
Printer valid: true
Printer Name: "Samsung_CLP_620_Series__SEC001599489B1A_"
Printer program: ""
Is printer null: false
Printer State: 0
Is printer default: true
Is printer remote: falsePrinter seem to be OK
now the previous message about QPainter were not showed..
-
@TheCipo76
That looks very ok.
But no PDF (PrimoPDF.pdf) is produced ?Have a look at this code. it prints screen shots.
Looks very similar to yours.void printv2(QPixmap& pix) { QPrinter printer(QPrinter::HighResolution); printer.setOrientation(QPrinter::Landscape); printer.setOutputFormat(QPrinter::PdfFormat); printer.setPaperSize(QPrinter::A4); printer.setOutputFileName("e:/test.pdf"); QPainter painter; painter.begin(&printer); double xscale = printer.pageRect().width() / double(pix.width()); double yscale = printer.pageRect().height() / double(pix.height()); double scale = qMin(xscale, yscale); painter.translate(printer.paperRect().x() + printer.pageRect().width() / 2, printer.paperRect().y() + printer.pageRect().height() / 2); painter.scale(scale, scale); painter.translate(-pix.width() / 2, -pix.height() / 2); painter.drawPixmap(0, 0, pix); painter.end(); } void MainWindow::on_pushButton_released() { QPixmap pix = QPixmap::grabWindow(QApplication::desktop()->winId()); printv2(pix); }
-
@TheCipo76
Yep and i get a e:/test.pdf so not really sure why you dont get any.
does it try to print to real printer ?Can you try
void printv3() { QPrinter printer(QPrinter::HighResolution); printer.setOrientation(QPrinter::Landscape); printer.setOutputFormat(QPrinter::PdfFormat); printer.setPaperSize(QPrinter::A4); printer.setOutputFileName("test.pdf"); QPainter painter; painter.begin(&printer); painter.drawText( 200,200, "HELLO" ); painter.end(); }
That give me a test.pdf in the build folder
and expected result
-
@TheCipo76
Really odd. I cant guess sorry. Sample works here.
You use the code directly as is ? -
@mrjj Yes, copied and pasted
QPrinter printer(QPrinter::HighResolution); printer.setOrientation(QPrinter::Landscape); printer.setOutputFormat(QPrinter::PdfFormat); printer.setPaperSize(QPrinter::A4); printer.setOutputFileName("test.pdf"); QPainter painter; painter.begin(&printer); painter.drawText( 200,200, "HELLO" ); painter.end();
-
and you also searched for test.pdf to make sure
its not created any where else ? -
@TheCipo76
Very odd.
Can you try this code. it let u select save location
if that dont work. something up with your Qt.void printv4() { QPrinter printer(QPrinter::HighResolution); printer.setOrientation(QPrinter::Landscape); printer.setOutputFormat(QPrinter::PdfFormat); printer.setPaperSize(QPrinter::A4); QString fileName = QFileDialog::getSaveFileName(0,"file", "c:\\", "pdf (*.pdf)"); printer.setOutputFileName(fileName); QPainter painter; painter.begin(&printer); painter.drawText( 200,200, "HELLO" ); painter.end(); }
-
Super :)
So on mac it seems the file go somewhere else
if no path. maybe a read only place.
So when we tell the exact location , it does work :)