Home | History | Annotate | Download | only in inc
      1 /*
      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 
      9 #ifndef SkPdfRenderer_DEFINED
     10 #define SkPdfRenderer_DEFINED
     11 
     12 #include "SkTypes.h"
     13 
     14 class SkBitmap;
     15 class SkCanvas;
     16 class SkPdfNativeDoc;
     17 struct SkRect;
     18 class SkStream;
     19 
     20 // What kind of content to render.
     21 // FIXME: Currently unused.
     22 enum SkPdfContent {
     23     kNoForms_SkPdfContent,
     24     kAll_SkPdfContent,
     25 };
     26 
     27 /** \class SkPdfRenderer
     28  *
     29  *  The SkPdfRenderer class is used to render a PDF into canvas.
     30  *
     31  */
     32 class SkPdfRenderer : SkNoncopyable {
     33 public:
     34     // 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();
     43 
     44     // Render a specific page into the canvas, in a specific rectangle.
     45     bool renderPage(int page, SkCanvas* canvas, const SkRect& dst) const;
     46 
     47     // 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 
     57 private:
     58     // Takes ownership of SkPdfNativeDoc.
     59     SkPdfRenderer(SkPdfNativeDoc*);
     60     SkPdfNativeDoc* fPdfDoc;
     61 };
     62 
     63 // For testing only, reports stats about rendering, like how many operations failed, or are NYI, ...
     64 void reportPdfRenderStats();
     65 
     66 // Renders a page of a pdf in a bitmap.
     67 bool SkPDFNativeRenderToBitmap(SkStream* stream,
     68                                SkBitmap* output,
     69                                int page = 0,
     70                                SkPdfContent content = kAll_SkPdfContent,
     71                                double dpi = 72.0);
     72 
     73 // 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 
     80 #endif  // SkPdfRenderer_DEFINED
     81