123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646 |
- #ifndef MUPDF_FITZ_DOCUMENT_H
- #define MUPDF_FITZ_DOCUMENT_H
- #include "mupdf/fitz/system.h"
- #include "mupdf/fitz/context.h"
- #include "mupdf/fitz/geometry.h"
- #include "mupdf/fitz/device.h"
- #include "mupdf/fitz/transition.h"
- #include "mupdf/fitz/link.h"
- #include "mupdf/fitz/outline.h"
- /*
- Document interface
- */
- typedef struct fz_document_s fz_document;
- typedef struct fz_document_handler_s fz_document_handler;
- typedef struct fz_page_s fz_page;
- typedef struct fz_annot_s fz_annot;
- typedef intptr_t fz_bookmark;
- typedef enum
- {
- FZ_PERMISSION_PRINT = 'p',
- FZ_PERMISSION_COPY = 'c',
- FZ_PERMISSION_EDIT = 'e',
- FZ_PERMISSION_ANNOTATE = 'n',
- }
- fz_permission;
- /*
- fz_document_drop_fn: Type for a function to be called when
- the reference count for the fz_document drops to 0. The
- implementation should release any resources held by the
- document. The actual document pointer will be freed by the
- caller.
- */
- typedef void (fz_document_drop_fn)(fz_context *ctx, fz_document *doc);
- /*
- fz_document_needs_password_fn: Type for a function to be
- called to enquire whether the document needs a password
- or not. See fz_needs_password for more information.
- */
- typedef int (fz_document_needs_password_fn)(fz_context *ctx, fz_document *doc);
- /*
- fz_document_authenticate_password_fn: Type for a function to be
- called to attempt to authenticate a password. See
- fz_authenticate_password for more information.
- */
- typedef int (fz_document_authenticate_password_fn)(fz_context *ctx, fz_document *doc, const char *password);
- /*
- fz_document_has_permission_fn: Type for a function to be
- called to see if a document grants a certain permission. See
- fz_document_has_permission for more information.
- */
- typedef int (fz_document_has_permission_fn)(fz_context *ctx, fz_document *doc, fz_permission permission);
- /*
- fz_document_load_outline_fn: Type for a function to be called to
- load the outlines for a document. See fz_document_load_outline
- for more information.
- */
- typedef fz_outline *(fz_document_load_outline_fn)(fz_context *ctx, fz_document *doc);
- /*
- fz_document_layout_fn: Type for a function to be called to lay
- out a document. See fz_layout_document for more information.
- */
- typedef void (fz_document_layout_fn)(fz_context *ctx, fz_document *doc, float w, float h, float em);
- /*
- fz_document_resolve_link_fn: Type for a function to be called to
- resolve an internal link to a page number. See fz_resolve_link
- for more information.
- */
- typedef int (fz_document_resolve_link_fn)(fz_context *ctx, fz_document *doc, const char *uri, float *xp, float *yp);
- /*
- fz_document_count_pages_fn: Type for a function to be called to
- count the number of pages in a document. See fz_count_pages for
- more information.
- */
- typedef int (fz_document_count_pages_fn)(fz_context *ctx, fz_document *doc);
- /*
- fz_document_load_page_fn: Type for a function to load a given
- page from a document. See fz_load_page for more information.
- */
- typedef fz_page *(fz_document_load_page_fn)(fz_context *ctx, fz_document *doc, int number);
- /*
- fz_document_lookup_metadata_fn: Type for a function to query
- a documents metadata. See fz_lookup_metadata for more
- information.
- */
- typedef int (fz_document_lookup_metadata_fn)(fz_context *ctx, fz_document *doc, const char *key, char *buf, int size);
- /*
- fz_document_make_bookmark_fn: Type for a function to make
- a bookmark. See fz_make_bookmark for more information.
- */
- typedef fz_bookmark (fz_document_make_bookmark_fn)(fz_context *ctx, fz_document *doc, int page);
- /*
- fz_document_lookup_bookmark_fn: Type for a function to lookup
- a bookmark. See fz_lookup_bookmark for more information.
- */
- typedef int (fz_document_lookup_bookmark_fn)(fz_context *ctx, fz_document *doc, fz_bookmark mark);
- /*
- fz_page_drop_page_fn: Type for a function to release all the
- resources held by a page. Called automatically when the
- reference count for that page reaches zero.
- */
- typedef void (fz_page_drop_page_fn)(fz_context *ctx, fz_page *page);
- /*
- fz_page_bound_page_fn: Type for a function to return the
- bounding box of a page. See fz_bound_page for more
- information.
- */
- typedef fz_rect *(fz_page_bound_page_fn)(fz_context *ctx, fz_page *page, fz_rect *);
- /*
- fz_page_run_page_contents_fn: Type for a function to run the
- contents of a page. See fz_run_page_contents for more
- information.
- */
- typedef void (fz_page_run_page_contents_fn)(fz_context *ctx, fz_page *page, fz_device *dev, const fz_matrix *transform, fz_cookie *cookie);
- /*
- fz_page_load_links_fn: Type for a function to load the links
- from a page. See fz_load_links for more information.
- */
- typedef fz_link *(fz_page_load_links_fn)(fz_context *ctx, fz_page *page);
- /*
- fz_page_first_annot_fn: Type for a function to load the
- annotations from a page. See fz_first_annot for more
- information.
- */
- typedef fz_annot *(fz_page_first_annot_fn)(fz_context *ctx, fz_page *page);
- /*
- fz_page_page_presentation_fn: Type for a function to
- obtain the details of how this page should be presented when
- in presentation mode. See fz_page_presentation for more
- information.
- */
- typedef fz_transition *(fz_page_page_presentation_fn)(fz_context *ctx, fz_page *page, fz_transition *transition, float *duration);
- /*
- fz_page_control_separation: Type for a function to enable/
- disable separations on a page. See fz_control_separation for
- more information.
- */
- typedef void (fz_page_control_separation_fn)(fz_context *ctx, fz_page *page, int separation, int disable);
- /*
- fz_page_separation_disabled_fn: Type for a function to detect
- whether a given separation is enabled or disabled on a page.
- See fz_separation_disabled for more information.
- */
- typedef int (fz_page_separation_disabled_fn)(fz_context *ctx, fz_page *page, int separation);
- /*
- fz_page_count_separations_fn: Type for a function to count
- the number of separations on a page. See fz_count_separations
- for more information.
- */
- typedef int (fz_page_count_separations_fn)(fz_context *ctx, fz_page *page);
- /*
- fz_page_get_separation_fn: Type for a function to retrieve
- details of a separation on a page. See fz_get_separation
- for more information.
- */
- typedef const char *(fz_page_get_separation_fn)(fz_context *ctx, fz_page *page, int separation, uint32_t *rgb, uint32_t *cmyk);
- typedef void (fz_annot_drop_fn)(fz_context *ctx, fz_annot *annot);
- typedef fz_annot *(fz_annot_next_fn)(fz_context *ctx, fz_annot *annot);
- typedef fz_rect *(fz_annot_bound_fn)(fz_context *ctx, fz_annot *annot, fz_rect *rect);
- typedef void (fz_annot_run_fn)(fz_context *ctx, fz_annot *annot, fz_device *dev, const fz_matrix *transform, fz_cookie *cookie);
- /*
- Structure definition is public so other classes can
- derive from it. Do not access the members directly.
- */
- struct fz_annot_s
- {
- int refs;
- fz_annot_drop_fn *drop_annot;
- fz_annot_bound_fn *bound_annot;
- fz_annot_run_fn *run_annot;
- fz_annot_next_fn *next_annot;
- };
- /*
- Structure definition is public so other classes can
- derive from it. Do not access the members directly.
- */
- struct fz_page_s
- {
- int refs;
- fz_page_drop_page_fn *drop_page;
- fz_page_bound_page_fn *bound_page;
- fz_page_run_page_contents_fn *run_page_contents;
- fz_page_load_links_fn *load_links;
- fz_page_first_annot_fn *first_annot;
- fz_page_page_presentation_fn *page_presentation;
- fz_page_control_separation_fn *control_separation;
- fz_page_separation_disabled_fn *separation_disabled;
- fz_page_count_separations_fn *count_separations;
- fz_page_get_separation_fn *get_separation;
- };
- /*
- Structure definition is public so other classes can
- derive from it. Callers shoud not access the members
- directly, though implementations will need initialize
- functions directly.
- */
- struct fz_document_s
- {
- int refs;
- fz_document_drop_fn *drop_document;
- fz_document_needs_password_fn *needs_password;
- fz_document_authenticate_password_fn *authenticate_password;
- fz_document_has_permission_fn *has_permission;
- fz_document_load_outline_fn *load_outline;
- fz_document_layout_fn *layout;
- fz_document_make_bookmark_fn *make_bookmark;
- fz_document_lookup_bookmark_fn *lookup_bookmark;
- fz_document_resolve_link_fn *resolve_link;
- fz_document_count_pages_fn *count_pages;
- fz_document_load_page_fn *load_page;
- fz_document_lookup_metadata_fn *lookup_metadata;
- int did_layout;
- int is_reflowable;
- };
- /*
- fz_document_open_fn: Function type to open a document from a
- file.
- filename: file to open
- Pointer to opened document. Throws exception in case of error.
- */
- typedef fz_document *(fz_document_open_fn)(fz_context *ctx, const char *filename);
- /*
- fz_document_open_with_stream_fn: Function type to open a
- document from a file.
- stream: fz_stream to read document data from. Must be
- seekable for formats that require it.
- Pointer to opened document. Throws exception in case of error.
- */
- typedef fz_document *(fz_document_open_with_stream_fn)(fz_context *ctx, fz_stream *stream);
- /*
- fz_document_recognize_fn: Recognize a document type from
- a magic string.
- magic: string to recognise - typically a filename or mime
- type.
- Returns a number between 0 (not recognized) and 100
- (fully recognized) based on how certain the recognizer
- is that this is of the required type.
- */
- typedef int (fz_document_recognize_fn)(fz_context *ctx, const char *magic);
- struct fz_document_handler_s
- {
- fz_document_recognize_fn *recognize;
- fz_document_open_fn *open;
- fz_document_open_with_stream_fn *open_with_stream;
- };
- /*
- fz_register_document_handler: Register a handler
- for a document type.
- handler: The handler to register.
- */
- void fz_register_document_handler(fz_context *ctx, const fz_document_handler *handler);
- /*
- fz_register_document_handler: Register handlers
- for all the standard document types supported in
- this build.
- */
- void fz_register_document_handlers(fz_context *ctx);
- /*
- fz_open_document: Open a PDF, XPS or CBZ document.
- Open a document file and read its basic structure so pages and
- objects can be located. MuPDF will try to repair broken
- documents (without actually changing the file contents).
- The returned fz_document is used when calling most other
- document related functions.
- filename: a path to a file as it would be given to open(2).
- */
- fz_document *fz_open_document(fz_context *ctx, const char *filename);
- /*
- fz_open_document_with_stream: Open a PDF, XPS or CBZ document.
- Open a document using the specified stream object rather than
- opening a file on disk.
- magic: a string used to detect document type; either a file name or mime-type.
- */
- fz_document *fz_open_document_with_stream(fz_context *ctx, const char *magic, fz_stream *stream);
- /*
- fz_new_document: Create and initialize a document struct.
- */
- void *fz_new_document_of_size(fz_context *ctx, int size);
- #define fz_new_derived_document(C,M) ((M*)Memento_label(fz_new_document_of_size(C, sizeof(M)), #M))
- /*
- fz_keep_document: Keep a reference to an open document.
- Does not throw exceptions.
- */
- fz_document *fz_keep_document(fz_context *ctx, fz_document *doc);
- /*
- fz_drop_document: Release an open document.
- The resource store in the context associated with fz_document
- is emptied, and any allocations for the document are freed when
- the last reference is dropped.
- Does not throw exceptions.
- */
- void fz_drop_document(fz_context *ctx, fz_document *doc);
- /*
- fz_needs_password: Check if a document is encrypted with a
- non-blank password.
- Does not throw exceptions.
- */
- int fz_needs_password(fz_context *ctx, fz_document *doc);
- /*
- fz_authenticate_password: Test if the given password can
- decrypt the document.
- password: The password string to be checked. Some document
- specifications do not specify any particular text encoding, so
- neither do we.
- Returns 0 for failure to authenticate, non-zero for success.
- For PDF documents, further information can be given by examining
- the bits in the return code.
- Bit 0 => No password required
- Bit 1 => User password authenticated
- Bit 2 => Owner password authenticated
- Does not throw exceptions.
- */
- int fz_authenticate_password(fz_context *ctx, fz_document *doc, const char *password);
- /*
- fz_load_outline: Load the hierarchical document outline.
- Should be freed by fz_drop_outline.
- */
- fz_outline *fz_load_outline(fz_context *ctx, fz_document *doc);
- /*
- fz_is_document_reflowable: Is the document reflowable.
- Returns 1 to indicate reflowable documents, otherwise 0.
- */
- int fz_is_document_reflowable(fz_context *ctx, fz_document *doc);
- /*
- fz_layout_document: Layout reflowable document types.
- w, h: Page size in points.
- em: Default font size in points.
- */
- void fz_layout_document(fz_context *ctx, fz_document *doc, float w, float h, float em);
- /*
- Create a bookmark for the given page, which can be used to find the
- same location after the document has been laid out with different
- parameters.
- */
- fz_bookmark fz_make_bookmark(fz_context *ctx, fz_document *doc, int page);
- /*
- Find a bookmark and return its page number.
- */
- int fz_lookup_bookmark(fz_context *ctx, fz_document *doc, fz_bookmark mark);
- /*
- fz_count_pages: Return the number of pages in document
- May return 0 for documents with no pages.
- */
- int fz_count_pages(fz_context *ctx, fz_document *doc);
- /*
- fz_resolve_link: Resolve an internal link to a page number.
- xp, yp: Pointer to store coordinate of destination on the page.
- Returns -1 if the URI cannot be resolved.
- */
- int fz_resolve_link(fz_context *ctx, fz_document *doc, const char *uri, float *xp, float *yp);
- /*
- fz_load_page: Load a page.
- After fz_load_page is it possible to retrieve the size of the
- page using fz_bound_page, or to render the page using
- fz_run_page_*. Free the page by calling fz_drop_page.
- number: page number, 0 is the first page of the document.
- */
- fz_page *fz_load_page(fz_context *ctx, fz_document *doc, int number);
- /*
- fz_load_links: Load the list of links for a page.
- Returns a linked list of all the links on the page, each with
- its clickable region and link destination. Each link is
- reference counted so drop and free the list of links by
- calling fz_drop_link on the pointer return from fz_load_links.
- page: Page obtained from fz_load_page.
- */
- fz_link *fz_load_links(fz_context *ctx, fz_page *page);
- /*
- fz_new_page_of_size: Create and initialize a page struct.
- */
- fz_page *fz_new_page_of_size(fz_context *ctx, int size);
- #define fz_new_derived_page(CTX,TYPE) \
- ((TYPE *)Memento_label(fz_new_page_of_size(CTX,sizeof(TYPE)),#TYPE))
- /*
- fz_bound_page: Determine the size of a page at 72 dpi.
- Does not throw exceptions.
- */
- fz_rect *fz_bound_page(fz_context *ctx, fz_page *page, fz_rect *rect);
- /*
- fz_run_page: Run a page through a device.
- page: Page obtained from fz_load_page.
- dev: Device obtained from fz_new_*_device.
- transform: Transform to apply to page. May include for example
- scaling and rotation, see fz_scale, fz_rotate and fz_concat.
- Set to fz_identity if no transformation is desired.
- cookie: Communication mechanism between caller and library
- rendering the page. Intended for multi-threaded applications,
- while single-threaded applications set cookie to NULL. The
- caller may abort an ongoing rendering of a page. Cookie also
- communicates progress information back to the caller. The
- fields inside cookie are continually updated while the page is
- rendering.
- */
- void fz_run_page(fz_context *ctx, fz_page *page, fz_device *dev, const fz_matrix *transform, fz_cookie *cookie);
- /*
- fz_run_page_contents: Run a page through a device. Just the main
- page content, without the annotations, if any.
- page: Page obtained from fz_load_page.
- dev: Device obtained from fz_new_*_device.
- transform: Transform to apply to page. May include for example
- scaling and rotation, see fz_scale, fz_rotate and fz_concat.
- Set to fz_identity if no transformation is desired.
- cookie: Communication mechanism between caller and library
- rendering the page. Intended for multi-threaded applications,
- while single-threaded applications set cookie to NULL. The
- caller may abort an ongoing rendering of a page. Cookie also
- communicates progress information back to the caller. The
- fields inside cookie are continually updated while the page is
- rendering.
- */
- void fz_run_page_contents(fz_context *ctx, fz_page *page, fz_device *dev, const fz_matrix *transform, fz_cookie *cookie);
- /*
- fz_run_annot: Run an annotation through a device.
- page: Page obtained from fz_load_page.
- annot: an annotation.
- dev: Device obtained from fz_new_*_device.
- transform: Transform to apply to page. May include for example
- scaling and rotation, see fz_scale, fz_rotate and fz_concat.
- Set to fz_identity if no transformation is desired.
- cookie: Communication mechanism between caller and library
- rendering the page. Intended for multi-threaded applications,
- while single-threaded applications set cookie to NULL. The
- caller may abort an ongoing rendering of a page. Cookie also
- communicates progress information back to the caller. The
- fields inside cookie are continually updated while the page is
- rendering.
- */
- void fz_run_annot(fz_context *ctx, fz_annot *annot, fz_device *dev, const fz_matrix *transform, fz_cookie *cookie);
- /*
- fz_keep_page: Keep a reference to a loaded page.
- Does not throw exceptions.
- */
- fz_page *fz_keep_page(fz_context *ctx, fz_page *page);
- /*
- fz_drop_page: Free a loaded page.
- Does not throw exceptions.
- */
- void fz_drop_page(fz_context *ctx, fz_page *page);
- /*
- fz_page_presentation: Get the presentation details for a given page.
- transition: A pointer to a transition struct to fill out.
- duration: A pointer to a place to set the page duration in seconds.
- Will be set to 0 if no transition is specified for the page.
- Returns: a pointer to the transition structure, or NULL if there is no
- transition specified for the page.
- */
- fz_transition *fz_page_presentation(fz_context *ctx, fz_page *page, fz_transition *transition, float *duration);
- /*
- fz_has_permission: Check permission flags on document.
- */
- int fz_has_permission(fz_context *ctx, fz_document *doc, fz_permission p);
- /*
- fz_lookup_metadata: Retrieve document meta data strings.
- doc: The document to query.
- key: Which meta data key to retrieve...
- Basic information:
- 'format' -- Document format and version.
- 'encryption' -- Description of the encryption used.
- From the document information dictionary:
- 'info:Title'
- 'info:Author'
- 'info:Subject'
- 'info:Keywords'
- 'info:Creator'
- 'info:Producer'
- 'info:CreationDate'
- 'info:ModDate'
- buf: The buffer to hold the results (a nul-terminated UTF-8 string).
- size: Size of 'buf'.
- Returns the size of the output string (may be larger than 'size' if
- the output was truncated), or -1 if the key is not recognized or found.
- */
- int fz_lookup_metadata(fz_context *ctx, fz_document *doc, const char *key, char *buf, int size);
- #define FZ_META_FORMAT "format"
- #define FZ_META_ENCRYPTION "encryption"
- #define FZ_META_INFO_AUTHOR "info:Author"
- #define FZ_META_INFO_TITLE "info:Title"
- /*
- Get the number of separations on a page (including CMYK). This will
- be 0, unless the format specifically supports separations (such as
- gproof files).
- */
- int fz_count_separations_on_page(fz_context *ctx, fz_page *page);
- /*
- Enable/Disable a given separation on a given page. This will only
- affect future renderings of pages from a format that supports
- separations (such as gproof files).
- */
- void fz_control_separation_on_page(fz_context *ctx, fz_page *page, int sep, int disable);
- /*
- Returns whether a given separation on a given page is disabled. This will only
- work from a format that supports separations (such as gproof files).
- */
- int fz_separation_disabled_on_page (fz_context *ctx, fz_page *, int sep);
- /*
- Get the name and equivalent RGBA, CMYK colors of a given separation
- on a given page. This will only work for formats that support
- gproof files.
- */
- const char *fz_get_separation_on_page(fz_context *ctx, fz_page *page, int sep, uint32_t *rgba, uint32_t *cmyk);
- /*
- fz_save_gproof: Given a currently open document, create a
- gproof skeleton file from that document.
- doc_filename: The name of the currently opened document file.
- doc: The currently opened document.
- filename: The filename of the desired gproof file.
- res: The resolution at which proofing should be done.
- print_profile: The filename of the ICC profile for the printer we are proofing
- display_profile: The filename of the ICC profile for our display device
- */
- void fz_save_gproof(fz_context *ctx, const char *doc_filename, fz_document *doc, const char *filename, int res,
- const char *print_profile, const char *display_profile);
- #endif
|