OLD | NEW |
1 Using Skia's PDF Backend | 1 Using Skia's PDF Backend |
2 ======================== | 2 ======================== |
3 | 3 |
4 Here is an example of using Skia's PDF backend in the recommended way: | 4 Here is an example of using Skia's PDF backend (SkPDF) via the |
5 via the SkDocument and SkCanvas APIs. | 5 SkDocument and SkCanvas APIs. |
6 | 6 |
7 <!--?prettify lang=cc?--> | 7 <!--?prettify lang=cc?--> |
8 | 8 |
9 #include "SkDocument.h" | 9 #include "SkDocument.h" |
10 | 10 |
11 bool WritePDF(SkWStream* outputStream) { | 11 bool WritePDF(SkWStream* outputStream) { |
12 SkDocument::PDFMetadata metadata; | 12 SkDocument::PDFMetadata metadata; |
13 metadata.fCreator = "creator...."; | 13 metadata.fCreator = "creator...."; |
14 metadata.fTitle = "title..."; | 14 metadata.fTitle = "title..."; |
15 metadata.fAuthor = "author..."; | 15 metadata.fAuthor = "author..."; |
(...skipping 16 matching lines...) Expand all Loading... |
32 SkScalar pageHeight = ....; | 32 SkScalar pageHeight = ....; |
33 SkCanvas* pageCanvas = | 33 SkCanvas* pageCanvas = |
34 pdfDocument->beginPage(pageWidth, pageHeight); | 34 pdfDocument->beginPage(pageWidth, pageHeight); |
35 | 35 |
36 // ....insert canvas draw commands here.... | 36 // ....insert canvas draw commands here.... |
37 | 37 |
38 pdfDocument->endPage(); | 38 pdfDocument->endPage(); |
39 } | 39 } |
40 return pdfDocument->close(); | 40 return pdfDocument->close(); |
41 } | 41 } |
| 42 |
| 43 * * * |
| 44 |
| 45 <span id="limits">SkPDF Limitations</span> |
| 46 ------------------------------------------ |
| 47 |
| 48 There are several corners of Skia's public API that SkPDF currently |
| 49 does not handle because either no known client uses the feature or |
| 50 there is no simple PDF-ish way to handle it. |
| 51 |
| 52 In this document: |
| 53 |
| 54 + **drop** means to draw nothing. |
| 55 |
| 56 + **ignore** mean to draw without the effect |
| 57 |
| 58 + **expand** means to implement something in a non-PDF-ish way. |
| 59 This may mean to rasterize vector graphics, to expand paths with |
| 60 path effects into many individual paths, or to convert text to |
| 61 paths. |
| 62 |
| 63 <style scoped><!-- |
| 64 #pdftable {border-collapse:collapse;} |
| 65 #pdftable tr th, #pdftable tr td {border:#888888 2px solid;padding: 5px;} |
| 66 --></style> |
| 67 <table id="pdftable"> |
| 68 <tr><th>Effect</th> <th>text</th> <th>images</th> <th>everyth
ing |
| 69 else</t
h></tr> |
| 70 <tr><th>SkMaskFilter</th> <td>drop</td> <td>ignore</td> <td>ignore<
/td></tr> |
| 71 <tr><th>SkPathEffect</th> <td>ignore</td> <td>n/a</td> <td>expand<
/td></tr> |
| 72 <tr><th>SkColorFilter</th> <td>ignore</td> <td>expand</td> <td>ignore<
/td></tr> |
| 73 <tr><th>SkImageFilter</th> <td>expand</td> <td>expand</td> <td>expand<
/td></tr> |
| 74 <tr><th>unsupported SkXferModes</th> <td>ignore</td> <td>ignore</td> <td>ignore<
/td></tr> |
| 75 <tr><th>non-gradient SkShader</th> <td>expand</td> <td>n/a</td> <td>expand<
/td></tr> |
| 76 </table> |
| 77 |
| 78 Notes: |
| 79 |
| 80 - *SkImageFilter*: When SkImageFilter is expanded, text-as-text is lost. |
| 81 |
| 82 - *SkXferMode*: The following transfer modes are not natively |
| 83 supported by PDF: DstOver, SrcIn, DstIn, SrcOut, DstOut, SrcATop, |
| 84 DstATop, and Modulate. |
| 85 |
| 86 Other limitations: |
| 87 |
| 88 - *drawText with VerticalText* — drop. No known clients seem to make use |
| 89 of the VerticalText flag. |
| 90 |
| 91 - *drawTextOnPath* — expand. (Text-as-text is lost.) |
| 92 |
| 93 - *drawVertices* — drop. |
| 94 |
| 95 - *drawPatch* — drop. |
| 96 |
| 97 * * * |
OLD | NEW |