| Index: experimental/PdfViewer/pdfparser/native/SkPdfNativeDoc.h
|
| ===================================================================
|
| --- experimental/PdfViewer/pdfparser/native/SkPdfNativeDoc.h (revision 11729)
|
| +++ experimental/PdfViewer/pdfparser/native/SkPdfNativeDoc.h (working copy)
|
| @@ -35,44 +35,97 @@
|
| // But if the pdf is missing the xref, then we will have to read most of pdf to be able to render
|
| // page 100.
|
|
|
| +/** \class SkPdfNativeDoc
|
| + *
|
| + * The SkPdfNativeDoc class is used to load a PDF in memory and it represents a PDF Document.
|
| + *
|
| + */
|
| class SkPdfNativeDoc {
|
| private:
|
| + // Information about public objects in pdf that can be referenced with ID GEN R
|
| struct PublicObjectEntry {
|
| + // Offset in the file where the object starts.
|
| long fOffset;
|
| +
|
| + // Offset in file where the object ends. Could be used to quickly fail if there is a
|
| + // problem in pdf structure.
|
| // long endOffset; // TODO(edisonn): determine the end of the object,
|
| // to be used when the doc is corrupted, for fast failure.
|
| +
|
| + // Refered object.
|
| SkPdfNativeObject* fObj;
|
| +
|
| + // If refered object is a reference, we resolve recursively the reference until we find
|
| + // the real object.
|
| SkPdfNativeObject* fResolvedReference;
|
| +
|
| + // Used to break a recursive reference to itself.
|
| bool fIsReferenceResolved;
|
| };
|
|
|
| public:
|
| + // TODO(edisonn) should be deprecated
|
| SkPdfNativeDoc(const char* path);
|
| +
|
| + // TODO(edisonn) should be deprecated
|
| SkPdfNativeDoc(SkStream* stream);
|
|
|
| ~SkPdfNativeDoc();
|
|
|
| + // returns the number of pages in the pdf
|
| int pages() const;
|
| +
|
| + // returns the page resources
|
| SkPdfResourceDictionary* pageResources(int page);
|
| +
|
| + // returns the page's mediabox i points - the page physical boundaries.
|
| SkRect MediaBox(int page);
|
| +
|
| + // Returns a tokenizer of a page. The passed allocator will be used to allocate objects that
|
| + // are parsed. It should be destroyed after the tokenizer.
|
| SkPdfNativeTokenizer* tokenizerOfPage(int n, SkPdfAllocator* allocator);
|
|
|
| + // Returns a tokenizer of a pdf stream. The passed allocator will be used to allocate objects
|
| + // that are parsed. It should be destroyed after the tokenizer.
|
| SkPdfNativeTokenizer* tokenizerOfStream(SkPdfNativeObject* stream, SkPdfAllocator* allocator);
|
| +
|
| + // Returns a tokenizer of a memory buffer. The passed allocator will be used to allocate objects
|
| + // that are parsed. It should be destroyed after the tokenizer.
|
| SkPdfNativeTokenizer* tokenizerOfBuffer(const unsigned char* buffer, size_t len,
|
| SkPdfAllocator* allocator);
|
|
|
| +
|
| + //returns objects that are references and can be queried.
|
| size_t objects() const;
|
| - SkPdfNativeObject* object(int i);
|
| - SkPdfPageObjectDictionary* page(int page);
|
|
|
| + // returns an object.
|
| + // TODO(edisonn): pdf updates are not supported yet.
|
| + // add generation parameter to support page updates.
|
| + SkPdfNativeObject* object(int id /*, int generation*/ );
|
| +
|
| + // returns the object that holds all the page informnation
|
| + // TODO(edisonn): pdf updates are not supported yet.
|
| + // add generation parameter to support page updates.
|
| + SkPdfPageObjectDictionary* page(int page/*, int generation*/);
|
| +
|
| + // TODO(edisonn): deprecate the mapper - was used when we supported multiple
|
| + // parsers (podofo)
|
| + // The mapper maps allows an object to be mapped to a different dictionary type
|
| + // and it could verify the integrity of the object.
|
| const SkPdfMapper* mapper() const;
|
| +
|
| + // Allocator of the pdf - this holds all objects that are publicly referenced
|
| + // and all the objects that they refer
|
| SkPdfAllocator* allocator() const;
|
|
|
| + // Allows a renderer to create values to be dumped on the stack for operators to process them.
|
| SkPdfReal* createReal(double value) const;
|
| SkPdfInteger* createInteger(int value) const;
|
| // the string does not own the char*
|
| SkPdfString* createString(const unsigned char* sz, size_t len) const;
|
|
|
| + // Resolve a reference object. Will recursively resolve the reference
|
| + // until a real object is found
|
| SkPdfNativeObject* resolveReference(SkPdfNativeObject* ref);
|
|
|
| // Reports an approximation of all the memory usage.
|
| @@ -82,6 +135,8 @@
|
|
|
| // Takes ownership of bytes.
|
| void init(const void* bytes, size_t length);
|
| +
|
| + // loads a pdf that has missing xref
|
| void loadWithoutXRef();
|
|
|
| const unsigned char* readCrossReferenceSection(const unsigned char* xrefStart,
|
|
|