blob: 9fc1ff7c6b3b79f2bdb84875899bf719130d3606 [file] [log] [blame]
edisonn@google.com222382b2013-07-10 22:33:10 +00001/*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8
edisonn@google.com15b11182013-07-11 14:43:15 +00009#ifndef SkPdfRenderer_DEFINED
10#define SkPdfRenderer_DEFINED
edisonn@google.com222382b2013-07-10 22:33:10 +000011
scroggo@google.com90922892013-11-14 19:09:27 +000012#include "SkTypes.h"
edisonn@google.comaf54a512013-09-13 19:33:42 +000013
edisonn@google.com147adb12013-07-24 15:56:19 +000014class SkBitmap;
edisonn@google.com222382b2013-07-10 22:33:10 +000015class SkCanvas;
edisonn@google.com3aa35552013-08-14 18:26:20 +000016class SkPdfNativeDoc;
edisonn@google.com96ba3aa2013-07-28 20:04:35 +000017struct SkRect;
edisonn@google.com147adb12013-07-24 15:56:19 +000018class SkStream;
19
edisonn@google.comd03c2c72013-10-11 18:26:45 +000020// What kind of content to render.
scroggo@google.com90922892013-11-14 19:09:27 +000021// FIXME: Currently unused.
edisonn@google.com147adb12013-07-24 15:56:19 +000022enum SkPdfContent {
23 kNoForms_SkPdfContent,
24 kAll_SkPdfContent,
25};
edisonn@google.com222382b2013-07-10 22:33:10 +000026
edisonn@google.comd03c2c72013-10-11 18:26:45 +000027/** \class SkPdfRenderer
28 *
29 * The SkPdfRenderer class is used to render a PDF into canvas.
30 *
31 */
commit-bot@chromium.orge3beb6b2014-04-07 19:34:38 +000032class SkPdfRenderer : SkNoncopyable {
edisonn@google.comd03c2c72013-10-11 18:26:45 +000033public:
scroggo@google.com90922892013-11-14 19:09:27 +000034 // Create a new renderer from a stream.
35 // TODO(edisonn): replace it with a SkSmartStream which would know to to efficiently
36 // deal with a HTTP stream.
37 // FIXME: Untested.
38 static SkPdfRenderer* CreateFromStream(SkStream*);
39 // Create a new renderer from a file.
40 static SkPdfRenderer* CreateFromFile(const char* filename);
41
42 ~SkPdfRenderer();
edisonn@google.comd03c2c72013-10-11 18:26:45 +000043
44 // Render a specific page into the canvas, in a specific rectangle.
45 bool renderPage(int page, SkCanvas* canvas, const SkRect& dst) const;
46
edisonn@google.comd03c2c72013-10-11 18:26:45 +000047 // Returns the number of pages in the loaded pdf.
48 int pages() const;
49
50 // Returns the MediaBox of a page. Can be used by client to crate a canvas.
51 SkRect MediaBox(int page) const;
52
53 // TODO(edisonn): for testing only, probably it should be removed, unless some client wants to
54 // let users know how much memory the PDF needs.
55 size_t bytesUsed() const;
56
57private:
scroggo@google.com90922892013-11-14 19:09:27 +000058 // Takes ownership of SkPdfNativeDoc.
59 SkPdfRenderer(SkPdfNativeDoc*);
edisonn@google.comd03c2c72013-10-11 18:26:45 +000060 SkPdfNativeDoc* fPdfDoc;
61};
62
63// For testing only, reports stats about rendering, like how many operations failed, or are NYI, ...
64void reportPdfRenderStats();
65
66// Renders a page of a pdf in a bitmap.
67bool SkPDFNativeRenderToBitmap(SkStream* stream,
68 SkBitmap* output,
69 int page = 0,
70 SkPdfContent content = kAll_SkPdfContent,
71 double dpi = 72.0);
72
edisonn@google.come50d9a12013-10-10 20:58:22 +000073// TODO(edisonn): add options to render forms, checkboxes, ...
74// TODO(edisonn): Add API for Forms viewing and editing
75// e.g. SkBitmap getPage(int page);
76// int formsCount();
77// SkForm getForm(int formID); // SkForm(SkRect, .. other data)
78// TODO (edisonn): Add intend when loading pdf, for example: for viewing, for parsing content, ...
79
edisonn@google.com15b11182013-07-11 14:43:15 +000080#endif // SkPdfRenderer_DEFINED