diff options
author | halcanary <halcanary@google.com> | 2015-02-19 07:26:12 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-02-19 07:26:13 -0800 |
commit | 07327bff1bb4ced2a35af0a5b0227c0b2cd8ac32 (patch) | |
tree | f908519c792ac2d08b5bf9562da502302642eefd /src/pdf/SkPDFDocument.h | |
parent | 8718aafec239c93485e45bbe8fed19d9a8def079 (diff) |
move SkPDFD*.h from include to src
CQ_INCLUDE_TRYBOTS=client.skia:Mac Builder-Trybot,Linux Builder-Trybot,Win Builder-Trybot
Review URL: https://codereview.chromium.org/727343002
Diffstat (limited to 'src/pdf/SkPDFDocument.h')
-rw-r--r-- | src/pdf/SkPDFDocument.h | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/src/pdf/SkPDFDocument.h b/src/pdf/SkPDFDocument.h new file mode 100644 index 0000000000..07738a210b --- /dev/null +++ b/src/pdf/SkPDFDocument.h @@ -0,0 +1,113 @@ + +/* + * Copyright 2010 The Android Open Source Project + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + + +#ifndef SkPDFDocument_DEFINED +#define SkPDFDocument_DEFINED + +#include "SkAdvancedTypefaceMetrics.h" +#include "SkRefCnt.h" +#include "SkTDArray.h" +#include "SkTemplates.h" + +class SkPDFCatalog; +class SkPDFDevice; +class SkPDFDict; +class SkPDFPage; +class SkPDFObject; +class SkWStream; +template <typename T> class SkTSet; + +/** \class SkPDFDocument + + A SkPDFDocument assembles pages together and generates the final PDF file. +*/ +class SkPDFDocument { +public: + enum Flags { + kNoCompression_Flags = 0x01, //!< DEPRECATED. + kFavorSpeedOverSize_Flags = 0x01, //!< Don't compress the stream, but + // if it is already compressed return + // the compressed stream. + kNoLinks_Flags = 0x02, //!< do not honor link annotations. + + kDraftMode_Flags = 0x01, + }; + /** Create a PDF document. + */ + explicit SK_API SkPDFDocument(Flags flags = (Flags)0); + SK_API ~SkPDFDocument(); + + /** Output the PDF to the passed stream. It is an error to call this (it + * will return false and not modify stream) if no pages have been added + * or there are pages missing (i.e. page 1 and 3 have been added, but not + * page 2). + * + * @param stream The writable output stream to send the PDF to. + */ + SK_API bool emitPDF(SkWStream* stream); + + /** Sets the specific page to the passed PDF device. If the specified + * page is already set, this overrides it. Returns true if successful. + * Will fail if the document has already been emitted. + * + * @param pageNumber The position to add the passed device (1 based). + * @param pdfDevice The page to add to this document. + */ + SK_API bool setPage(int pageNumber, SkPDFDevice* pdfDevice); + + /** Append the passed pdf device to the document as a new page. Returns + * true if successful. Will fail if the document has already been emitted. + * + * @param pdfDevice The page to add to this document. + */ + SK_API bool appendPage(SkPDFDevice* pdfDevice); + + /** Get the count of unique font types used in the document. + * DEPRECATED. + */ + SK_API void getCountOfFontTypes( + int counts[SkAdvancedTypefaceMetrics::kOther_Font + 2]) const; + + /** Get the count of unique font types used in the document. + */ + SK_API void getCountOfFontTypes( + int counts[SkAdvancedTypefaceMetrics::kOther_Font + 1], + int* notSubsettableCount, + int* notEmbedddableCount) const; + +private: + SkAutoTDelete<SkPDFCatalog> fCatalog; + int64_t fXRefFileOffset; + + SkTDArray<SkPDFPage*> fPages; + SkTDArray<SkPDFDict*> fPageTree; + SkPDFDict* fDocCatalog; + SkTSet<SkPDFObject*>* fFirstPageResources; + SkTSet<SkPDFObject*>* fOtherPageResources; + SkTDArray<SkPDFObject*> fSubstitutes; + + SkPDFDict* fTrailerDict; + + /** Output the PDF header to the passed stream. + * @param stream The writable output stream to send the header to. + */ + void emitHeader(SkWStream* stream); + + /** Get the size of the header. + */ + size_t headerSize(); + + /** Output the PDF footer to the passed stream. + * @param stream The writable output stream to send the footer to. + * @param objCount The number of objects in the PDF. + */ + void emitFooter(SkWStream* stream, int64_t objCount); +}; + +#endif |