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 <halcanary@google.com> Commit-Queue: Ben Wagner <bungeman@google.com> Reviewed-by: Ben Wagner <bungeman@google.com>
This commit is contained in:
parent
64b28a730e
commit
d04aaa3a84
64
docs/examples/PDF.cpp
Normal file
64
docs/examples/PDF.cpp
Normal file
@ -0,0 +1,64 @@
|
||||
// Copyright 2019 Google LLC.
|
||||
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
|
||||
#include "tools/fiddle/examples.h"
|
||||
REG_FIDDLE(PDF, 256, 256, true, 0) {
|
||||
|
||||
// Here is an example of using Skia’s PDF backend (SkPDF) via the SkDocument
|
||||
// and SkCanvas APIs.
|
||||
void WritePDF(SkWStream* outputStream,
|
||||
const char* documentTitle,
|
||||
void (*writePage)(SkCanvas*, int page),
|
||||
int numberOfPages,
|
||||
SkSize pageSize) {
|
||||
SkPDF::Metadata metadata;
|
||||
metadata.fTitle = documentTitle;
|
||||
metadata.fCreator = "Example WritePDF() Function";
|
||||
metadata.fCreation = {0, 2019, 1, 4, 31, 12, 34, 56};
|
||||
metadata.fModified = {0, 2019, 1, 4, 31, 12, 34, 56};
|
||||
auto pdfDocument = SkPDF::MakeDocument(outputStream, metadata);
|
||||
SkASSERT(pdfDocument);
|
||||
for (int page = 0; page < numberOfPages; ++page) {
|
||||
SkCanvas* pageCanvas = pdfDocument->beginPage(pageSize.width(),
|
||||
pageSize.height());
|
||||
writePage(pageCanvas, page);
|
||||
pdfDocument->endPage();
|
||||
}
|
||||
pdfDocument->close();
|
||||
}
|
||||
|
||||
// Print binary data to stdout as hex.
|
||||
void print_data(const SkData* data, const char* name) {
|
||||
if (data) {
|
||||
SkDebugf("\nxxd -r -p > %s << EOF", name);
|
||||
size_t s = data->size();
|
||||
const uint8_t* d = data->bytes();
|
||||
for (size_t i = 0; i < s; ++i) {
|
||||
if (i % 40 == 0) { SkDebugf("\n"); }
|
||||
SkDebugf("%02x", d[i]);
|
||||
}
|
||||
SkDebugf("\nEOF\n\n");
|
||||
}
|
||||
}
|
||||
|
||||
// example function that draws on a SkCanvas.
|
||||
void write_page(SkCanvas* canvas, int) {
|
||||
const SkScalar R = 115.2f, C = 128.0f;
|
||||
SkPath path;
|
||||
path.moveTo(C + R, C);
|
||||
for (int i = 1; i < 8; ++i) {
|
||||
SkScalar a = 2.6927937f * i;
|
||||
path.lineTo(C + R * cos(a), C + R * sin(a));
|
||||
}
|
||||
SkPaint paint;
|
||||
paint.setStyle(SkPaint::kStroke_Style);
|
||||
canvas->drawPath(path, paint);
|
||||
}
|
||||
|
||||
void draw(SkCanvas*) {
|
||||
constexpr SkSize ansiLetterSize{8.5f * 72, 11.0f * 72};
|
||||
SkDynamicMemoryWStream buffer;
|
||||
WritePDF(&buffer, "SkPDF Example", &write_page, 1, ansiLetterSize);
|
||||
sk_sp<SkData> pdfData = buffer.detachAsData();
|
||||
print_data(pdfData.get(), "skpdf_example.pdf");
|
||||
}
|
||||
} // END FIDDLE
|
@ -4,33 +4,8 @@ Using Skia's PDF Backend
|
||||
Here is an example of using Skia's PDF backend (SkPDF) via the
|
||||
SkDocument and SkCanvas APIs.
|
||||
|
||||
<!--?prettify lang=cc?-->
|
||||
|
||||
#include "SkPDFDocument.h"
|
||||
|
||||
void WritePDF(SkWStream* outputStream,
|
||||
const char* documentTitle,
|
||||
void (*writePage)(SkCanvas*, int page),
|
||||
int numberOfPages,
|
||||
SkSize pageSize) {
|
||||
SkPDF::Metadata metadata;
|
||||
metadata.fTitle = documentTitle;
|
||||
metadata.fCreator = "Example WritePDF() Function";
|
||||
SkTime::DateTime now;
|
||||
SkTime::GetDateTime(&now);
|
||||
metadata.fCreation = now;
|
||||
metadata.fModified = now;
|
||||
auto pdfDocument = SkPDF::MakeDocument(outputStream, metadata);
|
||||
assert(pdfDocument);
|
||||
|
||||
for (int page = 0; page < numberOfPages; ++page) {
|
||||
SkCanvas* pageCanvas = pdfDocument->beginPage(pageSize.width(),
|
||||
pageSize.height());
|
||||
writePage(pageCanvas, page);
|
||||
pdfDocument->endPage();
|
||||
}
|
||||
pdfDocument->close();
|
||||
}
|
||||
<fiddle-embed name='@PDF'></fiddle-embed>
|
||||
<!-- https://fiddle.skia.org/c/@PDF docs/examples/PDF.cpp -->
|
||||
|
||||
* * *
|
||||
|
||||
|
@ -529,6 +529,7 @@
|
||||
#include "../../docs/examples/Modulate.cpp"
|
||||
#include "../../docs/examples/Multiply.cpp"
|
||||
#include "../../docs/examples/Overlay.cpp"
|
||||
#include "../../docs/examples/PDF.cpp"
|
||||
#include "../../docs/examples/Paint_053.cpp"
|
||||
#include "../../docs/examples/Paint_057.cpp"
|
||||
#include "../../docs/examples/Paint_containsText.cpp"
|
||||
|
Loading…
Reference in New Issue
Block a user