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