85 lines
2.4 KiB
C++
85 lines
2.4 KiB
C++
|
/*
|
||
|
* Copyright 2020 Google Inc.
|
||
|
*
|
||
|
* Use of this source code is governed by a BSD-style license that can be
|
||
|
* found in the LICENSE file.
|
||
|
*/
|
||
|
#include "tests/Test.h"
|
||
|
|
||
|
#ifdef SK_SUPPORT_PDF
|
||
|
|
||
|
#include "include/core/SkCanvas.h"
|
||
|
#include "include/core/SkFont.h"
|
||
|
#include "include/core/SkStream.h"
|
||
|
#include "include/docs/SkPDFDocument.h"
|
||
|
|
||
|
using PDFTag = SkPDF::StructureElementNode;
|
||
|
|
||
|
// Test building a tagged PDF where nodes are pruned.
|
||
|
// Add this to args.gn to output the PDF to a file:
|
||
|
// extra_cflags = [ "-DSK_PDF_TEST_TAGS_OUTPUT_PATH=\"/tmp/pruning.pdf\"" ]
|
||
|
DEF_TEST(SkPDF_tagged_pruning, r) {
|
||
|
REQUIRE_PDF_DOCUMENT(SkPDF_tagged, r);
|
||
|
#ifdef SK_PDF_TEST_TAGS_OUTPUT_PATH
|
||
|
SkFILEWStream outputStream(SK_PDF_TEST_TAGS_OUTPUT_PATH);
|
||
|
#else
|
||
|
SkDynamicMemoryWStream outputStream;
|
||
|
#endif
|
||
|
|
||
|
SkSize pageSize = SkSize::Make(612, 792); // U.S. Letter
|
||
|
|
||
|
SkPDF::Metadata metadata;
|
||
|
metadata.fTitle = "Example Tagged PDF";
|
||
|
metadata.fCreator = "Skia";
|
||
|
SkTime::DateTime now;
|
||
|
SkTime::GetDateTime(&now);
|
||
|
metadata.fCreation = now;
|
||
|
metadata.fModified = now;
|
||
|
|
||
|
// The document tag.
|
||
|
auto root = std::make_unique<PDFTag>();
|
||
|
root->fNodeId = 1;
|
||
|
root->fTypeString = "Document";
|
||
|
root->fLang = "en-US";
|
||
|
|
||
|
// First paragraph.
|
||
|
auto p1 = std::make_unique<PDFTag>();
|
||
|
p1->fNodeId = 2;
|
||
|
p1->fAdditionalNodeIds = {3, 4};
|
||
|
p1->fTypeString = "P";
|
||
|
root->fChildVector.push_back(std::move(p1));
|
||
|
|
||
|
// Second paragraph.
|
||
|
auto p2 = std::make_unique<PDFTag>();
|
||
|
p2->fNodeId = 5;
|
||
|
p2->fAdditionalNodeIds = {6, 7};
|
||
|
p2->fTypeString = "P";
|
||
|
root->fChildVector.push_back(std::move(p2));
|
||
|
|
||
|
metadata.fStructureElementTreeRoot = root.get();
|
||
|
sk_sp<SkDocument> document = SkPDF::MakeDocument(
|
||
|
&outputStream, metadata);
|
||
|
|
||
|
SkPaint paint;
|
||
|
paint.setColor(SK_ColorBLACK);
|
||
|
|
||
|
SkCanvas* canvas =
|
||
|
document->beginPage(pageSize.width(),
|
||
|
pageSize.height());
|
||
|
SkFont font(nullptr, 20);
|
||
|
SkPDF::SetNodeId(canvas, 3);
|
||
|
canvas->drawString("First paragraph line 1", 72, 72, font, paint);
|
||
|
SkPDF::SetNodeId(canvas, 4);
|
||
|
canvas->drawString("First paragraph line 2", 72, 108, font, paint);
|
||
|
SkPDF::SetNodeId(canvas, 6);
|
||
|
canvas->drawString("Second paragraph line 1", 72, 180, font, paint);
|
||
|
SkPDF::SetNodeId(canvas, 7);
|
||
|
canvas->drawString("Second paragraph line 2", 72, 216, font, paint);
|
||
|
|
||
|
document->endPage();
|
||
|
document->close();
|
||
|
outputStream.flush();
|
||
|
}
|
||
|
|
||
|
#endif
|