131 Q_DECLARE_PRIVATE(QPdfEngine)
132 friend class QPdfWriter;
144 explicit QPdfEngine(QPdfEnginePrivate &d);
147 void setOutputFilename(
const QString &filename);
149 void setResolution(
int resolution);
150 int resolution()
const;
152 void setPdfVersion(PdfVersion version);
154 void setDocumentXmpMetadata(
const QByteArray &xmpMetadata);
155 QByteArray documentXmpMetadata()
const;
157 void addFileAttachment(
const QString &fileName,
const QByteArray &data,
const QString &mimeType);
160 enum class ColorModel
168 ColorModel colorModel()
const;
169 void setColorModel(ColorModel model);
172 bool begin(QPaintDevice *pdev) override;
175 void drawPoints(
const QPointF *points,
int pointCount) override;
176 void drawLines(
const QLineF *lines,
int lineCount) override;
177 void drawRects(
const QRectF *rects,
int rectCount) override;
178 void drawPolygon(
const QPointF *points,
int pointCount, PolygonDrawMode mode) override;
179 void drawPath (
const QPainterPath & path) override;
181 void drawTextItem(
const QPointF &p,
const QTextItem &textItem) override;
183 void drawPixmap (
const QRectF & rectangle,
const QPixmap & pixmap,
const QRectF & sr) override;
184 void drawImage(
const QRectF &r,
const QImage &pm,
const QRectF &sr,
185 Qt::ImageConversionFlags flags = Qt::AutoColor) override;
186 void drawTiledPixmap (
const QRectF & rectangle,
const QPixmap & pixmap,
const QPointF & point) override;
188 void drawHyperlink(
const QRectF &r,
const QUrl &url);
190 void updateState(
const QPaintEngineState &state) override;
192 int metric(QPaintDevice::PaintDeviceMetric metricType)
const;
193 Type type()
const override;
200 void setPageLayout(
const QPageLayout &pageLayout);
201 void setPageSize(
const QPageSize &pageSize);
202 void setPageOrientation(QPageLayout::Orientation orientation);
203 void setPageMargins(
const QMarginsF &margins, QPageLayout::Unit units = QPageLayout::Point);
205 QPageLayout pageLayout()
const;
209 void setupGraphicsState(QPaintEngine::DirtyFlags flags);
212 void updateClipPath(
const QPainterPath & path, Qt::ClipOperation op);
217 Q_DECLARE_PUBLIC(QPdfEngine)
220 ~QPdfEnginePrivate();
222 inline uint requestObject() {
return currentObject++; }
227 int addImage(
const QImage &image,
bool *bitmap,
bool lossless, qint64 serial_no);
228 int addConstantAlphaObject(
int brushAlpha,
int penAlpha = 255);
229 int addBrushPattern(
const QTransform &matrix,
bool *specifyColor,
int *gStateObject);
231 void drawTextItem(
const QPointF &p,
const QTextItemInt &ti);
233 QTransform pageMatrix()
const;
239 QPdfPage* currentPage;
240 QPdf::Stroker stroker;
245 QList<QPainterPath> clips;
253 QPdfEngine::PdfVersion pdfVersion;
254 QPdfEngine::ColorModel colorModel;
256 QHash<QFontEngine::FaceId, QFontSubset *> fonts;
261 QIODevice *outDevice;
265 QString outputFileName;
269 QUuid documentId = QUuid::createUuid();
272 QPdfOutputIntent outputIntent;
275 QPageLayout m_pageLayout;
278 int gradientBrush(
const QBrush &b,
const QTransform &matrix,
int *gStateObject);
279 int generateGradientShader(
const QGradient *gradient,
const QTransform &matrix,
bool alpha =
false);
280 int generateLinearGradientShader(
const QLinearGradient *lg,
const QTransform &matrix,
bool alpha);
281 int generateRadialGradientShader(
const QRadialGradient *gradient,
const QTransform &matrix,
bool alpha);
282 struct ShadingFunctionResult
285 QPdfEngine::ColorModel colorModel;
286 void writeColorSpace(QPdf::ByteStream *stream)
const;
288 ShadingFunctionResult createShadingFunction(
const QGradient *gradient,
int from,
int to,
bool reflect,
bool alpha);
290 enum class ColorDomain {
296 QPdfEngine::ColorModel colorModelForColor(
const QColor &color)
const;
297 void writeColor(ColorDomain domain,
const QColor &color);
298 void writeInfo(
const QDateTime &date);
299 int writeXmpDocumentMetaData(
const QDateTime &date);
300 int writeOutputIntent();
301 void writePageRoot();
302 void writeDestsRoot();
303 void writeAttachmentRoot();
304 void writeNamesRoot();
306 void embedFont(QFontSubset *font);
307 qreal calcUserUnit()
const;
309 QList<
int> xrefPositions;
313 enum class WriteImageOption
321 int writeImage(
const QByteArray &data,
int width,
int height, WriteImageOption option,
322 int maskObject,
int softMaskObject,
bool dct =
false,
bool isMono =
false);
325 int addXrefEntry(
int object,
bool printostr =
true);
326 void printString(QStringView string);
327 void xprintf(
const char* fmt, ...) Q_ATTRIBUTE_FORMAT_PRINTF(2, 3);
328 inline void write(QByteArrayView data) {
329 stream->writeRawData(data.constData(), data.size());
330 streampos += data.size();
333 int writeCompressed(
const char *src,
int len);
334 inline int writeCompressed(
const QByteArray &data) {
return writeCompressed(data.constData(), data.size()); }
335 int writeCompressed(QIODevice *dev);
337 struct AttachmentInfo
339 AttachmentInfo (
const QString &fileName,
const QByteArray &data,
const QString &mimeType)
340 : fileName(fileName), data(data), mimeType(mimeType) {}
354 int pageRoot, namesRoot, destsRoot, attachmentsRoot, catalog, info;
356 int patternColorSpaceRGB;
357 int patternColorSpaceGrayscale;
358 int patternColorSpaceCMYK;
360 QHash<qint64, uint> imageCache;
361 QHash<std::pair<uint, uint>, uint > alphaCache;
362 QList<DestInfo> destCache;
363 QList<AttachmentInfo> fileCache;
364 QByteArray xmpDocumentMetadata;
void streamImage(int w, int h, uint object)
QList< uint > graphicStates
QList< uint > annotations
static void cubicToHook(qfixed c1x, qfixed c1y, qfixed c2x, qfixed c2y, qfixed ex, qfixed ey, void *data)