Skip to content

Commit d04aaa3

Browse files
HalCanarySkia Commit-Bot
authored andcommitted
PDF example
Update https://skia.org/user/sample/pdf to use example. https://fiddle.skia.org/c/0777df0419252e28d93c26fb5b789059 Change-Id: Ia828cd5d2ffd30d24a237ffaa3b007984d98a3ba Reviewed-on: https://skia-review.googlesource.com/c/skia/+/216345 Auto-Submit: Hal Canary <[email protected]> Commit-Queue: Ben Wagner <[email protected]> Reviewed-by: Ben Wagner <[email protected]>
1 parent 64b28a7 commit d04aaa3

File tree

3 files changed

+67
-27
lines changed

3 files changed

+67
-27
lines changed

docs/examples/PDF.cpp

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
// Copyright 2019 Google LLC.
2+
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
3+
#include "tools/fiddle/examples.h"
4+
REG_FIDDLE(PDF, 256, 256, true, 0) {
5+
6+
// Here is an example of using Skia’s PDF backend (SkPDF) via the SkDocument
7+
// and SkCanvas APIs.
8+
void WritePDF(SkWStream* outputStream,
9+
const char* documentTitle,
10+
void (*writePage)(SkCanvas*, int page),
11+
int numberOfPages,
12+
SkSize pageSize) {
13+
SkPDF::Metadata metadata;
14+
metadata.fTitle = documentTitle;
15+
metadata.fCreator = "Example WritePDF() Function";
16+
metadata.fCreation = {0, 2019, 1, 4, 31, 12, 34, 56};
17+
metadata.fModified = {0, 2019, 1, 4, 31, 12, 34, 56};
18+
auto pdfDocument = SkPDF::MakeDocument(outputStream, metadata);
19+
SkASSERT(pdfDocument);
20+
for (int page = 0; page < numberOfPages; ++page) {
21+
SkCanvas* pageCanvas = pdfDocument->beginPage(pageSize.width(),
22+
pageSize.height());
23+
writePage(pageCanvas, page);
24+
pdfDocument->endPage();
25+
}
26+
pdfDocument->close();
27+
}
28+
29+
// Print binary data to stdout as hex.
30+
void print_data(const SkData* data, const char* name) {
31+
if (data) {
32+
SkDebugf("\nxxd -r -p > %s << EOF", name);
33+
size_t s = data->size();
34+
const uint8_t* d = data->bytes();
35+
for (size_t i = 0; i < s; ++i) {
36+
if (i % 40 == 0) { SkDebugf("\n"); }
37+
SkDebugf("%02x", d[i]);
38+
}
39+
SkDebugf("\nEOF\n\n");
40+
}
41+
}
42+
43+
// example function that draws on a SkCanvas.
44+
void write_page(SkCanvas* canvas, int) {
45+
const SkScalar R = 115.2f, C = 128.0f;
46+
SkPath path;
47+
path.moveTo(C + R, C);
48+
for (int i = 1; i < 8; ++i) {
49+
SkScalar a = 2.6927937f * i;
50+
path.lineTo(C + R * cos(a), C + R * sin(a));
51+
}
52+
SkPaint paint;
53+
paint.setStyle(SkPaint::kStroke_Style);
54+
canvas->drawPath(path, paint);
55+
}
56+
57+
void draw(SkCanvas*) {
58+
constexpr SkSize ansiLetterSize{8.5f * 72, 11.0f * 72};
59+
SkDynamicMemoryWStream buffer;
60+
WritePDF(&buffer, "SkPDF Example", &write_page, 1, ansiLetterSize);
61+
sk_sp<SkData> pdfData = buffer.detachAsData();
62+
print_data(pdfData.get(), "skpdf_example.pdf");
63+
}
64+
} // END FIDDLE

site/user/sample/pdf.md

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,8 @@ Using Skia's PDF Backend
44
Here is an example of using Skia's PDF backend (SkPDF) via the
55
SkDocument and SkCanvas APIs.
66

7-
<!--?prettify lang=cc?-->
8-
9-
#include "SkPDFDocument.h"
10-
11-
void WritePDF(SkWStream* outputStream,
12-
const char* documentTitle,
13-
void (*writePage)(SkCanvas*, int page),
14-
int numberOfPages,
15-
SkSize pageSize) {
16-
SkPDF::Metadata metadata;
17-
metadata.fTitle = documentTitle;
18-
metadata.fCreator = "Example WritePDF() Function";
19-
SkTime::DateTime now;
20-
SkTime::GetDateTime(&now);
21-
metadata.fCreation = now;
22-
metadata.fModified = now;
23-
auto pdfDocument = SkPDF::MakeDocument(outputStream, metadata);
24-
assert(pdfDocument);
25-
26-
for (int page = 0; page < numberOfPages; ++page) {
27-
SkCanvas* pageCanvas = pdfDocument->beginPage(pageSize.width(),
28-
pageSize.height());
29-
writePage(pageCanvas, page);
30-
pdfDocument->endPage();
31-
}
32-
pdfDocument->close();
33-
}
7+
<fiddle-embed name='@PDF'></fiddle-embed>
8+
<!-- https://fiddle.skia.org/c/@PDF docs/examples/PDF.cpp -->
349

3510
* * *
3611

tools/fiddle/all_examples.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,7 @@
529529
#include "../../docs/examples/Modulate.cpp"
530530
#include "../../docs/examples/Multiply.cpp"
531531
#include "../../docs/examples/Overlay.cpp"
532+
#include "../../docs/examples/PDF.cpp"
532533
#include "../../docs/examples/Paint_053.cpp"
533534
#include "../../docs/examples/Paint_057.cpp"
534535
#include "../../docs/examples/Paint_containsText.cpp"

0 commit comments

Comments
 (0)