/* * Copyright 2013 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkPdfRenderer_DEFINED #define SkPdfRenderer_DEFINED #include "SkTypes.h" class SkBitmap; class SkCanvas; class SkPdfNativeDoc; struct SkRect; class SkStream; // What kind of content to render. // FIXME: Currently unused. enum SkPdfContent { kNoForms_SkPdfContent, kAll_SkPdfContent, }; /** \class SkPdfRenderer * * The SkPdfRenderer class is used to render a PDF into canvas. * */ class SkPdfRenderer : SkNoncopyable { public: // Create a new renderer from a stream. // TODO(edisonn): replace it with a SkSmartStream which would know to to efficiently // deal with a HTTP stream. // FIXME: Untested. static SkPdfRenderer* CreateFromStream(SkStream*); // Create a new renderer from a file. static SkPdfRenderer* CreateFromFile(const char* filename); ~SkPdfRenderer(); // Render a specific page into the canvas, in a specific rectangle. bool renderPage(int page, SkCanvas* canvas, const SkRect& dst) const; // Returns the number of pages in the loaded pdf. int pages() const; // Returns the MediaBox of a page. Can be used by client to crate a canvas. SkRect MediaBox(int page) const; // TODO(edisonn): for testing only, probably it should be removed, unless some client wants to // let users know how much memory the PDF needs. size_t bytesUsed() const; private: // Takes ownership of SkPdfNativeDoc. SkPdfRenderer(SkPdfNativeDoc*); SkPdfNativeDoc* fPdfDoc; }; // For testing only, reports stats about rendering, like how many operations failed, or are NYI, ... void reportPdfRenderStats(); // Renders a page of a pdf in a bitmap. bool SkPDFNativeRenderToBitmap(SkStream* stream, SkBitmap* output, int page = 0, SkPdfContent content = kAll_SkPdfContent, double dpi = 72.0); // TODO(edisonn): add options to render forms, checkboxes, ... // TODO(edisonn): Add API for Forms viewing and editing // e.g. SkBitmap getPage(int page); // int formsCount(); // SkForm getForm(int formID); // SkForm(SkRect, .. other data) // TODO (edisonn): Add intend when loading pdf, for example: for viewing, for parsing content, ... #endif // SkPdfRenderer_DEFINED