1Using Skia's PDF Backend 2======================== 3 4Here is an example of using Skia's PDF backend (SkPDF) via the 5SkDocument and SkCanvas APIs. 6 7<fiddle-embed name='@PDF'></fiddle-embed> 8<!-- https://fiddle.skia.org/c/@PDF docs/examples/PDF.cpp --> 9 10* * * 11 12<span id="limits">SkPDF Limitations</span> 13------------------------------------------ 14 15There are several corners of Skia's public API that SkPDF currently 16does not handle because either no known client uses the feature or 17there is no simple PDF-ish way to handle it. 18 19In this document: 20 21 + **drop** means to draw nothing. 22 23 + **ignore** means to draw without the effect 24 25 + **expand** means to implement something in a non-PDF-ish way. 26 This may mean to rasterize vector graphics, to expand paths with 27 path effects into many individual paths, or to convert text to 28 paths. 29 30<style scoped><!-- 31#pdftable {border-collapse:collapse;} 32#pdftable tr th, #pdftable tr td {border:#888888 2px solid;padding: 5px;} 33--></style> 34<table id="pdftable"> 35<tr><th>Effect</th> <th>text</th> <th>images</th> <th>everything 36 else</th></tr> 37<tr><th>SkMaskFilter</th> <td>drop</td> <td>ignore</td> <td>ignore</td></tr> 38<tr><th>SkPathEffect</th> <td>ignore</td> <td>n/a</td> <td>expand</td></tr> 39<tr><th>SkColorFilter</th> <td>ignore</td> <td>expand</td> <td>ignore</td></tr> 40<tr><th>SkImageFilter</th> <td>expand</td> <td>expand</td> <td>expand</td></tr> 41<tr><th>unsupported SkXferModes</th> <td>ignore</td> <td>ignore</td> <td>ignore</td></tr> 42<tr><th>non-gradient SkShader</th> <td>expand</td> <td>n/a</td> <td>expand</td></tr> 43</table> 44 45Notes: 46 47 - *SkImageFilter*: When SkImageFilter is expanded, text-as-text is lost. 48 49 - *SkXferMode*: The following transfer modes are not natively 50 supported by PDF: DstOver, SrcIn, DstIn, SrcOut, DstOut, SrcATop, 51 DstATop, and Modulate. 52 53Other limitations: 54 55 - *drawText with VerticalText* — drop. No known clients seem to make use 56 of the VerticalText flag. 57 58 - *drawTextOnPath* — expand. (Text-as-text is lost.) 59 60 - *drawVertices* — drop. 61 62 - *drawPatch* — drop. 63 64* * * 65