diff options
author | 2016-04-27 07:45:18 -0700 | |
---|---|---|
committer | 2016-04-27 07:45:18 -0700 | |
commit | 4b6566644f704cf9e30c71fa547c9b5915752792 (patch) | |
tree | f670fd01006423b2282ce74a80921aea121a77cf /include/core/SkDocument.h | |
parent | d1556071715d28217b7c64774335fcce2cbf46c6 (diff) |
SkDocument/PDF: new API
has a pdf/a switch.
sets metadata in factory.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1916093002
Review URL: https://codereview.chromium.org/1916093002
Diffstat (limited to 'include/core/SkDocument.h')
-rw-r--r-- | include/core/SkDocument.h | 126 |
1 files changed, 118 insertions, 8 deletions
diff --git a/include/core/SkDocument.h b/include/core/SkDocument.h index e5d8cf3a9b..f06dfa914f 100644 --- a/include/core/SkDocument.h +++ b/include/core/SkDocument.h @@ -10,15 +10,17 @@ #include "SkBitmap.h" #include "SkPicture.h" +#include "SkPixelSerializer.h" #include "SkRect.h" #include "SkRefCnt.h" #include "SkString.h" #include "SkTime.h" class SkCanvas; -class SkPixelSerializer; class SkWStream; +#define SK_SUPPORT_LEGACY_DOCUMENT_API + /** SK_ScalarDefaultDPI is 72 DPI. */ #define SK_ScalarDefaultRasterDPI 72.0f @@ -35,6 +37,98 @@ class SkWStream; */ class SK_API SkDocument : public SkRefCnt { public: + struct OptionalTimestamp { + SkTime::DateTime fDateTime; + bool fEnabled; + OptionalTimestamp() : fEnabled(false) {} + }; + + /** + * Optional metadata to be passed into the PDF factory function. + */ + struct PDFMetadata { + SkString fTitle; + SkString fAuthor; + SkString fSubject; + SkString fKeywords; + SkString fCreator; + OptionalTimestamp fCreation; + OptionalTimestamp fModified; + }; + + /** + * Create a PDF-backed document, writing the results into a + * SkWStream. + * + * PDF pages are sized in point units. 1 pt == 1/72 inch == + * 127/360 mm. + * + * @param stream A PDF document will be written to this + * stream. The document may write to the stream at + * anytime during its lifetime, until either close() is + * called or the document is deleted. + * @param dpi The DPI (pixels-per-inch) at which features without + * native PDF support will be rasterized (e.g. draw image + * with perspective, draw text with perspective, ...) A + * larger DPI would create a PDF that reflects the + * original intent with better fidelity, but it can make + * for larger PDF files too, which would use more memory + * while rendering, and it would be slower to be processed + * or sent online or to printer. + * @param metadata a PDFmetadata object. Any fields may be left + * empty. + * @param jpegEncoder For PDF documents, if a jpegEncoder is set, + * use it to encode SkImages and SkBitmaps as [JFIF]JPEGs. + * This feature is deprecated and is only supplied for + * backwards compatability. + * The prefered method to create PDFs with JPEG images is + * to use SkImage::NewFromEncoded() and not jpegEncoder. + * Chromium uses NewFromEncoded. + * If the encoder is unset, or if jpegEncoder->onEncode() + * returns NULL, fall back on encoding images losslessly + * with Deflate. + * @param pdfa Iff true, include XMP metadata, a document UUID, + * and sRGB output intent information. This adds length + * to the document and makes it non-reproducable, but are + * necessary features for PDF/A-2b conformance + * + * @returns NULL if there is an error, otherwise a newly created + * PDF-backed SkDocument. + */ + static sk_sp<SkDocument> MakePDF(SkWStream* stream, + SkScalar dpi, + const SkDocument::PDFMetadata& metadata, + sk_sp<SkPixelSerializer> jpegEncoder, + bool pdfa); + + static sk_sp<SkDocument> MakePDF(SkWStream* stream, + SkScalar dpi = SK_ScalarDefaultRasterDPI) { + return SkDocument::MakePDF(stream, dpi, SkDocument::PDFMetadata(), + nullptr, false); + } + + /** + * Create a PDF-backed document, writing the results into a file. + */ + static sk_sp<SkDocument> MakePDF(const char outputFilePath[], + SkScalar dpi = SK_ScalarDefaultRasterDPI); + + /** + * Create a XPS-backed document, writing the results into the stream. + * Returns NULL if XPS is not supported. + */ + static sk_sp<SkDocument> MakeXPS(SkWStream* stream, + SkScalar dpi = SK_ScalarDefaultRasterDPI); + + /** + * Create a XPS-backed document, writing the results into a file. + * Returns NULL if XPS is not supported. + */ + static sk_sp<SkDocument> MakeXPS(const char path[], + SkScalar dpi = SK_ScalarDefaultRasterDPI); + +#ifdef SK_SUPPORT_LEGACY_DOCUMENT_API + /** * Create a PDF-backed document, writing the results into a SkWStream. * @@ -55,8 +149,11 @@ public: * @returns NULL if there is an error, otherwise a newly created * PDF-backed SkDocument. */ - static SkDocument* CreatePDF(SkWStream*, - SkScalar dpi = SK_ScalarDefaultRasterDPI); + static SkDocument* CreatePDF(SkWStream* stream, + SkScalar dpi = SK_ScalarDefaultRasterDPI) { + return SkDocument::MakePDF(stream, dpi, SkDocument::PDFMetadata(), + nullptr, false).release(); + } /** * @param jpegEncoder For PDF documents, if a jpegEncoder is set, @@ -72,29 +169,40 @@ public: * returns NULL, fall back on encoding images losslessly * with Deflate. */ - static SkDocument* CreatePDF(SkWStream*, + static SkDocument* CreatePDF(SkWStream* stream, SkScalar dpi, - SkPixelSerializer* jpegEncoder); + SkPixelSerializer* jpegEncoder) { + return SkDocument::MakePDF(stream, dpi, SkDocument::PDFMetadata(), + sk_ref_sp(jpegEncoder), false).release(); + } /** * Create a PDF-backed document, writing the results into a file. */ static SkDocument* CreatePDF(const char outputFilePath[], - SkScalar dpi = SK_ScalarDefaultRasterDPI); + SkScalar dpi = SK_ScalarDefaultRasterDPI) { + return SkDocument::MakePDF(outputFilePath, dpi).release(); + } /** * Create a XPS-backed document, writing the results into the stream. * Returns NULL if XPS is not supported. */ static SkDocument* CreateXPS(SkWStream* stream, - SkScalar dpi = SK_ScalarDefaultRasterDPI); + SkScalar dpi = SK_ScalarDefaultRasterDPI) { + return SkDocument::MakeXPS(stream, dpi).release(); + } /** * Create a XPS-backed document, writing the results into a file. * Returns NULL if XPS is not supported. */ static SkDocument* CreateXPS(const char path[], - SkScalar dpi = SK_ScalarDefaultRasterDPI); + SkScalar dpi = SK_ScalarDefaultRasterDPI) { + return SkDocument::MakeXPS(path, dpi).release(); + } +#endif // SK_SUPPORT_LEGACY_DOCUMENT_API + /** * Begin a new page for the document, returning the canvas that will draw * into the page. The document owns this canvas, and it will go out of @@ -125,6 +233,7 @@ public: */ void abort(); +#ifdef SK_SUPPORT_LEGACY_DOCUMENT_API /** * Set the document's metadata, if supported by the document * type. The creationDate and modifiedDate parameters can be @@ -152,6 +261,7 @@ public: int /* attributeCount */, const SkTime::DateTime* /* creationDate */, const SkTime::DateTime* /* modifiedDate */) {} +#endif // SK_SUPPORT_LEGACY_DOCUMENT_API protected: SkDocument(SkWStream*, void (*)(SkWStream*, bool aborted)); |