"Fossies" - the Fresh Open Source Software Archive

Member "xpdf-4.04/xpdf/PDFDoc.h" (18 Apr 2022, 6774 Bytes) of package /linux/misc/xpdf-4.04.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 //========================================================================
    2 //
    3 // PDFDoc.h
    4 //
    5 // Copyright 1996-2003 Glyph & Cog, LLC
    6 //
    7 //========================================================================
    8 
    9 #ifndef PDFDOC_H
   10 #define PDFDOC_H
   11 
   12 #include <aconf.h>
   13 
   14 #ifdef USE_GCC_PRAGMAS
   15 #pragma interface
   16 #endif
   17 
   18 #include <stdio.h>
   19 #include "XRef.h"
   20 #include "Catalog.h"
   21 #include "Page.h"
   22 
   23 class GString;
   24 class BaseStream;
   25 class OutputDev;
   26 class Links;
   27 class LinkAction;
   28 class LinkDest;
   29 class Outline;
   30 class OutlineItem;
   31 class OptionalContent;
   32 class PDFCore;
   33 
   34 //------------------------------------------------------------------------
   35 // PDFDoc
   36 //------------------------------------------------------------------------
   37 
   38 class PDFDoc {
   39 public:
   40 
   41   PDFDoc(GString *fileNameA, GString *ownerPassword = NULL,
   42      GString *userPassword = NULL, PDFCore *coreA = NULL);
   43 
   44 #ifdef _WIN32
   45   PDFDoc(wchar_t *fileNameA, int fileNameLen, GString *ownerPassword = NULL,
   46      GString *userPassword = NULL, PDFCore *coreA = NULL);
   47 #endif
   48 
   49   // This version takes a UTF-8 file name (which is only relevant on
   50   // Windows).
   51   PDFDoc(char *fileNameA, GString *ownerPassword = NULL,
   52      GString *userPassword = NULL, PDFCore *coreA = NULL);
   53 
   54   PDFDoc(BaseStream *strA, GString *ownerPassword = NULL,
   55      GString *userPassword = NULL, PDFCore *coreA = NULL);
   56 
   57   ~PDFDoc();
   58 
   59   // Was PDF document successfully opened?
   60   GBool isOk() { return ok; }
   61 
   62   // Get the error code (if isOk() returns false).
   63   int getErrorCode() { return errCode; }
   64 
   65   // Get file name.
   66   GString *getFileName() { return fileName; }
   67 #ifdef _WIN32
   68   wchar_t *getFileNameU() { return fileNameU; }
   69 #endif
   70 
   71   // Get the xref table.
   72   XRef *getXRef() { return xref; }
   73 
   74   // Get catalog.
   75   Catalog *getCatalog() { return catalog; }
   76 
   77   // Get base stream.
   78   BaseStream *getBaseStream() { return str; }
   79 
   80   // Get page parameters.
   81   double getPageMediaWidth(int page)
   82     { return catalog->getPage(page)->getMediaWidth(); }
   83   double getPageMediaHeight(int page)
   84     { return catalog->getPage(page)->getMediaHeight(); }
   85   double getPageCropWidth(int page)
   86     { return catalog->getPage(page)->getCropWidth(); }
   87   double getPageCropHeight(int page)
   88     { return catalog->getPage(page)->getCropHeight(); }
   89   int getPageRotate(int page)
   90     { return catalog->getPage(page)->getRotate(); }
   91 
   92   // Get number of pages.
   93   int getNumPages() { return catalog->getNumPages(); }
   94 
   95   // Return the contents of the metadata stream, or NULL if there is
   96   // no metadata.
   97   GString *readMetadata() { return catalog->readMetadata(); }
   98 
   99   // Return the structure tree root object.
  100   Object *getStructTreeRoot() { return catalog->getStructTreeRoot(); }
  101 
  102   // Display a page.
  103   void displayPage(OutputDev *out, int page,
  104            double hDPI, double vDPI, int rotate,
  105            GBool useMediaBox, GBool crop, GBool printing,
  106            GBool (*abortCheckCbk)(void *data) = NULL,
  107            void *abortCheckCbkData = NULL);
  108 
  109   // Display a range of pages.
  110   void displayPages(OutputDev *out, int firstPage, int lastPage,
  111             double hDPI, double vDPI, int rotate,
  112             GBool useMediaBox, GBool crop, GBool printing,
  113             GBool (*abortCheckCbk)(void *data) = NULL,
  114             void *abortCheckCbkData = NULL);
  115 
  116   // Display part of a page.
  117   void displayPageSlice(OutputDev *out, int page,
  118             double hDPI, double vDPI, int rotate,
  119             GBool useMediaBox, GBool crop, GBool printing,
  120             int sliceX, int sliceY, int sliceW, int sliceH,
  121             GBool (*abortCheckCbk)(void *data) = NULL,
  122             void *abortCheckCbkData = NULL);
  123 
  124   // Find a page, given its object ID.  Returns page number, or 0 if
  125   // not found.
  126   int findPage(int num, int gen) { return catalog->findPage(num, gen); }
  127 
  128   // Returns the links for the current page, transferring ownership to
  129   // the caller.
  130   Links *getLinks(int page);
  131 
  132   // Find a named destination.  Returns the link destination, or
  133   // NULL if <name> is not a destination.
  134   LinkDest *findDest(GString *name)
  135     { return catalog->findDest(name); }
  136 
  137   // Process the links for a page.
  138   void processLinks(OutputDev *out, int page);
  139 
  140 #ifndef DISABLE_OUTLINE
  141   // Return the outline object.
  142   Outline *getOutline() { return outline; }
  143 
  144   // Return the target page number for an outline item.  Returns 0 if
  145   // the item doesn't target a page in this PDF file.
  146   int getOutlineTargetPage(OutlineItem *outlineItem);
  147 #endif
  148 
  149   // Return the OptionalContent object.
  150   OptionalContent *getOptionalContent() { return optContent; }
  151 
  152   // Is the file encrypted?
  153   GBool isEncrypted() { return xref->isEncrypted(); }
  154 
  155   // Check various permissions.
  156   GBool okToPrint(GBool ignoreOwnerPW = gFalse)
  157     { return xref->okToPrint(ignoreOwnerPW); }
  158   GBool okToChange(GBool ignoreOwnerPW = gFalse)
  159     { return xref->okToChange(ignoreOwnerPW); }
  160   GBool okToCopy(GBool ignoreOwnerPW = gFalse)
  161     { return xref->okToCopy(ignoreOwnerPW); }
  162   GBool okToAddNotes(GBool ignoreOwnerPW = gFalse)
  163     { return xref->okToAddNotes(ignoreOwnerPW); }
  164 
  165   // Is the PDF file damaged?  This checks to see if the xref table
  166   // was constructed by the repair code.
  167   GBool isDamaged() { return xref->isRepaired(); }
  168 
  169   // Is this document linearized?
  170   GBool isLinearized();
  171 
  172   // Return the document's Info dictionary (if any).
  173   Object *getDocInfo(Object *obj) { return xref->getDocInfo(obj); }
  174   Object *getDocInfoNF(Object *obj) { return xref->getDocInfoNF(obj); }
  175 
  176   // Return the PDF version specified by the file.
  177   double getPDFVersion() { return pdfVersion; }
  178 
  179   // Save this file with another name.
  180   GBool saveAs(GString *name);
  181 
  182   // Return a pointer to the PDFCore object.
  183   PDFCore *getCore() { return core; }
  184 
  185   // Get the list of embedded files.
  186   int getNumEmbeddedFiles() { return catalog->getNumEmbeddedFiles(); }
  187   Unicode *getEmbeddedFileName(int idx)
  188     { return catalog->getEmbeddedFileName(idx); }
  189   int getEmbeddedFileNameLength(int idx)
  190     { return catalog->getEmbeddedFileNameLength(idx); }
  191   GBool saveEmbeddedFile(int idx, const char *path);
  192   GBool saveEmbeddedFileU(int idx, const char *path);
  193 #ifdef _WIN32
  194   GBool saveEmbeddedFile(int idx, const wchar_t *path, int pathLen);
  195 #endif
  196   char *getEmbeddedFileMem(int idx, int *size);
  197 
  198 
  199 private:
  200 
  201   void init(PDFCore *coreA);
  202   GBool setup(GString *ownerPassword, GString *userPassword);
  203   GBool setup2(GString *ownerPassword, GString *userPassword,
  204            GBool repairXRef);
  205   void checkHeader();
  206   GBool checkEncryption(GString *ownerPassword, GString *userPassword);
  207   GBool saveEmbeddedFile2(int idx, FILE *f);
  208 
  209   GString *fileName;
  210 #ifdef _WIN32
  211   wchar_t *fileNameU;
  212 #endif
  213   FILE *file;
  214   BaseStream *str;
  215   PDFCore *core;
  216   double pdfVersion;
  217   XRef *xref;
  218   Catalog *catalog;
  219 #ifndef DISABLE_OUTLINE
  220   Outline *outline;
  221 #endif
  222   OptionalContent *optContent;
  223 
  224   GBool ok;
  225   int errCode;
  226 };
  227 
  228 #endif