pdfengine.h.svn-base

来自「SumatraPDF是一款小型开源的pdf阅读工具。虽然玲珑小巧(只有800多K」· SVN-BASE 代码 · 共 156 行

SVN-BASE
156
字号
/* Copyright Krzysztof Kowalczyk 2006-2007   License: GPLv2 */#ifndef _PDF_ENGINE_H_#define _PDF_ENGINE_H_#include "geom_util.h"#include "wstr_util.h"#ifndef _FITZ_H_#include <fitz.h>#include <mupdf.h>#endif/* Describes a link on PDF page. */typedef struct PdfLink {    int             pageNo;     /* on which Pdf page the link exists. 1..pageCount */    RectD           rectPage;   /* position of the link on the page */    RectI           rectCanvas; /* position of the link on canvas */    pdf_link *      link;} PdfLink;class WindowInfo;#define INVALID_PAGE_NO     -1#define INVALID_ROTATION    -1/* It seems that PDF documents are encoded assuming DPI of 72.0 */#define PDF_FILE_DPI        72class PdfTocItem {public:    wchar_t *title;    void *link;    PdfTocItem *child;    PdfTocItem *next;    PdfTocItem(wchar_t *title, void *link)    {        this->title = title;        this->link = link;        this->child = NULL;        this->next = NULL;    }    ~PdfTocItem()    {        delete child;        delete next;        free(title);    }    void AddChild(PdfTocItem *child)    {        AppendTo(&this->child, child);    }        void AddSibling(PdfTocItem *sibling)    {        AppendTo(&this->next, sibling);    }private:    void AppendTo(PdfTocItem **root, PdfTocItem *item)    {        if (!root || !item)            return;        if (!*root) {            *root = item;            return;        }        PdfTocItem *p = *root;        while (p->next)            p = p->next;        p->next = item;    }};class RenderedBitmap {public:    RenderedBitmap(fz_pixmap *);    ~RenderedBitmap();    int dx() { return _bitmap->w; }    int dy() { return _bitmap->h; }    int rowSize();    unsigned char *data();    HBITMAP createDIBitmap(HDC);    void stretchDIBits(HDC, int, int, int, int);protected:    fz_pixmap *_bitmap;};class PdfEngine {public:    PdfEngine();    ~PdfEngine();    const WCHAR *fileName(void) const { return _fileName; };    void setFileName(const WCHAR *fileName) {        assert(!_fileName);        _fileName = (const WCHAR*)wstr_dup(fileName);    }    bool validPageNo(int pageNo) const {        if ((pageNo >= 1) && (pageNo <= pageCount()))            return true;        return false;    }    int pageCount(void) const {         return _pageCount;     }    bool load(const WCHAR *fileName, WindowInfo *windowInfo, bool tryrepair);    int pageRotation(int pageNo);    SizeD pageSize(int pageNo);    RenderedBitmap *renderBitmap(int pageNo, double zoomReal, int rotation,                         BOOL (*abortCheckCbkA)(void *data),                         void *abortCheckCbkDataA);    bool printingAllowed();    int linkCount();    void fillPdfLinks(PdfLink *pdfLinks, int linkCount);    bool hasTocTree() {         return _outline != NULL;     }    PdfTocItem *getTocTree();    fz_matrix viewctm (pdf_page *page, float zoom, int rotate);    pdf_page * getPdfPage(int pageNo);    int        findPageNo(fz_obj *dest);    fz_obj    *getNamedDest(const char *name);protected:    const WCHAR *_fileName;    int _pageCount;    WindowInfo *_windowInfo;private:    HANDLE            _getPageSem;    pdf_pagetree * pages() { return _pageTree; }    void dropPdfPage(int pageNo);    PdfTocItem * buildTocTree(pdf_outline *entry);    pdf_xref *      _xref;    pdf_outline *   _outline;    pdf_pagetree *  _pageTree;    pdf_page **     _pages;    fz_renderer *   _rast;};#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?