xref: /aosp_15_r20/external/skia/site/docs/user/sample/pdf.md (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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