From 493b6ab72b8a28eb8a1d05be17a831aa7f22ad71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fauconnier?= Date: Thu, 28 Apr 2022 10:13:16 +0200 Subject: [PATCH] trying to maintain fixes that were committed with 1a425b0 + setPdfVersion to 1.4 to help ensure compatibilty with pdf-merger --- src/adaptors/UBExportFullPDF.cpp | 78 ++++++++++++++++++-------------- src/adaptors/UBExportPDF.cpp | 1 + 2 files changed, 46 insertions(+), 33 deletions(-) diff --git a/src/adaptors/UBExportFullPDF.cpp b/src/adaptors/UBExportFullPDF.cpp index 9ac220e1..f15afb2a 100644 --- a/src/adaptors/UBExportFullPDF.cpp +++ b/src/adaptors/UBExportFullPDF.cpp @@ -83,54 +83,66 @@ void UBExportFullPDF::saveOverlayPdf(UBDocumentProxy* pDocumentProxy, const QStr return; //PDF - qDebug() << "exporting document to PDF Merger" << filename; - QPrinter pdfPrinter; + qDebug() << "exporting document to PDF Merger" << filename; + QPrinter pdfPrinter; - pdfPrinter.setOutputFormat(QPrinter::PdfFormat); - pdfPrinter.setResolution(UBSettings::settings()->pdfResolution->get().toInt()); - pdfPrinter.setOutputFileName(filename); - pdfPrinter.setFullPage(true); + pdfPrinter.setOutputFormat(QPrinter::PdfFormat); + pdfPrinter.setResolution(UBSettings::settings()->pdfResolution->get().toInt()); + pdfPrinter.setOutputFileName(filename); + pdfPrinter.setFullPage(true); - QPainter* pdfPainter = 0; + QPainter* pdfPainter = 0; - for(int pageIndex = 0 ; pageIndex < pDocumentProxy->pageCount(); pageIndex++) + for(int pageIndex = 0 ; pageIndex < pDocumentProxy->pageCount(); pageIndex++) + { + UBGraphicsScene* scene = UBPersistenceManager::persistenceManager()->loadDocumentScene(pDocumentProxy, pageIndex); + // set background to white, no grid for PDF output + bool isDark = scene->isDarkBackground(); + UBPageBackground pageBackground = scene->pageBackground(); + + bool exportDark = isDark && UBSettings::settings()->exportBackgroundColor->get().toBool(); + + if (UBSettings::settings()->exportBackgroundGrid->get().toBool()) + { + scene->setBackground(exportDark, pageBackground); + } + else { - UBGraphicsScene* scene = UBPersistenceManager::persistenceManager()->loadDocumentScene(pDocumentProxy, pageIndex); - // set background to white, no grid for PDF output - bool isDark = scene->isDarkBackground(); - UBPageBackground pageBackground = scene->pageBackground(); - scene->setBackground(false, UBPageBackground::plain); + scene->setBackground(exportDark, UBPageBackground::plain); + } - // set high res rendering - scene->setRenderingQuality(UBItem::RenderingQualityHigh, UBItem::CacheNotAllowed); - scene->setRenderingContext(UBGraphicsScene::PdfExport); + // set high res rendering + scene->setRenderingQuality(UBItem::RenderingQualityHigh, UBItem::CacheNotAllowed); + scene->setRenderingContext(UBGraphicsScene::PdfExport); - QSize pageSize = scene->nominalSize(); + // pageSize is the output PDF page size; it is set to equal the scene's boundary size; if the contents + // of the scene overflow from the boundaries, they will be scaled down. + QSize pageSize = scene->sceneSize(); - UBGraphicsPDFItem *pdfItem = qgraphicsitem_cast(scene->backgroundObject()); + UBGraphicsPDFItem *pdfItem = qgraphicsitem_cast(scene->backgroundObject()); - if (pdfItem) mHasPDFBackgrounds = true; + if (pdfItem) mHasPDFBackgrounds = true; - pdfPrinter.setPaperSize(QSizeF(pageSize.width()*mScaleFactor, pageSize.height()*mScaleFactor), QPrinter::Point); + pdfPrinter.setPaperSize(QSizeF(pageSize.width()*mScaleFactor, pageSize.height()*mScaleFactor), QPrinter::Point); - if (!pdfPainter) pdfPainter = new QPainter(&pdfPrinter); + if (!pdfPainter) pdfPainter = new QPainter(&pdfPrinter); - if (pageIndex != 0) pdfPrinter.newPage(); + if (pageIndex != 0) pdfPrinter.newPage(); - //render to PDF - scene->setDrawingMode(true); - scene->render(pdfPainter, QRectF(), scene->normalizedSceneRect()); + //render to PDF + scene->setDrawingMode(true); + scene->render(pdfPainter, QRectF(), scene->normalizedSceneRect()); - //restore screen rendering quality - scene->setRenderingContext(UBGraphicsScene::Screen); - scene->setRenderingQuality(UBItem::RenderingQualityNormal, UBItem::CacheAllowed); + //restore screen rendering quality + scene->setRenderingContext(UBGraphicsScene::Screen); + scene->setRenderingQuality(UBItem::RenderingQualityNormal, UBItem::CacheAllowed); - //restore background state - scene->setDrawingMode(false); - scene->setBackground(isDark, pageBackground); - } + //restore background state + scene->setDrawingMode(false); + scene->setBackground(isDark, pageBackground); + } - if (pdfPainter) delete pdfPainter; + if (pdfPainter) delete pdfPainter; } diff --git a/src/adaptors/UBExportPDF.cpp b/src/adaptors/UBExportPDF.cpp index 683716bb..51bca59e 100644 --- a/src/adaptors/UBExportPDF.cpp +++ b/src/adaptors/UBExportPDF.cpp @@ -87,6 +87,7 @@ bool UBExportPDF::persistsDocument(UBDocumentProxy* pDocumentProxy, const QStrin pdfWriter.setPageMargins(QMarginsF()); pdfWriter.setTitle(pDocumentProxy->name()); pdfWriter.setCreator("OpenBoard PDF export"); + pdfWriter.setPdfVersion(QPagedPaintDevice::PdfVersion_1_4); //need to calculate screen resolution QDesktopWidget* desktop = UBApplication::desktop();