From 6c32927f8cf226b8158dd25f4b92a6853dadb8b6 Mon Sep 17 00:00:00 2001 From: Tobias Koenig Date: Tue, 14 Feb 2017 10:11:19 +0100 Subject: Improve PDF/A-1b support in QPdfWriter Add new enum QPrinter::PdfVersion to switch QPdfWriter into PDF/A-1b mode. In that mode - meta data are embedded in XMP format - a color profile for sRGB is embedded and an OutputIntent defined - the ID key is added to the document trailer dictionary - a CIDSet entry is added to the font descriptor - transparency is removed from pens, brushes and images Change-Id: Ia8a24d83609b239e716aefc1ba05f07320dbd290 Reviewed-by: Lars Knoll --- src/printsupport/kernel/qprintengine_pdf.cpp | 4 +++- src/printsupport/kernel/qprintengine_pdf_p.h | 2 +- src/printsupport/kernel/qprinter.cpp | 33 +++++++++++++++++++++++++++- src/printsupport/kernel/qprinter.h | 3 +++ src/printsupport/kernel/qprinter_p.h | 4 +++- 5 files changed, 42 insertions(+), 4 deletions(-) (limited to 'src/printsupport/kernel') diff --git a/src/printsupport/kernel/qprintengine_pdf.cpp b/src/printsupport/kernel/qprintengine_pdf.cpp index 278bb044e1..080ff7ccf4 100644 --- a/src/printsupport/kernel/qprintengine_pdf.cpp +++ b/src/printsupport/kernel/qprintengine_pdf.cpp @@ -58,10 +58,12 @@ QT_BEGIN_NAMESPACE -QPdfPrintEngine::QPdfPrintEngine(QPrinter::PrinterMode m) +QPdfPrintEngine::QPdfPrintEngine(QPrinter::PrinterMode m, QPdfEngine::PdfVersion version) : QPdfEngine(*new QPdfPrintEnginePrivate(m)) { state = QPrinter::Idle; + + setPdfVersion(version); } QPdfPrintEngine::QPdfPrintEngine(QPdfPrintEnginePrivate &p) diff --git a/src/printsupport/kernel/qprintengine_pdf_p.h b/src/printsupport/kernel/qprintengine_pdf_p.h index b964885bbf..e9e81bdf68 100644 --- a/src/printsupport/kernel/qprintengine_pdf_p.h +++ b/src/printsupport/kernel/qprintengine_pdf_p.h @@ -83,7 +83,7 @@ class Q_PRINTSUPPORT_EXPORT QPdfPrintEngine : public QPdfEngine, public QPrintEn { Q_DECLARE_PRIVATE(QPdfPrintEngine) public: - QPdfPrintEngine(QPrinter::PrinterMode m); + QPdfPrintEngine(QPrinter::PrinterMode m, QPdfEngine::PdfVersion version = QPdfEngine::Version_1_4); virtual ~QPdfPrintEngine(); // reimplementations QPaintEngine diff --git a/src/printsupport/kernel/qprinter.cpp b/src/printsupport/kernel/qprinter.cpp index 53bed87dfc..638187c614 100644 --- a/src/printsupport/kernel/qprinter.cpp +++ b/src/printsupport/kernel/qprinter.cpp @@ -147,7 +147,8 @@ void QPrinterPrivate::initEngines(QPrinter::OutputFormat format, const QPrinterI printEngine = ps->createNativePrintEngine(printerMode); paintEngine = ps->createPaintEngine(printEngine, printerMode); } else { - QPdfPrintEngine *pdfEngine = new QPdfPrintEngine(printerMode); + const auto pdfEngineVersion = (pdfVersion == QPrinter::PdfVersion_1_4 ? QPdfEngine::Version_1_4 : QPdfEngine::Version_A1b); + QPdfPrintEngine *pdfEngine = new QPdfPrintEngine(printerMode, pdfEngineVersion); paintEngine = pdfEngine; printEngine = pdfEngine; } @@ -685,7 +686,37 @@ QPrinter::OutputFormat QPrinter::outputFormat() const return d->outputFormat; } +/*! + \since 5.10 + + Sets the PDF version for this printer to \a version. + + If \a version is the same value as currently set then no change will be made. +*/ +void QPrinter::setPdfVersion(PdfVersion version) +{ + Q_D(QPrinter); + + if (d->pdfVersion == version) + return; + + d->pdfVersion = version; + if (d->outputFormat == QPrinter::PdfFormat) { + d->changeEngines(d->outputFormat, QPrinterInfo()); + } +} + +/*! + \since 5.10 + + Returns the PDF version for this printer. The default is \c PdfVersion_1_4. +*/ +QPrinter::PdfVersion QPrinter::pdfVersion() const +{ + Q_D(const QPrinter); + return d->pdfVersion; +} /*! \internal */ diff --git a/src/printsupport/kernel/qprinter.h b/src/printsupport/kernel/qprinter.h index 33a2d4dbc8..bfe2d346ae 100644 --- a/src/printsupport/kernel/qprinter.h +++ b/src/printsupport/kernel/qprinter.h @@ -134,6 +134,9 @@ public: void setOutputFormat(OutputFormat format); OutputFormat outputFormat() const; + void setPdfVersion(PdfVersion version); + PdfVersion pdfVersion() const; + void setPrinterName(const QString &); QString printerName() const; diff --git a/src/printsupport/kernel/qprinter_p.h b/src/printsupport/kernel/qprinter_p.h index 18dfad926c..8f962ea051 100644 --- a/src/printsupport/kernel/qprinter_p.h +++ b/src/printsupport/kernel/qprinter_p.h @@ -75,7 +75,8 @@ class Q_PRINTSUPPORT_EXPORT QPrinterPrivate Q_DECLARE_PUBLIC(QPrinter) public: QPrinterPrivate(QPrinter *printer) - : printEngine(0), + : pdfVersion(QPrinter::PdfVersion_1_4), + printEngine(0), paintEngine(0), realPrintEngine(0), realPaintEngine(0), @@ -107,6 +108,7 @@ public: QPrinter::PrinterMode printerMode; QPrinter::OutputFormat outputFormat; + QPrinter::PdfVersion pdfVersion; QPrintEngine *printEngine; QPaintEngine *paintEngine; -- cgit v1.2.3