OLD | NEW |
| (Empty) |
1 | |
2 /* | |
3 * Copyright 2010 The Android Open Source Project | |
4 * | |
5 * Use of this source code is governed by a BSD-style license that can be | |
6 * found in the LICENSE file. | |
7 */ | |
8 | |
9 | |
10 #ifndef SkPDFDocument_DEFINED | |
11 #define SkPDFDocument_DEFINED | |
12 | |
13 #include "SkAdvancedTypefaceMetrics.h" | |
14 #include "SkRefCnt.h" | |
15 #include "SkTDArray.h" | |
16 #include "SkTemplates.h" | |
17 | |
18 class SkPDFCatalog; | |
19 class SkPDFDevice; | |
20 class SkPDFDict; | |
21 class SkPDFPage; | |
22 class SkPDFObject; | |
23 class SkWStream; | |
24 template <typename T> class SkTSet; | |
25 | |
26 /** \class SkPDFDocument | |
27 | |
28 A SkPDFDocument assembles pages together and generates the final PDF file. | |
29 */ | |
30 class SkPDFDocument { | |
31 public: | |
32 enum Flags { | |
33 kNoCompression_Flags = 0x01, //!< DEPRECATED. | |
34 kFavorSpeedOverSize_Flags = 0x01, //!< Don't compress the stream, but | |
35 // if it is already compressed return | |
36 // the compressed stream. | |
37 kNoLinks_Flags = 0x02, //!< do not honor link annotations. | |
38 | |
39 kDraftMode_Flags = 0x01, | |
40 }; | |
41 /** Create a PDF document. | |
42 */ | |
43 explicit SK_API SkPDFDocument(Flags flags = (Flags)0); | |
44 SK_API ~SkPDFDocument(); | |
45 | |
46 /** Output the PDF to the passed stream. It is an error to call this (it | |
47 * will return false and not modify stream) if no pages have been added | |
48 * or there are pages missing (i.e. page 1 and 3 have been added, but not | |
49 * page 2). | |
50 * | |
51 * @param stream The writable output stream to send the PDF to. | |
52 */ | |
53 SK_API bool emitPDF(SkWStream* stream); | |
54 | |
55 /** Sets the specific page to the passed PDF device. If the specified | |
56 * page is already set, this overrides it. Returns true if successful. | |
57 * Will fail if the document has already been emitted. | |
58 * | |
59 * @param pageNumber The position to add the passed device (1 based). | |
60 * @param pdfDevice The page to add to this document. | |
61 */ | |
62 SK_API bool setPage(int pageNumber, SkPDFDevice* pdfDevice); | |
63 | |
64 /** Append the passed pdf device to the document as a new page. Returns | |
65 * true if successful. Will fail if the document has already been emitted. | |
66 * | |
67 * @param pdfDevice The page to add to this document. | |
68 */ | |
69 SK_API bool appendPage(SkPDFDevice* pdfDevice); | |
70 | |
71 /** Get the count of unique font types used in the document. | |
72 * DEPRECATED. | |
73 */ | |
74 SK_API void getCountOfFontTypes( | |
75 int counts[SkAdvancedTypefaceMetrics::kOther_Font + 2]) const; | |
76 | |
77 /** Get the count of unique font types used in the document. | |
78 */ | |
79 SK_API void getCountOfFontTypes( | |
80 int counts[SkAdvancedTypefaceMetrics::kOther_Font + 1], | |
81 int* notSubsettableCount, | |
82 int* notEmbedddableCount) const; | |
83 | |
84 private: | |
85 SkAutoTDelete<SkPDFCatalog> fCatalog; | |
86 int64_t fXRefFileOffset; | |
87 | |
88 SkTDArray<SkPDFPage*> fPages; | |
89 SkTDArray<SkPDFDict*> fPageTree; | |
90 SkPDFDict* fDocCatalog; | |
91 SkTSet<SkPDFObject*>* fFirstPageResources; | |
92 SkTSet<SkPDFObject*>* fOtherPageResources; | |
93 SkTDArray<SkPDFObject*> fSubstitutes; | |
94 | |
95 SkPDFDict* fTrailerDict; | |
96 | |
97 /** Output the PDF header to the passed stream. | |
98 * @param stream The writable output stream to send the header to. | |
99 */ | |
100 void emitHeader(SkWStream* stream); | |
101 | |
102 /** Get the size of the header. | |
103 */ | |
104 size_t headerSize(); | |
105 | |
106 /** Output the PDF footer to the passed stream. | |
107 * @param stream The writable output stream to send the footer to. | |
108 * @param objCount The number of objects in the PDF. | |
109 */ | |
110 void emitFooter(SkWStream* stream, int64_t objCount); | |
111 }; | |
112 | |
113 #endif | |
OLD | NEW |