132 Q_DECLARE_PRIVATE(QPdfEngine)
133 friend class QPdfWriter;
145 explicit QPdfEngine(QPdfEnginePrivate &d);
148 void setOutputFilename(
const QString &filename);
150 void setResolution(
int resolution);
151 int resolution()
const;
153 void setPdfVersion(PdfVersion version);
155 void setDocumentXmpMetadata(
const QByteArray &xmpMetadata);
156 QByteArray documentXmpMetadata()
const;
158 void addFileAttachment(
const QString &fileName,
const QByteArray &data,
const QString &mimeType);
161 enum class ColorModel
169 ColorModel colorModel()
const;
170 void setColorModel(ColorModel model);
173 bool begin(QPaintDevice *pdev) override;
176 void drawPoints(
const QPointF *points,
int pointCount) override;
177 void drawLines(
const QLineF *lines,
int lineCount) override;
178 void drawRects(
const QRectF *rects,
int rectCount) override;
179 void drawPolygon(
const QPointF *points,
int pointCount, PolygonDrawMode mode) override;
180 void drawPath (
const QPainterPath & path) override;
182 void drawTextItem(
const QPointF &p,
const QTextItem &textItem) override;
184 void drawPixmap (
const QRectF & rectangle,
const QPixmap & pixmap,
const QRectF & sr) override;
185 void drawImage(
const QRectF &r,
const QImage &pm,
const QRectF &sr,
186 Qt::ImageConversionFlags flags = Qt::AutoColor) override;
187 void drawTiledPixmap (
const QRectF & rectangle,
const QPixmap & pixmap,
const QPointF & point) override;
189 void drawHyperlink(
const QRectF &r,
const QUrl &url);
191 void updateState(
const QPaintEngineState &state) override;
193 int metric(QPaintDevice::PaintDeviceMetric metricType)
const;
194 Type type()
const override;
201 void setPageLayout(
const QPageLayout &pageLayout);
202 void setPageSize(
const QPageSize &pageSize);
203 void setPageOrientation(QPageLayout::Orientation orientation);
204 void setPageMargins(
const QMarginsF &margins, QPageLayout::Unit units = QPageLayout::Point);
206 QPageLayout pageLayout()
const;
210 void setupGraphicsState(QPaintEngine::DirtyFlags flags);
213 void updateClipPath(
const QPainterPath & path, Qt::ClipOperation op);
218 Q_DECLARE_PUBLIC(QPdfEngine)
221 ~QPdfEnginePrivate();
223 inline uint requestObject() {
return currentObject++; }
228 int addImage(
const QImage &image,
bool *bitmap,
bool lossless, qint64 serial_no);
229 int addConstantAlphaObject(
int brushAlpha,
int penAlpha = 255);
230 int addBrushPattern(
const QTransform &matrix,
bool *specifyColor,
int *gStateObject);
232 void drawTextItem(
const QPointF &p,
const QTextItemInt &ti);
234 QTransform pageMatrix()
const;
240 QPdfPage* currentPage;
241 QPdf::Stroker stroker;
246 QList<QPainterPath> clips;
254 QPdfEngine::PdfVersion pdfVersion;
255 QPdfEngine::ColorModel colorModel;
257 QHash<QFontEngine::FaceId, QFontSubset *> fonts;
262 QIODevice *outDevice;
266 QString outputFileName;
270 QUuid documentId = QUuid::createUuid();
273 QPdfOutputIntent outputIntent;
276 QPageLayout m_pageLayout;
279 int gradientBrush(
const QBrush &b,
const QTransform &matrix,
int *gStateObject);
280 int generateGradientShader(
const QGradient *gradient,
const QTransform &matrix,
bool alpha =
false);
281 int generateLinearGradientShader(
const QLinearGradient *lg,
const QTransform &matrix,
bool alpha);
282 int generateRadialGradientShader(
const QRadialGradient *gradient,
const QTransform &matrix,
bool alpha);
283 struct ShadingFunctionResult
286 QPdfEngine::ColorModel colorModel;
287 void writeColorSpace(QPdf::ByteStream *stream)
const;
289 ShadingFunctionResult createShadingFunction(
const QGradient *gradient,
int from,
int to,
bool reflect,
bool alpha);
291 enum class ColorDomain {
297 QPdfEngine::ColorModel colorModelForColor(
const QColor &color)
const;
298 void writeColor(ColorDomain domain,
const QColor &color);
299 void writeInfo(
const QDateTime &date);
300 int writeXmpDocumentMetaData(
const QDateTime &date);
301 int writeOutputIntent();
302 void writePageRoot();
303 void writeDestsRoot();
304 void writeAttachmentRoot();
305 void writeNamesRoot();
307 void embedFont(QFontSubset *font);
308 qreal calcUserUnit()
const;
310 QList<
int> xrefPositions;
314 enum class WriteImageOption
322 int writeImage(
const QByteArray &data,
int width,
int height, WriteImageOption option,
323 int maskObject,
int softMaskObject,
bool dct =
false,
bool isMono =
false);
326 int addXrefEntry(
int object,
bool printostr =
true);
327 void printString(QStringView string);
328 void xprintf(
const char* fmt, ...) Q_ATTRIBUTE_FORMAT_PRINTF(2, 3);
329 inline void write(QByteArrayView data) {
330 stream->writeRawData(data.constData(), data.size());
331 streampos += data.size();
334 int writeCompressed(
const char *src,
int len);
335 inline int writeCompressed(
const QByteArray &data) {
return writeCompressed(data.constData(), data.size()); }
336 int writeCompressed(QIODevice *dev);
338 struct AttachmentInfo
340 AttachmentInfo (
const QString &fileName,
const QByteArray &data,
const QString &mimeType)
341 : fileName(fileName), data(data), mimeType(mimeType) {}
355 int pageRoot, namesRoot, destsRoot, attachmentsRoot, catalog, info;
357 int patternColorSpaceRGB;
358 int patternColorSpaceGrayscale;
359 int patternColorSpaceCMYK;
361 QHash<qint64, uint> imageCache;
362 QHash<std::pair<uint, uint>, uint > alphaCache;
363 QList<DestInfo> destCache;
364 QList<AttachmentInfo> fileCache;
365 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)