| /* poppler-converter.h: qt interface to poppler |
| * Copyright (C) 2005, Net Integration Technologies, Inc. |
| * Copyright (C) 2005, 2007, Brad Hards <bradh@frogmouth.net> |
| * Copyright (C) 2005-2015, 2017-2022, Albert Astals Cid <aacid@kde.org> |
| * Copyright (C) 2005, Stefan Kebekus <stefan.kebekus@math.uni-koeln.de> |
| * Copyright (C) 2006-2011, Pino Toscano <pino@kde.org> |
| * Copyright (C) 2009 Shawn Rutledge <shawn.t.rutledge@gmail.com> |
| * Copyright (C) 2010 Suzuki Toshiya <mpsuzuki@hiroshima-u.ac.jp> |
| * Copyright (C) 2010 Matthias Fauconneau <matthias.fauconneau@gmail.com> |
| * Copyright (C) 2011 Andreas Hartmetz <ahartmetz@gmail.com> |
| * Copyright (C) 2011 Glad Deschrijver <glad.deschrijver@gmail.com> |
| * Copyright (C) 2012, Guillermo A. Amaral B. <gamaral@kde.org> |
| * Copyright (C) 2012, Fabio D'Urso <fabiodurso@hotmail.it> |
| * Copyright (C) 2012, Tobias Koenig <tobias.koenig@kdab.com> |
| * Copyright (C) 2012, 2014, 2015, 2018, 2019 Adam Reichold <adamreichold@myopera.com> |
| * Copyright (C) 2012, 2013 Thomas Freitag <Thomas.Freitag@alfa.de> |
| * Copyright (C) 2013 Anthony Granger <grangeranthony@gmail.com> |
| * Copyright (C) 2016 Jakub Alba <jakubalba@gmail.com> |
| * Copyright (C) 2017, 2020, 2021 Oliver Sander <oliver.sander@tu-dresden.de> |
| * Copyright (C) 2017, 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info@kdab.com>. Work sponsored by the LiMux project of the city of Munich |
| * Copyright (C) 2018, 2021 Nelson Benítez León <nbenitezl@gmail.com> |
| * Copyright (C) 2019 Jan Grulich <jgrulich@redhat.com> |
| * Copyright (C) 2019 Alexander Volkov <a.volkov@rusbitech.ru> |
| * Copyright (C) 2020 Philipp Knechtges <philipp-dev@knechtges.com> |
| * Copyright (C) 2020 Katarina Behrens <Katarina.Behrens@cib.de> |
| * Copyright (C) 2020 Thorsten Behrens <Thorsten.Behrens@CIB.de> |
| * Copyright (C) 2020, 2024 Klarälvdalens Datakonsult AB, a KDAB Group company, <info@kdab.com>. Work sponsored by Technische Universität Dresden |
| * Copyright (C) 2021 Klarälvdalens Datakonsult AB, a KDAB Group company, <info@kdab.com>. |
| * Copyright (C) 2021 Mahmoud Khalil <mahmoudkhalil11@gmail.com> |
| * Copyright (C) 2021 Georgiy Sgibnev <georgiy@sgibnev.com>. Work sponsored by lab50.net. |
| * Copyright (C) 2022 Martin <martinbts@gmx.net> |
| * Copyright (C) 2023 Kevin Ottens <kevin.ottens@enioka.com>. Work sponsored by De Bortoli Wines |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation; either version 2, or (at your option) |
| * any later version. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. |
| */ |
| |
| #ifndef __POPPLER_CONVERTER_H__ |
| #define __POPPLER_CONVERTER_H__ |
| |
| #include <QtCore/QByteArray> |
| #include <QtCore/QIODevice> |
| |
| #include "poppler-export.h" |
| |
| namespace Poppler { |
| |
| class DocumentData; |
| |
| class BaseConverterPrivate; |
| class PSConverterPrivate; |
| class PDFConverterPrivate; |
| |
| /** |
| \brief Base converter. |
| |
| This is the base class for the converters. |
| */ |
| class POPPLER_QT6_EXPORT BaseConverter |
| { |
| friend class Document; |
| |
| public: |
| /** |
| Destructor. |
| */ |
| virtual ~BaseConverter(); |
| |
| /** Sets the output file name. You must set this or the output device. */ |
| void setOutputFileName(const QString &outputFileName); |
| |
| /** |
| * Sets the output device. You must set this or the output file name. |
| */ |
| void setOutputDevice(QIODevice *device); |
| |
| /** |
| Does the conversion. |
| |
| \return whether the conversion succeeded |
| */ |
| virtual bool convert() = 0; |
| |
| enum Error |
| { |
| NoError, |
| FileLockedError, |
| OpenOutputError, |
| NotSupportedInputFileError |
| }; |
| |
| /** |
| Returns the last error |
| */ |
| Error lastError() const; |
| |
| protected: |
| /// \cond PRIVATE |
| explicit BaseConverter(BaseConverterPrivate &dd); |
| Q_DECLARE_PRIVATE(BaseConverter) |
| BaseConverterPrivate *d_ptr; |
| /// \endcond |
| |
| private: |
| Q_DISABLE_COPY(BaseConverter) |
| }; |
| |
| /** |
| Converts a PDF to PS |
| |
| Sizes have to be in Points (1/72 inch) |
| |
| If you are using QPrinter you can get paper size by doing: |
| \code |
| QPrinter dummy(QPrinter::PrinterResolution); |
| dummy.setFullPage(true); |
| dummy.setPageSize(myPageSize); |
| width = dummy.width(); |
| height = dummy.height(); |
| \endcode |
| */ |
| class POPPLER_QT6_EXPORT PSConverter : public BaseConverter |
| { |
| friend class Document; |
| |
| public: |
| /** |
| Options for the PS export. |
| */ |
| enum PSOption |
| { |
| Printing = 0x00000001, ///< The PS is generated for printing purposes |
| StrictMargins = 0x00000002, |
| ForceRasterization = 0x00000004, |
| PrintToEPS = 0x00000008, ///< Output EPS instead of PS |
| HideAnnotations = 0x00000010, ///< Don't print annotations |
| ForceOverprintPreview = 0x00000020 ///< Force rasterized overprint preview during conversion \since 23.09 |
| }; |
| Q_DECLARE_FLAGS(PSOptions, PSOption) |
| |
| /** |
| Destructor. |
| */ |
| ~PSConverter() override; |
| |
| /** Sets the list of pages to print. Mandatory. */ |
| void setPageList(const QList<int> &pageList); |
| |
| /** |
| Sets the title of the PS Document. Optional |
| */ |
| void setTitle(const QString &title); |
| |
| /** |
| Sets the horizontal DPI. Defaults to 72.0 |
| */ |
| void setHDPI(double hDPI); |
| |
| /** |
| Sets the vertical DPI. Defaults to 72.0 |
| */ |
| void setVDPI(double vDPI); |
| |
| /** |
| Sets the rotate. Defaults to not rotated |
| */ |
| void setRotate(int rotate); |
| |
| /** |
| Sets the output paper width. Has to be set. |
| */ |
| void setPaperWidth(int paperWidth); |
| |
| /** |
| Sets the output paper height. Has to be set. |
| */ |
| void setPaperHeight(int paperHeight); |
| |
| /** |
| Sets the output right margin. Defaults to 0 |
| */ |
| void setRightMargin(int marginRight); |
| |
| /** |
| Sets the output bottom margin. Defaults to 0 |
| */ |
| void setBottomMargin(int marginBottom); |
| |
| /** |
| Sets the output left margin. Defaults to 0 |
| */ |
| void setLeftMargin(int marginLeft); |
| |
| /** |
| Sets the output top margin. Defaults to 0 |
| */ |
| void setTopMargin(int marginTop); |
| |
| /** |
| Defines if margins have to be strictly followed (even if that |
| means changing aspect ratio), or if the margins can be adapted |
| to keep aspect ratio. |
| |
| Defaults to false. |
| */ |
| void setStrictMargins(bool strictMargins); |
| |
| /** |
| Defines if the page will be rasterized to an image with overprint |
| preview enabled before printing. |
| |
| Defaults to false |
| |
| \since 23.09 |
| */ |
| void setForceOverprintPreview(bool forceOverprintPreview); |
| |
| /** Defines if the page will be rasterized to an image before printing. Defaults to false */ |
| void setForceRasterize(bool forceRasterize); |
| |
| /** |
| Sets the options for the PS export. |
| */ |
| void setPSOptions(PSOptions options); |
| |
| /** |
| The currently set options for the PS export. |
| |
| The default flags are: Printing. |
| */ |
| PSOptions psOptions() const; |
| |
| /** |
| Sets a function that will be called each time a page is converted. |
| |
| The payload belongs to the caller. |
| */ |
| void setPageConvertedCallback(void (*callback)(int page, void *payload), void *payload); |
| |
| bool convert() override; |
| |
| private: |
| Q_DECLARE_PRIVATE(PSConverter) |
| Q_DISABLE_COPY(PSConverter) |
| |
| explicit PSConverter(DocumentData *document); |
| }; |
| |
| /** |
| Converts a PDF to PDF (thus saves a copy of the document). |
| */ |
| class POPPLER_QT6_EXPORT PDFConverter : public BaseConverter |
| { |
| friend class Document; |
| |
| public: |
| /** |
| Options for the PDF export. |
| */ |
| enum PDFOption |
| { |
| WithChanges = 0x00000001 ///< The changes done to the document are saved as well |
| }; |
| Q_DECLARE_FLAGS(PDFOptions, PDFOption) |
| |
| /** |
| Destructor. |
| */ |
| ~PDFConverter() override; |
| |
| /** |
| Sets the options for the PDF export. |
| */ |
| void setPDFOptions(PDFOptions options); |
| /** |
| The currently set options for the PDF export. |
| */ |
| PDFOptions pdfOptions() const; |
| |
| /** |
| * Holds data for a new signature |
| * - Common Name of cert to sign (aka nickname) |
| * - password for the cert |
| * - page where to add the signature |
| * - rect for the signature annotation |
| * - text that will be shown inside the rect |
| * - font size and color |
| * - border width and color |
| * - background color |
| * \since 21.01 |
| */ |
| class POPPLER_QT6_EXPORT NewSignatureData |
| { |
| public: |
| NewSignatureData(); |
| ~NewSignatureData(); |
| NewSignatureData(const NewSignatureData &) = delete; |
| NewSignatureData &operator=(const NewSignatureData &) = delete; |
| |
| QString certNickname() const; |
| void setCertNickname(const QString &certNickname); |
| |
| QString password() const; |
| void setPassword(const QString &password); |
| |
| int page() const; |
| void setPage(int page); |
| |
| QRectF boundingRectangle() const; |
| void setBoundingRectangle(const QRectF &rect); |
| |
| QString signatureText() const; |
| void setSignatureText(const QString &text); |
| |
| /** |
| * If this text is not empty, the signature representation |
| * will split in two, with this text on the left and signatureText |
| * on the right |
| * |
| * \since 21.06 |
| */ |
| QString signatureLeftText() const; |
| void setSignatureLeftText(const QString &text); |
| |
| /** |
| * Signature's property Reason. |
| * |
| * Default: an empty string. |
| * |
| * \since 21.10 |
| */ |
| QString reason() const; |
| void setReason(const QString &reason); |
| |
| /** |
| * Signature's property Location. |
| * |
| * Default: an empty string. |
| * |
| * \since 21.10 |
| */ |
| QString location() const; |
| void setLocation(const QString &location); |
| |
| /** |
| * Default: 10 |
| */ |
| double fontSize() const; |
| void setFontSize(double fontSize); |
| |
| /** |
| * Default: 20 |
| * |
| * \since 21.06 |
| */ |
| double leftFontSize() const; |
| void setLeftFontSize(double fontSize); |
| |
| /** |
| * Default: red |
| */ |
| QColor fontColor() const; |
| void setFontColor(const QColor &color); |
| |
| /** |
| * Default: red |
| */ |
| QColor borderColor() const; |
| void setBorderColor(const QColor &color); |
| |
| /** |
| * border width in points |
| * |
| * Default: 1.5 |
| * |
| * \since 21.05 |
| */ |
| double borderWidth() const; |
| void setBorderWidth(double width); |
| |
| /** |
| * Default: QColor(240, 240, 240) |
| */ |
| QColor backgroundColor() const; |
| void setBackgroundColor(const QColor &color); |
| |
| /** |
| * Default: QUuid::createUuid().toString() |
| */ |
| QString fieldPartialName() const; |
| void setFieldPartialName(const QString &name); |
| |
| /** |
| * Document owner password (needed if the document that is being signed is password protected) |
| * |
| * Default: no password |
| * |
| * \since 22.02 |
| */ |
| QByteArray documentOwnerPassword() const; |
| void setDocumentOwnerPassword(const QByteArray &password); |
| |
| /** |
| * Document user password (needed if the document that is being signed is password protected) |
| * |
| * Default: no password |
| * |
| * \since 22.02 |
| */ |
| QByteArray documentUserPassword() const; |
| void setDocumentUserPassword(const QByteArray &password); |
| |
| /** |
| * Filesystem path to an image file to be used as background |
| * image for the signature annotation widget. |
| * |
| * Default: empty |
| * |
| * \since 22.02 |
| */ |
| QString imagePath() const; |
| void setImagePath(const QString &path); |
| |
| private: |
| struct NewSignatureDataPrivate; |
| NewSignatureDataPrivate *const d; |
| }; |
| |
| /** |
| Sign PDF at given Annotation / signature form |
| |
| \param data new signature data |
| |
| \return whether the signing succeeded |
| |
| \since 21.01 |
| */ |
| bool sign(const NewSignatureData &data); |
| |
| bool convert() override; |
| |
| private: |
| Q_DECLARE_PRIVATE(PDFConverter) |
| Q_DISABLE_COPY(PDFConverter) |
| |
| explicit PDFConverter(DocumentData *document); |
| }; |
| |
| } |
| |
| Q_DECLARE_OPERATORS_FOR_FLAGS(Poppler::PDFConverter::PDFOptions) |
| Q_DECLARE_OPERATORS_FOR_FLAGS(Poppler::PSConverter::PSOptions) |
| |
| #endif |