mirror of
https://github.com/YACReader/yacreader
synced 2025-05-28 03:10:27 -04:00
1772 lines
46 KiB
C++
1772 lines
46 KiB
C++
/* poppler-qt.h: qt interface to poppler
|
|
* Copyright (C) 2005, Net Integration Technologies, Inc.
|
|
* Copyright (C) 2005, 2007, Brad Hards <bradh@frogmouth.net>
|
|
* Copyright (C) 2005-2013, 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 Adam Reichold <adamreichold@myopera.com>
|
|
* Copyright (C) 2012, 2013 Thomas Freitag <Thomas.Freitag@alfa.de>
|
|
* Copyright (C) 2013 Anthony Granger <grangeranthony@gmail.com>
|
|
*
|
|
* 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_QT_H__
|
|
#define __POPPLER_QT_H__
|
|
|
|
#include "poppler-annotation.h"
|
|
#include "poppler-link.h"
|
|
#include "poppler-optcontent.h"
|
|
#include "poppler-page-transition.h"
|
|
|
|
#include <QtCore/QByteArray>
|
|
#include <QtCore/QDateTime>
|
|
#include <QtCore/QSet>
|
|
#include <QtXml/QDomDocument>
|
|
#include "poppler-export.h"
|
|
|
|
class EmbFile;
|
|
class Sound;
|
|
class AnnotMovie;
|
|
|
|
/**
|
|
The %Poppler Qt5 binding.
|
|
*/
|
|
namespace Poppler {
|
|
|
|
class Document;
|
|
class DocumentData;
|
|
|
|
class PageData;
|
|
|
|
class FormField;
|
|
|
|
class TextBoxData;
|
|
|
|
class PDFConverter;
|
|
class PSConverter;
|
|
|
|
/**
|
|
Debug/error function.
|
|
|
|
This function type is used for debugging & error output;
|
|
the first parameter is the actual message, the second is the unaltered
|
|
closure argument which was passed to the setDebugErrorFunction call.
|
|
|
|
\since 0.16
|
|
*/
|
|
typedef void (*PopplerDebugFunc)(const QString & /*message*/, const QVariant & /*closure*/);
|
|
|
|
/**
|
|
Set a new debug/error output function.
|
|
|
|
If not set, by default error and debug messages will be sent to the
|
|
Qt \p qDebug() function.
|
|
|
|
\param debugFunction the new debug function
|
|
\param closure user data which will be passes as-is to the debug function
|
|
|
|
\since 0.16
|
|
*/
|
|
POPPLER_QT5_EXPORT void setDebugErrorFunction(PopplerDebugFunc debugFunction, const QVariant &closure);
|
|
|
|
/**
|
|
Describes the physical location of text on a document page
|
|
|
|
This very simple class describes the physical location of text
|
|
on the page. It consists of
|
|
- a QString that contains the text
|
|
- a QRectF that gives a box that describes where on the page
|
|
the text is found.
|
|
*/
|
|
class POPPLER_QT5_EXPORT TextBox {
|
|
friend class Page;
|
|
public:
|
|
/**
|
|
The default constructor sets the \p text and the rectangle that
|
|
contains the text. Coordinates for the \p bBox are in points =
|
|
1/72 of an inch.
|
|
*/
|
|
TextBox(const QString& text, const QRectF &bBox);
|
|
/**
|
|
Destructor.
|
|
*/
|
|
~TextBox();
|
|
|
|
/**
|
|
Returns the text of this text box
|
|
*/
|
|
QString text() const;
|
|
|
|
/**
|
|
Returns the position of the text, in point, i.e., 1/72 of
|
|
an inch
|
|
|
|
\since 0.8
|
|
*/
|
|
QRectF boundingBox() const;
|
|
|
|
/**
|
|
Returns the pointer to the next text box, if there is one.
|
|
|
|
Otherwise, it returns a null pointer.
|
|
*/
|
|
TextBox *nextWord() const;
|
|
|
|
/**
|
|
Returns the bounding box of the \p i -th characted of the word.
|
|
*/
|
|
QRectF charBoundingBox(int i) const;
|
|
|
|
/**
|
|
Returns whether there is a space character after this text box
|
|
*/
|
|
bool hasSpaceAfter() const;
|
|
|
|
private:
|
|
Q_DISABLE_COPY(TextBox)
|
|
|
|
TextBoxData *m_data;
|
|
};
|
|
|
|
|
|
class FontInfoData;
|
|
/**
|
|
Container class for information about a font within a PDF
|
|
document
|
|
*/
|
|
class POPPLER_QT5_EXPORT FontInfo {
|
|
friend class Document;
|
|
public:
|
|
/**
|
|
The type of font.
|
|
*/
|
|
enum Type {
|
|
unknown,
|
|
Type1,
|
|
Type1C,
|
|
Type1COT,
|
|
Type3,
|
|
TrueType,
|
|
TrueTypeOT,
|
|
CIDType0,
|
|
CIDType0C,
|
|
CIDType0COT,
|
|
CIDTrueType,
|
|
CIDTrueTypeOT
|
|
};
|
|
|
|
/// \cond PRIVATE
|
|
/**
|
|
Create a new font information container.
|
|
*/
|
|
FontInfo();
|
|
|
|
/**
|
|
Create a new font information container.
|
|
*/
|
|
FontInfo( const FontInfoData &fid );
|
|
/// \endcond
|
|
|
|
/**
|
|
Copy constructor.
|
|
*/
|
|
FontInfo( const FontInfo &fi );
|
|
|
|
/**
|
|
Destructor.
|
|
*/
|
|
~FontInfo();
|
|
|
|
/**
|
|
The name of the font. Can be QString::null if the font has no name
|
|
*/
|
|
QString name() const;
|
|
|
|
/**
|
|
The path of the font file used to represent this font on this system,
|
|
or a null string is the font is embedded
|
|
*/
|
|
QString file() const;
|
|
|
|
/**
|
|
Whether the font is embedded in the file, or not
|
|
|
|
\return true if the font is embedded
|
|
*/
|
|
bool isEmbedded() const;
|
|
|
|
/**
|
|
Whether the font provided is only a subset of the full
|
|
font or not. This only has meaning if the font is embedded.
|
|
|
|
\return true if the font is only a subset
|
|
*/
|
|
bool isSubset() const;
|
|
|
|
/**
|
|
The type of font encoding
|
|
|
|
\return a enumerated value corresponding to the font encoding used
|
|
|
|
\sa typeName for a string equivalent
|
|
*/
|
|
Type type() const;
|
|
|
|
/**
|
|
The name of the font encoding used
|
|
|
|
\note if you are looking for the name of the font (as opposed to the
|
|
encoding format used), you probably want name().
|
|
|
|
\sa type for a enumeration version
|
|
*/
|
|
QString typeName() const;
|
|
|
|
/**
|
|
Standard assignment operator
|
|
*/
|
|
FontInfo& operator=( const FontInfo &fi );
|
|
|
|
private:
|
|
FontInfoData *m_data;
|
|
};
|
|
|
|
|
|
class FontIteratorData;
|
|
/**
|
|
Iterator for reading the fonts in a document.
|
|
|
|
FontIterator provides a Java-style iterator for reading the fonts in a
|
|
document.
|
|
|
|
You can use it in the following way:
|
|
\code
|
|
Poppler::FontIterator* it = doc->newFontIterator();
|
|
while (it->hasNext()) {
|
|
QList<Poppler::FontInfo> fonts = it->next();
|
|
// do something with the fonts
|
|
}
|
|
// after doing the job, the iterator must be freed
|
|
delete it;
|
|
\endcode
|
|
|
|
\since 0.12
|
|
*/
|
|
class POPPLER_QT5_EXPORT FontIterator {
|
|
friend class Document;
|
|
friend class DocumentData;
|
|
public:
|
|
/**
|
|
Destructor.
|
|
*/
|
|
~FontIterator();
|
|
|
|
/**
|
|
Returns the fonts of the current page and then advances the iterator
|
|
to the next page.
|
|
*/
|
|
QList<FontInfo> next();
|
|
|
|
/**
|
|
Checks whether there is at least one more page to iterate, ie returns
|
|
false when the iterator is beyond the last page.
|
|
*/
|
|
bool hasNext() const;
|
|
|
|
/**
|
|
Returns the current page where the iterator is.
|
|
*/
|
|
int currentPage() const;
|
|
|
|
private:
|
|
Q_DISABLE_COPY( FontIterator )
|
|
FontIterator( int, DocumentData *dd );
|
|
|
|
FontIteratorData *d;
|
|
};
|
|
|
|
|
|
class EmbeddedFileData;
|
|
/**
|
|
Container class for an embedded file with a PDF document
|
|
*/
|
|
class POPPLER_QT5_EXPORT EmbeddedFile {
|
|
friend class DocumentData;
|
|
friend class AnnotationPrivate;
|
|
public:
|
|
/// \cond PRIVATE
|
|
EmbeddedFile(EmbFile *embfile);
|
|
/// \endcond
|
|
|
|
/**
|
|
Destructor.
|
|
*/
|
|
~EmbeddedFile();
|
|
|
|
/**
|
|
The name associated with the file
|
|
*/
|
|
QString name() const;
|
|
|
|
/**
|
|
The description associated with the file, if any.
|
|
|
|
This will return an empty QString if there is no description element
|
|
*/
|
|
QString description() const;
|
|
|
|
/**
|
|
The size of the file.
|
|
|
|
This will return < 0 if there is no size element
|
|
*/
|
|
int size() const;
|
|
|
|
/**
|
|
The modification date for the embedded file, if known.
|
|
*/
|
|
QDateTime modDate() const;
|
|
|
|
/**
|
|
The creation date for the embedded file, if known.
|
|
*/
|
|
QDateTime createDate() const;
|
|
|
|
/**
|
|
The MD5 checksum of the file.
|
|
|
|
This will return an empty QByteArray if there is no checksum element.
|
|
*/
|
|
QByteArray checksum() const;
|
|
|
|
/**
|
|
The MIME type of the file, if known.
|
|
|
|
\since 0.8
|
|
*/
|
|
QString mimeType() const;
|
|
|
|
/**
|
|
The data as a byte array
|
|
*/
|
|
QByteArray data();
|
|
|
|
/**
|
|
Is the embedded file valid?
|
|
|
|
\since 0.12
|
|
*/
|
|
bool isValid() const;
|
|
|
|
/**
|
|
A QDataStream for the actual data?
|
|
*/
|
|
//QDataStream dataStream() const;
|
|
|
|
private:
|
|
Q_DISABLE_COPY(EmbeddedFile)
|
|
EmbeddedFile(EmbeddedFileData &dd);
|
|
|
|
EmbeddedFileData *m_embeddedFile;
|
|
};
|
|
|
|
|
|
/**
|
|
\brief A page in a document.
|
|
|
|
The Page class represents a single page within a PDF document.
|
|
|
|
You cannot construct a Page directly, but you have to use the Document
|
|
functions that return a new Page out of an index or a label.
|
|
*/
|
|
class POPPLER_QT5_EXPORT Page {
|
|
friend class Document;
|
|
public:
|
|
/**
|
|
Destructor.
|
|
*/
|
|
~Page();
|
|
|
|
/**
|
|
The type of rotation to apply for an operation
|
|
*/
|
|
enum Rotation { Rotate0 = 0, ///< Do not rotate
|
|
Rotate90 = 1, ///< Rotate 90 degrees clockwise
|
|
Rotate180 = 2, ///< Rotate 180 degrees
|
|
Rotate270 = 3 ///< Rotate 270 degrees clockwise (90 degrees counterclockwise)
|
|
};
|
|
|
|
/**
|
|
The kinds of page actions
|
|
*/
|
|
enum PageAction {
|
|
Opening, ///< The action when a page is "opened"
|
|
Closing ///< The action when a page is "closed"
|
|
};
|
|
|
|
/**
|
|
How the text is going to be returned
|
|
\since 0.16
|
|
*/
|
|
enum TextLayout {
|
|
PhysicalLayout, ///< The text is layouted to resemble the real page layout
|
|
RawOrderLayout ///< The text is returned without any type of processing
|
|
};
|
|
|
|
/**
|
|
Additional flags for the renderToPainter method
|
|
\since 0.16
|
|
*/
|
|
enum PainterFlag {
|
|
/**
|
|
Do not save/restore the caller-owned painter.
|
|
|
|
renderToPainter() by default preserves, using save() + restore(),
|
|
the state of the painter specified; if this is not needed, this
|
|
flag can avoid this job
|
|
*/
|
|
DontSaveAndRestore = 0x00000001
|
|
};
|
|
Q_DECLARE_FLAGS( PainterFlags, PainterFlag )
|
|
|
|
/**
|
|
Render the page to a QImage using the current
|
|
\link Document::renderBackend() Document renderer\endlink.
|
|
|
|
If \p x = \p y = \p w = \p h = -1, the method will automatically
|
|
compute the size of the image from the horizontal and vertical
|
|
resolutions specified in \p xres and \p yres. Otherwise, the
|
|
method renders only a part of the page, specified by the
|
|
parameters (\p x, \p y, \p w, \p h) in pixel coordinates. The returned
|
|
QImage then has size (\p w, \p h), independent of the page
|
|
size.
|
|
|
|
\param x specifies the left x-coordinate of the box, in
|
|
pixels.
|
|
|
|
\param y specifies the top y-coordinate of the box, in
|
|
pixels.
|
|
|
|
\param w specifies the width of the box, in pixels.
|
|
|
|
\param h specifies the height of the box, in pixels.
|
|
|
|
\param xres horizontal resolution of the graphics device,
|
|
in dots per inch
|
|
|
|
\param yres vertical resolution of the graphics device, in
|
|
dots per inch
|
|
|
|
\param rotate how to rotate the page
|
|
|
|
\warning The parameter (\p x, \p y, \p w, \p h) are not
|
|
well-tested. Unusual or meaningless parameters may lead to
|
|
rather unexpected results.
|
|
|
|
\returns a QImage of the page, or a null image on failure.
|
|
|
|
\since 0.6
|
|
*/
|
|
QImage renderToImage(double xres=72.0, double yres=72.0, int x=-1, int y=-1, int w=-1, int h=-1, Rotation rotate = Rotate0) const;
|
|
|
|
/**
|
|
Render the page to the specified QPainter using the current
|
|
\link Document::renderBackend() Document renderer\endlink.
|
|
|
|
If \p x = \p y = \p w = \p h = -1, the method will automatically
|
|
compute the size of the page area from the horizontal and vertical
|
|
resolutions specified in \p xres and \p yres. Otherwise, the
|
|
method renders only a part of the page, specified by the
|
|
parameters (\p x, \p y, \p w, \p h) in pixel coordinates.
|
|
|
|
\param painter the painter to paint on
|
|
|
|
\param x specifies the left x-coordinate of the box, in
|
|
pixels.
|
|
|
|
\param y specifies the top y-coordinate of the box, in
|
|
pixels.
|
|
|
|
\param w specifies the width of the box, in pixels.
|
|
|
|
\param h specifies the height of the box, in pixels.
|
|
|
|
\param xres horizontal resolution of the graphics device,
|
|
in dots per inch
|
|
|
|
\param yres vertical resolution of the graphics device, in
|
|
dots per inch
|
|
|
|
\param rotate how to rotate the page
|
|
|
|
\param flags additional painter flags
|
|
|
|
\warning The parameter (\p x, \p y, \p w, \p h) are not
|
|
well-tested. Unusual or meaningless parameters may lead to
|
|
rather unexpected results.
|
|
|
|
\returns whether the painting succeeded
|
|
|
|
\note This method is only supported for Arthur
|
|
|
|
\since 0.16
|
|
*/
|
|
bool renderToPainter(QPainter* painter, double xres=72.0, double yres=72.0, int x=-1, int y=-1, int w=-1, int h=-1,
|
|
Rotation rotate = Rotate0, PainterFlags flags = 0) const;
|
|
|
|
/**
|
|
Get the page thumbnail if it exists.
|
|
|
|
\return a QImage of the thumbnail, or a null image
|
|
if the PDF does not contain one for this page
|
|
|
|
\since 0.12
|
|
*/
|
|
QImage thumbnail() const;
|
|
|
|
/**
|
|
Returns the text that is inside a specified rectangle
|
|
|
|
\param rect the rectangle specifying the area of interest,
|
|
with coordinates given in points, i.e., 1/72th of an inch.
|
|
If rect is null, all text on the page is given
|
|
|
|
\since 0.16
|
|
**/
|
|
QString text(const QRectF &rect, TextLayout textLayout) const;
|
|
|
|
/**
|
|
Returns the text that is inside a specified rectangle.
|
|
The text is returned using the physical layout of the page
|
|
|
|
\param rect the rectangle specifying the area of interest,
|
|
with coordinates given in points, i.e., 1/72th of an inch.
|
|
If rect is null, all text on the page is given
|
|
**/
|
|
QString text(const QRectF &rect) const;
|
|
|
|
/**
|
|
The starting point for a search
|
|
*/
|
|
enum SearchDirection { FromTop, ///< Start sorting at the top of the document
|
|
NextResult, ///< Find the next result, moving "down the page"
|
|
PreviousResult ///< Find the previous result, moving "up the page"
|
|
};
|
|
|
|
/**
|
|
The type of search to perform
|
|
*/
|
|
enum SearchMode { CaseSensitive, ///< Case differences cause no match in searching
|
|
CaseInsensitive ///< Case differences are ignored in matching
|
|
};
|
|
|
|
/**
|
|
Returns true if the specified text was found.
|
|
|
|
\param text the text the search
|
|
\param rectXXX in all directions is used to return where the text was found, for NextResult and PreviousResult
|
|
indicates where to continue searching for
|
|
\param direction in which direction do the search
|
|
\param caseSensitive be case sensitive?
|
|
\param rotate the rotation to apply for the search order
|
|
\since 0.14
|
|
**/
|
|
bool search(const QString &text, double &rectLeft, double &rectTop, double &rectRight, double &rectBottom, SearchDirection direction, SearchMode caseSensitive, Rotation rotate = Rotate0) const;
|
|
|
|
/**
|
|
Returns a list of all occurrences of the specified text on the page.
|
|
|
|
\param text the text to search
|
|
\param caseSensitive whether to be case sensitive
|
|
\param rotate the rotation to apply for the search order
|
|
|
|
\warning Do not use the returned QRectF as arguments of another search call because of truncation issues if qreal is defined as float.
|
|
|
|
\since 0.22
|
|
**/
|
|
QList<QRectF> search(const QString &text, SearchMode caseSensitive, Rotation rotate = Rotate0) const;
|
|
|
|
/**
|
|
Returns a list of text of the page
|
|
|
|
This method returns a QList of TextBoxes that contain all
|
|
the text of the page, with roughly one text word of text
|
|
per TextBox item.
|
|
|
|
For text written in western languages (left-to-right and
|
|
up-to-down), the QList contains the text in the proper
|
|
order.
|
|
|
|
\note The caller owns the text boxes and they should
|
|
be deleted when no longer required.
|
|
|
|
\warning This method is not tested with Asian scripts
|
|
*/
|
|
QList<TextBox*> textList(Rotation rotate = Rotate0) const;
|
|
|
|
/**
|
|
\return The dimensions (cropbox) of the page, in points (i.e. 1/72th of an inch)
|
|
*/
|
|
QSizeF pageSizeF() const;
|
|
|
|
/**
|
|
\return The dimensions (cropbox) of the page, in points (i.e. 1/72th of an inch)
|
|
*/
|
|
QSize pageSize() const;
|
|
|
|
/**
|
|
Returns the transition of this page
|
|
|
|
\returns a pointer to a PageTransition structure that
|
|
defines how transition to this page shall be performed.
|
|
|
|
\note The PageTransition structure is owned by this page, and will
|
|
automatically be destroyed when this page class is
|
|
destroyed.
|
|
**/
|
|
PageTransition *transition() const;
|
|
|
|
/**
|
|
Gets the page action specified, or NULL if there is no action.
|
|
|
|
\since 0.6
|
|
**/
|
|
Link *action( PageAction act ) const;
|
|
|
|
/**
|
|
Types of orientations that are possible
|
|
*/
|
|
enum Orientation {
|
|
Landscape, ///< Landscape orientation (portrait, with 90 degrees clockwise rotation )
|
|
Portrait, ///< Normal portrait orientation
|
|
Seascape, ///< Seascape orientation (portrait, with 270 degrees clockwise rotation)
|
|
UpsideDown ///< Upside down orientation (portrait, with 180 degrees rotation)
|
|
};
|
|
|
|
/**
|
|
The orientation of the page
|
|
*/
|
|
Orientation orientation() const;
|
|
|
|
/**
|
|
The default CTM
|
|
*/
|
|
void defaultCTM(double *CTM, double dpiX, double dpiY, int rotate, bool upsideDown);
|
|
|
|
/**
|
|
Gets the links of the page
|
|
*/
|
|
QList<Link*> links() const;
|
|
|
|
/**
|
|
Returns the annotations of the page
|
|
|
|
\note If you call this method twice, you get different objects
|
|
pointing to the same annotations (see Annotation).
|
|
The caller owns the returned objects and they should be deleted
|
|
when no longer required.
|
|
*/
|
|
QList<Annotation*> annotations() const;
|
|
|
|
/**
|
|
Adds an annotation to the page
|
|
|
|
\note Ownership of the annotation object stays with the caller, who can
|
|
delete it at any time.
|
|
\since 0.20
|
|
*/
|
|
void addAnnotation( const Annotation *ann );
|
|
|
|
/**
|
|
Removes an annotation from the page and destroys the annotation object
|
|
|
|
\note There mustn't be other Annotation objects pointing this annotation
|
|
\since 0.20
|
|
*/
|
|
void removeAnnotation( const Annotation *ann );
|
|
|
|
/**
|
|
Returns the form fields on the page
|
|
The caller gets the ownership of the returned objects.
|
|
|
|
\since 0.6
|
|
*/
|
|
QList<FormField*> formFields() const;
|
|
|
|
/**
|
|
Returns the page duration. That is the time, in seconds, that the page
|
|
should be displayed before the presentation automatically advances to the next page.
|
|
Returns < 0 if duration is not set.
|
|
|
|
\since 0.6
|
|
*/
|
|
double duration() const;
|
|
|
|
/**
|
|
Returns the label of the page, or a null string is the page has no label.
|
|
|
|
\since 0.6
|
|
**/
|
|
QString label() const;
|
|
|
|
private:
|
|
Q_DISABLE_COPY(Page)
|
|
|
|
Page(DocumentData *doc, int index);
|
|
PageData *m_page;
|
|
};
|
|
|
|
/**
|
|
\brief PDF document.
|
|
|
|
The Document class represents a PDF document: its pages, and all the global
|
|
properties, metadata, etc.
|
|
|
|
\section ownership Ownership of the returned objects
|
|
|
|
All the functions that returns class pointers create new object, and the
|
|
responsability of those is given to the callee.
|
|
|
|
The only exception is \link Poppler::Page::transition() Page::transition()\endlink.
|
|
|
|
\section document-loading Loading
|
|
|
|
To get a Document, you have to load it via the load() & loadFromData()
|
|
functions.
|
|
|
|
In all the functions that have passwords as arguments, they \b must be Latin1
|
|
encoded. If you have a password that is a UTF-8 string, you need to use
|
|
QString::toLatin1() (or similar) to convert the password first.
|
|
If you have a UTF-8 character array, consider converting it to a QString first
|
|
(QString::fromUtf8(), or similar) before converting to Latin1 encoding.
|
|
|
|
\section document-rendering Rendering
|
|
|
|
To render pages of a document, you have different Document functions to set
|
|
various options.
|
|
|
|
\subsection document-rendering-backend Backends
|
|
|
|
%Poppler offers a different backends for rendering the pages. Currently
|
|
there are two backends (see #RenderBackend), but only the Splash engine works
|
|
well and has been tested.
|
|
|
|
The available rendering backends can be discovered via availableRenderBackends().
|
|
The current rendering backend can be changed using setRenderBackend().
|
|
Please note that setting a backend not listed in the available ones
|
|
will always result in null QImage's.
|
|
|
|
\section document-cms Color management support
|
|
|
|
%Poppler, if compiled with this support, provides functions to handle color
|
|
profiles.
|
|
|
|
To know whether the %Poppler version you are using has support for color
|
|
management, you can query Poppler::isCmsAvailable(). In case it is not
|
|
avilable, all the color management-related functions will either do nothing
|
|
or return null.
|
|
*/
|
|
class POPPLER_QT5_EXPORT Document {
|
|
friend class Page;
|
|
friend class DocumentData;
|
|
|
|
public:
|
|
/**
|
|
The page mode
|
|
*/
|
|
enum PageMode {
|
|
UseNone, ///< No mode - neither document outline nor thumbnail images are visible
|
|
UseOutlines, ///< Document outline visible
|
|
UseThumbs, ///< Thumbnail images visible
|
|
FullScreen, ///< Fullscreen mode (no menubar, windows controls etc)
|
|
UseOC, ///< Optional content group panel visible
|
|
UseAttach ///< Attachments panel visible
|
|
};
|
|
|
|
/**
|
|
The page layout
|
|
*/
|
|
enum PageLayout {
|
|
NoLayout, ///< Layout not specified
|
|
SinglePage, ///< Display a single page
|
|
OneColumn, ///< Display a single column of pages
|
|
TwoColumnLeft, ///< Display the pages in two columns, with odd-numbered pages on the left
|
|
TwoColumnRight, ///< Display the pages in two columns, with odd-numbered pages on the right
|
|
TwoPageLeft, ///< Display the pages two at a time, with odd-numbered pages on the left
|
|
TwoPageRight ///< Display the pages two at a time, with odd-numbered pages on the right
|
|
};
|
|
|
|
/**
|
|
The render backends available
|
|
|
|
\since 0.6
|
|
*/
|
|
enum RenderBackend {
|
|
SplashBackend, ///< Splash backend
|
|
ArthurBackend ///< Arthur (Qt) backend
|
|
};
|
|
|
|
/**
|
|
The render hints available
|
|
|
|
\since 0.6
|
|
*/
|
|
enum RenderHint {
|
|
Antialiasing = 0x00000001, ///< Antialiasing for graphics
|
|
TextAntialiasing = 0x00000002, ///< Antialiasing for text
|
|
TextHinting = 0x00000004, ///< Hinting for text \since 0.12.1
|
|
TextSlightHinting = 0x00000008, ///< Lighter hinting for text when combined with TextHinting \since 0.18
|
|
OverprintPreview = 0x00000010, ///< Overprint preview \since 0.22
|
|
ThinLineSolid = 0x00000020, ///< Enhance thin lines solid \since 0.24
|
|
ThinLineShape = 0x00000040 ///< Enhance thin lines shape. Wins over ThinLineSolid \since 0.24
|
|
};
|
|
Q_DECLARE_FLAGS( RenderHints, RenderHint )
|
|
|
|
/**
|
|
Form types
|
|
|
|
\since 0.22
|
|
*/
|
|
enum FormType {
|
|
NoForm, ///< Document doesn't contain forms
|
|
AcroForm, ///< AcroForm
|
|
XfaForm ///< Adobe XML Forms Architecture (XFA), currently unsupported
|
|
};
|
|
|
|
/**
|
|
Set a color display profile for the current document.
|
|
|
|
\param outputProfileA is a \c cmsHPROFILE of the LCMS library.
|
|
|
|
\since 0.12
|
|
*/
|
|
void setColorDisplayProfile(void *outputProfileA);
|
|
/**
|
|
Set a color display profile for the current document.
|
|
|
|
\param name is the name of the display profile to set.
|
|
|
|
\since 0.12
|
|
*/
|
|
void setColorDisplayProfileName(const QString &name);
|
|
/**
|
|
Return the current RGB profile.
|
|
|
|
\return a \c cmsHPROFILE of the LCMS library.
|
|
|
|
\since 0.12
|
|
*/
|
|
void* colorRgbProfile() const;
|
|
/**
|
|
Return the current display profile.
|
|
|
|
\return a \c cmsHPROFILE of the LCMS library.
|
|
|
|
\since 0.12
|
|
*/
|
|
void *colorDisplayProfile() const;
|
|
|
|
/**
|
|
Load the document from a file on disk
|
|
|
|
\param filePath the name (and path, if required) of the file to load
|
|
\param ownerPassword the Latin1-encoded owner password to use in
|
|
loading the file
|
|
\param userPassword the Latin1-encoded user ("open") password
|
|
to use in loading the file
|
|
|
|
\return the loaded document, or NULL on error
|
|
|
|
\note The caller owns the pointer to Document, and this should
|
|
be deleted when no longer required.
|
|
|
|
\warning The returning document may be locked if a password is required
|
|
to open the file, and one is not provided (as the userPassword).
|
|
*/
|
|
static Document *load(const QString & filePath,
|
|
const QByteArray &ownerPassword=QByteArray(),
|
|
const QByteArray &userPassword=QByteArray());
|
|
|
|
/**
|
|
Load the document from memory
|
|
|
|
\param fileContents the file contents. They are copied so there is no need
|
|
to keep the byte array around for the full life time of
|
|
the document.
|
|
\param ownerPassword the Latin1-encoded owner password to use in
|
|
loading the file
|
|
\param userPassword the Latin1-encoded user ("open") password
|
|
to use in loading the file
|
|
|
|
\return the loaded document, or NULL on error
|
|
|
|
\note The caller owns the pointer to Document, and this should
|
|
be deleted when no longer required.
|
|
|
|
\warning The returning document may be locked if a password is required
|
|
to open the file, and one is not provided (as the userPassword).
|
|
|
|
\since 0.6
|
|
*/
|
|
static Document *loadFromData(const QByteArray &fileContents,
|
|
const QByteArray &ownerPassword=QByteArray(),
|
|
const QByteArray &userPassword=QByteArray());
|
|
|
|
/**
|
|
Get a specified Page
|
|
|
|
Note that this follows the PDF standard of being zero based - if you
|
|
want the first page, then you need an index of zero.
|
|
|
|
The caller gets the ownership of the returned object.
|
|
|
|
\param index the page number index
|
|
*/
|
|
Page *page(int index) const;
|
|
|
|
/**
|
|
\overload
|
|
|
|
|
|
The intent is that you can pass in a label like \c "ix" and
|
|
get the page with that label (which might be in the table of
|
|
contents), or pass in \c "1" and get the page that the user
|
|
expects (which might not be the first page, if there is a
|
|
title page and a table of contents).
|
|
|
|
\param label the page label
|
|
*/
|
|
Page *page(const QString &label) const;
|
|
|
|
/**
|
|
The number of pages in the document
|
|
*/
|
|
int numPages() const;
|
|
|
|
/**
|
|
The type of mode that should be used by the application
|
|
when the document is opened. Note that while this is
|
|
called page mode, it is really viewer application mode.
|
|
*/
|
|
PageMode pageMode() const;
|
|
|
|
/**
|
|
The layout that pages should be shown in when the document
|
|
is first opened. This basically describes how pages are
|
|
shown relative to each other.
|
|
*/
|
|
PageLayout pageLayout() const;
|
|
|
|
/**
|
|
Provide the passwords required to unlock the document
|
|
|
|
\param ownerPassword the Latin1-encoded owner password to use in
|
|
loading the file
|
|
\param userPassword the Latin1-encoded user ("open") password
|
|
to use in loading the file
|
|
*/
|
|
bool unlock(const QByteArray &ownerPassword, const QByteArray &userPassword);
|
|
|
|
/**
|
|
Determine if the document is locked
|
|
*/
|
|
bool isLocked() const;
|
|
|
|
/**
|
|
The date associated with the document
|
|
|
|
You would use this method with something like:
|
|
\code
|
|
QDateTime created = m_doc->date("CreationDate");
|
|
QDateTime modified = m_doc->date("ModDate");
|
|
\endcode
|
|
|
|
The available dates are:
|
|
- CreationDate: the date of creation of the document
|
|
- ModDate: the date of the last change in the document
|
|
|
|
\param data the type of date that is required
|
|
*/
|
|
QDateTime date( const QString & data ) const;
|
|
|
|
/**
|
|
Get specified information associated with the document
|
|
|
|
You would use this method with something like:
|
|
\code
|
|
QString title = m_doc->info("Title");
|
|
QString subject = m_doc->info("Subject");
|
|
\endcode
|
|
|
|
In addition to \c Title and \c Subject, other information that may
|
|
be available include \c Author, \c Keywords, \c Creator and \c Producer.
|
|
|
|
\param data the information that is required
|
|
|
|
\sa infoKeys() to get a list of the available keys
|
|
*/
|
|
QString info( const QString & data ) const;
|
|
|
|
/**
|
|
Obtain a list of the available string information keys.
|
|
*/
|
|
QStringList infoKeys() const;
|
|
|
|
/**
|
|
Test if the document is encrypted
|
|
*/
|
|
bool isEncrypted() const;
|
|
|
|
/**
|
|
Test if the document is linearised
|
|
|
|
In some cases, this is called "fast web view", since it
|
|
is mostly an optimisation for viewing over the Web.
|
|
*/
|
|
bool isLinearized() const;
|
|
|
|
/**
|
|
Test if the permissions on the document allow it to be
|
|
printed
|
|
*/
|
|
bool okToPrint() const;
|
|
|
|
/**
|
|
Test if the permissions on the document allow it to be
|
|
printed at high resolution
|
|
*/
|
|
bool okToPrintHighRes() const;
|
|
|
|
/**
|
|
Test if the permissions on the document allow it to be
|
|
changed.
|
|
|
|
\note depending on the type of change, it may be more
|
|
appropriate to check other properties as well.
|
|
*/
|
|
bool okToChange() const;
|
|
|
|
/**
|
|
Test if the permissions on the document allow the
|
|
contents to be copied / extracted
|
|
*/
|
|
bool okToCopy() const;
|
|
|
|
/**
|
|
Test if the permissions on the document allow annotations
|
|
to be added or modified, and interactive form fields (including
|
|
signature fields) to be completed.
|
|
*/
|
|
bool okToAddNotes() const;
|
|
|
|
/**
|
|
Test if the permissions on the document allow interactive
|
|
form fields (including signature fields) to be completed.
|
|
|
|
\note this can be true even if okToAddNotes() is false - this
|
|
means that only form completion is permitted.
|
|
*/
|
|
bool okToFillForm() const;
|
|
|
|
/**
|
|
Test if the permissions on the document allow interactive
|
|
form fields (including signature fields) to be set, created and
|
|
modified
|
|
*/
|
|
bool okToCreateFormFields() const;
|
|
|
|
/**
|
|
Test if the permissions on the document allow content extraction
|
|
(text and perhaps other content) for accessibility usage (eg for
|
|
a screen reader)
|
|
*/
|
|
bool okToExtractForAccessibility() const;
|
|
|
|
/**
|
|
Test if the permissions on the document allow it to be
|
|
"assembled" - insertion, rotation and deletion of pages;
|
|
or creation of bookmarks and thumbnail images.
|
|
|
|
\note this can be true even if okToChange() is false
|
|
*/
|
|
bool okToAssemble() const;
|
|
|
|
/**
|
|
The version of the PDF specification that the document
|
|
conforms to
|
|
|
|
\param major an optional pointer to a variable where store the
|
|
"major" number of the version
|
|
\param minor an optional pointer to a variable where store the
|
|
"minor" number of the version
|
|
|
|
\since 0.12
|
|
*/
|
|
void getPdfVersion(int *major, int *minor) const;
|
|
|
|
/**
|
|
The fonts within the PDF document.
|
|
|
|
This is a shorthand for getting all the fonts at once.
|
|
|
|
\note this can take a very long time to run with a large
|
|
document. You may wish to use a FontIterator if you have more
|
|
than say 20 pages
|
|
|
|
\see newFontIterator()
|
|
*/
|
|
QList<FontInfo> fonts() const;
|
|
|
|
/**
|
|
Creates a new FontIterator object for font scanning.
|
|
|
|
The new iterator can be used for reading the font information of the
|
|
document, reading page by page.
|
|
|
|
The caller is responsible for the returned object, ie it should freed
|
|
it when no more useful.
|
|
|
|
\param startPage the initial page from which start reading fonts
|
|
|
|
\see fonts()
|
|
|
|
\since 0.12
|
|
*/
|
|
FontIterator* newFontIterator( int startPage = 0 ) const;
|
|
|
|
/**
|
|
The font data if the font is an embedded one.
|
|
|
|
\since 0.10
|
|
*/
|
|
QByteArray fontData(const FontInfo &font) const;
|
|
|
|
/**
|
|
The documents embedded within the PDF document.
|
|
|
|
\note there are two types of embedded document - this call
|
|
only accesses documents that are embedded at the document level.
|
|
*/
|
|
QList<EmbeddedFile*> embeddedFiles() const;
|
|
|
|
/**
|
|
Whether there are any documents embedded in this PDF document.
|
|
*/
|
|
bool hasEmbeddedFiles() const;
|
|
|
|
/**
|
|
Gets the table of contents (TOC) of the Document.
|
|
|
|
The caller is responsable for the returned object.
|
|
|
|
In the tree the tag name is the 'screen' name of the entry. A tag can have
|
|
attributes. Here follows the list of tag attributes with meaning:
|
|
- Destination: A string description of the referred destination
|
|
- DestinationName: A 'named reference' to the viewport
|
|
- ExternalFileName: A link to a external filename
|
|
- Open: A bool value that tells whether the subbranch of the item is open or not
|
|
|
|
Resolving the final destination for each item can be done in the following way:
|
|
- first, checking for 'Destination': if not empty, then a LinkDestination
|
|
can be constructed straight with it
|
|
- as second step, if the 'DestinationName' is not empty, then the destination
|
|
can be resolved using linkDestination()
|
|
|
|
Note also that if 'ExternalFileName' is not emtpy, then the destination refers
|
|
to that document (and not to the current one).
|
|
|
|
\returns the TOC, or NULL if the Document does not have one
|
|
*/
|
|
QDomDocument *toc() const;
|
|
|
|
/**
|
|
Tries to resolve the named destination \p name.
|
|
|
|
\note this operation starts a search through the whole document
|
|
|
|
\returns a new LinkDestination object if the named destination was
|
|
actually found, or NULL otherwise
|
|
*/
|
|
LinkDestination *linkDestination( const QString &name );
|
|
|
|
/**
|
|
Sets the paper color
|
|
|
|
\param color the new paper color
|
|
*/
|
|
void setPaperColor(const QColor &color);
|
|
/**
|
|
The paper color
|
|
|
|
The default color is white.
|
|
*/
|
|
QColor paperColor() const;
|
|
|
|
/**
|
|
Sets the backend used to render the pages.
|
|
|
|
\param backend the new rendering backend
|
|
|
|
\since 0.6
|
|
*/
|
|
void setRenderBackend( RenderBackend backend );
|
|
/**
|
|
The currently set render backend
|
|
|
|
The default backend is \ref SplashBackend
|
|
|
|
\since 0.6
|
|
*/
|
|
RenderBackend renderBackend() const;
|
|
|
|
/**
|
|
The available rendering backends.
|
|
|
|
\since 0.6
|
|
*/
|
|
static QSet<RenderBackend> availableRenderBackends();
|
|
|
|
/**
|
|
Sets the render \p hint .
|
|
|
|
\note some hints may not be supported by some rendering backends.
|
|
|
|
\param on whether the flag should be added or removed.
|
|
|
|
\since 0.6
|
|
*/
|
|
void setRenderHint( RenderHint hint, bool on = true );
|
|
/**
|
|
The currently set render hints.
|
|
|
|
\since 0.6
|
|
*/
|
|
RenderHints renderHints() const;
|
|
|
|
/**
|
|
Gets a new PS converter for this document.
|
|
|
|
The caller gets the ownership of the returned converter.
|
|
|
|
\since 0.6
|
|
*/
|
|
PSConverter *psConverter() const;
|
|
|
|
/**
|
|
Gets a new PDF converter for this document.
|
|
|
|
The caller gets the ownership of the returned converter.
|
|
|
|
\since 0.8
|
|
*/
|
|
PDFConverter *pdfConverter() const;
|
|
|
|
/**
|
|
Gets the metadata stream contents
|
|
|
|
\since 0.6
|
|
*/
|
|
QString metadata() const;
|
|
|
|
/**
|
|
Test whether this document has "optional content".
|
|
|
|
Optional content is used to optionally turn on (display)
|
|
and turn off (not display) some elements of the document.
|
|
The most common use of this is for layers in design
|
|
applications, but it can be used for a range of things,
|
|
such as not including some content in printing, and
|
|
displaying content in the appropriate language.
|
|
|
|
\since 0.8
|
|
*/
|
|
bool hasOptionalContent() const;
|
|
|
|
/**
|
|
Itemviews model for optional content.
|
|
|
|
The model is owned by the document.
|
|
|
|
\since 0.8
|
|
*/
|
|
OptContentModel *optionalContentModel();
|
|
|
|
/**
|
|
Document-level JavaScript scripts.
|
|
|
|
Returns the list of document level JavaScript scripts to be always
|
|
executed before any other script.
|
|
|
|
\since 0.10
|
|
*/
|
|
QStringList scripts() const;
|
|
|
|
/**
|
|
The PDF identifiers.
|
|
|
|
\param permanentId an optional pointer to a variable where store the
|
|
permanent ID of the document
|
|
\param updateId an optional pointer to a variable where store the
|
|
update ID of the document
|
|
|
|
\return whether the document has the IDs
|
|
|
|
\since 0.16
|
|
*/
|
|
bool getPdfId(QByteArray *permanentId, QByteArray *updateId) const;
|
|
|
|
/**
|
|
Returns the type of forms contained in the document
|
|
|
|
\since 0.22
|
|
*/
|
|
FormType formType() const;
|
|
|
|
/**
|
|
Destructor.
|
|
*/
|
|
~Document();
|
|
|
|
private:
|
|
Q_DISABLE_COPY(Document)
|
|
|
|
DocumentData *m_doc;
|
|
|
|
Document(DocumentData *dataA);
|
|
};
|
|
|
|
class BaseConverterPrivate;
|
|
class PSConverterPrivate;
|
|
class PDFConverterPrivate;
|
|
/**
|
|
\brief Base converter.
|
|
|
|
This is the base class for the converters.
|
|
|
|
\since 0.8
|
|
*/
|
|
class POPPLER_QT5_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.
|
|
*
|
|
* \since 0.8
|
|
*/
|
|
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
|
|
\since 0.12.1
|
|
*/
|
|
Error lastError() const;
|
|
|
|
protected:
|
|
/// \cond PRIVATE
|
|
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
|
|
|
|
\since 0.6
|
|
*/
|
|
class POPPLER_QT5_EXPORT PSConverter : public BaseConverter
|
|
{
|
|
friend class Document;
|
|
public:
|
|
/**
|
|
Options for the PS export.
|
|
|
|
\since 0.10
|
|
*/
|
|
enum PSOption {
|
|
Printing = 0x00000001, ///< The PS is generated for printing purposes
|
|
StrictMargins = 0x00000002,
|
|
ForceRasterization = 0x00000004,
|
|
PrintToEPS = 0x00000008, ///< Output EPS instead of PS \since 0.20
|
|
HideAnnotations = 0x00000010 ///< Don't print annotations \since 0.20
|
|
};
|
|
Q_DECLARE_FLAGS( PSOptions, PSOption )
|
|
|
|
/**
|
|
Destructor.
|
|
*/
|
|
~PSConverter();
|
|
|
|
/** 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 before printing. Defaults to false */
|
|
void setForceRasterize(bool forceRasterize);
|
|
|
|
/**
|
|
Sets the options for the PS export.
|
|
|
|
\since 0.10
|
|
*/
|
|
void setPSOptions(PSOptions options);
|
|
|
|
/**
|
|
The currently set options for the PS export.
|
|
|
|
The default flags are: Printing.
|
|
|
|
\since 0.10
|
|
*/
|
|
PSOptions psOptions() const;
|
|
|
|
/**
|
|
Sets a function that will be called each time a page is converted.
|
|
|
|
The payload belongs to the caller.
|
|
|
|
\since 0.16
|
|
*/
|
|
void setPageConvertedCallback(void (* callback)(int page, void *payload), void *payload);
|
|
|
|
bool convert();
|
|
|
|
private:
|
|
Q_DECLARE_PRIVATE(PSConverter)
|
|
Q_DISABLE_COPY(PSConverter)
|
|
|
|
PSConverter(DocumentData *document);
|
|
};
|
|
|
|
/**
|
|
Converts a PDF to PDF (thus saves a copy of the document).
|
|
|
|
\since 0.8
|
|
*/
|
|
class POPPLER_QT5_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.
|
|
*/
|
|
virtual ~PDFConverter();
|
|
|
|
/**
|
|
Sets the options for the PDF export.
|
|
*/
|
|
void setPDFOptions(PDFOptions options);
|
|
/**
|
|
The currently set options for the PDF export.
|
|
*/
|
|
PDFOptions pdfOptions() const;
|
|
|
|
bool convert();
|
|
|
|
private:
|
|
Q_DECLARE_PRIVATE(PDFConverter)
|
|
Q_DISABLE_COPY(PDFConverter)
|
|
|
|
PDFConverter(DocumentData *document);
|
|
};
|
|
|
|
/**
|
|
Conversion from PDF date string format to QDateTime
|
|
*/
|
|
POPPLER_QT5_EXPORT QDateTime convertDate( char *dateString );
|
|
|
|
/**
|
|
Whether the color management functions are available.
|
|
|
|
\since 0.12
|
|
*/
|
|
POPPLER_QT5_EXPORT bool isCmsAvailable();
|
|
|
|
/**
|
|
Whether the overprint preview functionality is available.
|
|
|
|
\since 0.22
|
|
*/
|
|
POPPLER_QT5_EXPORT bool isOverprintPreviewAvailable();
|
|
|
|
class SoundData;
|
|
/**
|
|
Container class for a sound file in a PDF document.
|
|
|
|
A sound can be either External (in that case should be loaded the file
|
|
whose url is represented by url() ), or Embedded, and the player has to
|
|
play the data contained in data().
|
|
|
|
\since 0.6
|
|
*/
|
|
class POPPLER_QT5_EXPORT SoundObject {
|
|
public:
|
|
/**
|
|
The type of sound
|
|
*/
|
|
enum SoundType {
|
|
External, ///< The real sound file is external
|
|
Embedded ///< The sound is contained in the data
|
|
};
|
|
|
|
/**
|
|
The encoding format used for the sound
|
|
*/
|
|
enum SoundEncoding {
|
|
Raw, ///< Raw encoding, with unspecified or unsigned values in the range [ 0, 2^B - 1 ]
|
|
Signed, ///< Twos-complement values
|
|
muLaw, ///< mu-law-encoded samples
|
|
ALaw ///< A-law-encoded samples
|
|
};
|
|
|
|
/// \cond PRIVATE
|
|
SoundObject(Sound *popplersound);
|
|
/// \endcond
|
|
|
|
~SoundObject();
|
|
|
|
/**
|
|
Is the sound embedded (SoundObject::Embedded) or external (SoundObject::External)?
|
|
*/
|
|
SoundType soundType() const;
|
|
|
|
/**
|
|
The URL of the sound file to be played, in case of SoundObject::External
|
|
*/
|
|
QString url() const;
|
|
|
|
/**
|
|
The data of the sound, in case of SoundObject::Embedded
|
|
*/
|
|
QByteArray data() const;
|
|
|
|
/**
|
|
The sampling rate of the sound
|
|
*/
|
|
double samplingRate() const;
|
|
|
|
/**
|
|
The number of sound channels to use to play the sound
|
|
*/
|
|
int channels() const;
|
|
|
|
/**
|
|
The number of bits per sample value per channel
|
|
*/
|
|
int bitsPerSample() const;
|
|
|
|
/**
|
|
The encoding used for the sound
|
|
*/
|
|
SoundEncoding soundEncoding() const;
|
|
|
|
private:
|
|
Q_DISABLE_COPY(SoundObject)
|
|
|
|
SoundData *m_soundData;
|
|
};
|
|
|
|
class MovieData;
|
|
/**
|
|
Container class for a movie object in a PDF document.
|
|
|
|
\since 0.10
|
|
*/
|
|
class POPPLER_QT5_EXPORT MovieObject {
|
|
friend class AnnotationPrivate;
|
|
public:
|
|
/**
|
|
The play mode for playing the movie
|
|
*/
|
|
enum PlayMode {
|
|
PlayOnce, ///< Play the movie once, closing the movie controls at the end
|
|
PlayOpen, ///< Like PlayOnce, but leaving the controls open
|
|
PlayRepeat, ///< Play continuously until stopped
|
|
PlayPalindrome ///< Play forward, then backward, then again foward and so on until stopped
|
|
};
|
|
|
|
~MovieObject();
|
|
|
|
/**
|
|
The URL of the movie to be played
|
|
*/
|
|
QString url() const;
|
|
|
|
/**
|
|
The size of the movie
|
|
*/
|
|
QSize size() const;
|
|
|
|
/**
|
|
The rotation (either 0, 90, 180, or 270 degrees clockwise) for the movie,
|
|
*/
|
|
int rotation() const;
|
|
|
|
/**
|
|
Whether show a bar with movie controls
|
|
*/
|
|
bool showControls() const;
|
|
|
|
/**
|
|
How to play the movie
|
|
*/
|
|
PlayMode playMode() const;
|
|
|
|
/**
|
|
Returns whether a poster image should be shown if the movie is not playing.
|
|
\since 0.22
|
|
*/
|
|
bool showPosterImage() const;
|
|
|
|
/**
|
|
Returns the poster image that should be shown if the movie is not playing.
|
|
If the image is null but showImagePoster() returns @c true, the first frame of the movie
|
|
should be used as poster image.
|
|
\since 0.22
|
|
*/
|
|
QImage posterImage() const;
|
|
|
|
private:
|
|
/// \cond PRIVATE
|
|
MovieObject( AnnotMovie *ann );
|
|
/// \endcond
|
|
|
|
Q_DISABLE_COPY(MovieObject)
|
|
|
|
MovieData *m_movieData;
|
|
};
|
|
|
|
}
|
|
|
|
Q_DECLARE_OPERATORS_FOR_FLAGS(Poppler::Page::PainterFlags)
|
|
Q_DECLARE_OPERATORS_FOR_FLAGS(Poppler::Document::RenderHints)
|
|
Q_DECLARE_OPERATORS_FOR_FLAGS(Poppler::PDFConverter::PDFOptions)
|
|
Q_DECLARE_OPERATORS_FOR_FLAGS(Poppler::PSConverter::PSOptions)
|
|
|
|
#endif
|