| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015 |
- // Copyright (C) 2004-2025 Artifex Software, Inc.
- //
- // This file is part of MuPDF.
- //
- // MuPDF is free software: you can redistribute it and/or modify it under the
- // terms of the GNU Affero General Public License as published by the Free
- // Software Foundation, either version 3 of the License, or (at your option)
- // any later version.
- //
- // MuPDF is distributed in the hope that it will be useful, but WITHOUT ANY
- // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- // FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
- // details.
- //
- // You should have received a copy of the GNU Affero General Public License
- // along with MuPDF. If not, see <https://www.gnu.org/licenses/agpl-3.0.en.html>
- //
- // Alternative licensing terms are available from the licensor.
- // For commercial licensing, see <https://www.artifex.com/> or contact
- // Artifex Software, Inc., 39 Mesa Street, Suite 108A, San Francisco,
- // CA 94129, USA, for further information.
- #ifndef MUPDF_PDF_ANNOT_H
- #define MUPDF_PDF_ANNOT_H
- #include "mupdf/fitz/display-list.h"
- #include "mupdf/fitz/stream.h"
- #include "mupdf/fitz/structured-text.h"
- #include "mupdf/pdf/object.h"
- #include "mupdf/pdf/page.h"
- typedef struct pdf_annot pdf_annot;
- enum pdf_annot_type
- {
- PDF_ANNOT_TEXT,
- PDF_ANNOT_LINK,
- PDF_ANNOT_FREE_TEXT,
- PDF_ANNOT_LINE,
- PDF_ANNOT_SQUARE,
- PDF_ANNOT_CIRCLE,
- PDF_ANNOT_POLYGON,
- PDF_ANNOT_POLY_LINE,
- PDF_ANNOT_HIGHLIGHT,
- PDF_ANNOT_UNDERLINE,
- PDF_ANNOT_SQUIGGLY,
- PDF_ANNOT_STRIKE_OUT,
- PDF_ANNOT_REDACT,
- PDF_ANNOT_STAMP,
- PDF_ANNOT_CARET,
- PDF_ANNOT_INK,
- PDF_ANNOT_POPUP,
- PDF_ANNOT_FILE_ATTACHMENT,
- PDF_ANNOT_SOUND,
- PDF_ANNOT_MOVIE,
- PDF_ANNOT_RICH_MEDIA,
- PDF_ANNOT_WIDGET,
- PDF_ANNOT_SCREEN,
- PDF_ANNOT_PRINTER_MARK,
- PDF_ANNOT_TRAP_NET,
- PDF_ANNOT_WATERMARK,
- PDF_ANNOT_3D,
- PDF_ANNOT_PROJECTION,
- PDF_ANNOT_UNKNOWN = -1
- };
- /*
- Map an annotation type to a (static) string.
- The returned string must not be freed by the caller.
- */
- const char *pdf_string_from_annot_type(fz_context *ctx, enum pdf_annot_type type);
- /*
- Map from a (non-NULL, case sensitive) string to an annotation
- type.
- */
- enum pdf_annot_type pdf_annot_type_from_string(fz_context *ctx, const char *subtype);
- enum
- {
- PDF_ANNOT_IS_INVISIBLE = 1 << (1-1),
- PDF_ANNOT_IS_HIDDEN = 1 << (2-1),
- PDF_ANNOT_IS_PRINT = 1 << (3-1),
- PDF_ANNOT_IS_NO_ZOOM = 1 << (4-1),
- PDF_ANNOT_IS_NO_ROTATE = 1 << (5-1),
- PDF_ANNOT_IS_NO_VIEW = 1 << (6-1),
- PDF_ANNOT_IS_READ_ONLY = 1 << (7-1),
- PDF_ANNOT_IS_LOCKED = 1 << (8-1),
- PDF_ANNOT_IS_TOGGLE_NO_VIEW = 1 << (9-1),
- PDF_ANNOT_IS_LOCKED_CONTENTS = 1 << (10-1)
- };
- enum pdf_line_ending
- {
- PDF_ANNOT_LE_NONE = 0,
- PDF_ANNOT_LE_SQUARE,
- PDF_ANNOT_LE_CIRCLE,
- PDF_ANNOT_LE_DIAMOND,
- PDF_ANNOT_LE_OPEN_ARROW,
- PDF_ANNOT_LE_CLOSED_ARROW,
- PDF_ANNOT_LE_BUTT,
- PDF_ANNOT_LE_R_OPEN_ARROW,
- PDF_ANNOT_LE_R_CLOSED_ARROW,
- PDF_ANNOT_LE_SLASH
- };
- enum
- {
- PDF_ANNOT_Q_LEFT = 0,
- PDF_ANNOT_Q_CENTER = 1,
- PDF_ANNOT_Q_RIGHT = 2
- };
- enum pdf_intent
- {
- PDF_ANNOT_IT_DEFAULT = 0,
- PDF_ANNOT_IT_FREETEXT_CALLOUT,
- PDF_ANNOT_IT_FREETEXT_TYPEWRITER,
- PDF_ANNOT_IT_LINE_ARROW,
- PDF_ANNOT_IT_LINE_DIMENSION,
- PDF_ANNOT_IT_POLYLINE_DIMENSION,
- PDF_ANNOT_IT_POLYGON_CLOUD,
- PDF_ANNOT_IT_POLYGON_DIMENSION,
- PDF_ANNOT_IT_STAMP_IMAGE,
- PDF_ANNOT_IT_STAMP_SNAPSHOT,
- PDF_ANNOT_IT_UNKNOWN = 255,
- };
- const char *pdf_string_from_intent(fz_context *ctx, enum pdf_intent intent);
- pdf_obj *pdf_name_from_intent(fz_context *ctx, enum pdf_intent intent);
- enum pdf_intent pdf_intent_from_string(fz_context *ctx, const char *str);
- enum pdf_intent pdf_intent_from_name(fz_context *ctx, pdf_obj *obj);
- /*
- Map from a PDF name specifying an annotation line ending
- to an enumerated line ending value.
- */
- enum pdf_line_ending pdf_line_ending_from_name(fz_context *ctx, pdf_obj *end);
- /*
- Map from a (non-NULL, case sensitive) C string specifying
- an annotation line ending to an enumerated line ending value.
- */
- enum pdf_line_ending pdf_line_ending_from_string(fz_context *ctx, const char *end);
- /*
- Map from an enumerated line ending to a pdf name object that
- specifies it.
- */
- pdf_obj *pdf_name_from_line_ending(fz_context *ctx, enum pdf_line_ending end);
- /*
- Map from an enumerated line ending to a C string that specifies
- it.
- The caller must not free the returned string.
- */
- const char *pdf_string_from_line_ending(fz_context *ctx, enum pdf_line_ending end);
- /*
- Increment the reference count for an annotation.
- Never throws exceptions. Returns the same pointer.
- */
- pdf_annot *pdf_keep_annot(fz_context *ctx, pdf_annot *annot);
- /*
- Drop the reference count for an annotation.
- When the reference count reaches zero, the annotation will
- be destroyed. Never throws exceptions.
- */
- void pdf_drop_annot(fz_context *ctx, pdf_annot *annot);
- /*
- Returns a borrowed reference to the first annotation on
- a page, or NULL if none.
- The caller should fz_keep this if it intends to hold the
- pointer. Unless it fz_keeps it, it must not fz_drop it.
- */
- pdf_annot *pdf_first_annot(fz_context *ctx, pdf_page *page);
- /*
- Returns a borrowed reference to the next annotation
- on a page, or NULL if none.
- The caller should fz_keep this if it intends to hold the
- pointer. Unless it fz_keeps it, it must not fz_drop it.
- */
- pdf_annot *pdf_next_annot(fz_context *ctx, pdf_annot *annot);
- /*
- Returns a borrowed reference to the object underlying
- an annotation.
- The caller should fz_keep this if it intends to hold the
- pointer. Unless it fz_keeps it, it must not fz_drop it.
- */
- pdf_obj *pdf_annot_obj(fz_context *ctx, pdf_annot *annot);
- /*
- Returns a borrowed reference to the page to which
- an annotation belongs.
- The caller should fz_keep this if it intends to hold the
- pointer. Unless it fz_keeps it, it must not fz_drop it.
- */
- pdf_page *pdf_annot_page(fz_context *ctx, pdf_annot *annot);
- /*
- Return the rectangle for an annotation on a page.
- */
- fz_rect pdf_bound_annot(fz_context *ctx, pdf_annot *annot);
- enum pdf_annot_type pdf_annot_type(fz_context *ctx, pdf_annot *annot);
- /*
- Interpret an annotation and render it on a device.
- page: A page loaded by pdf_load_page.
- annot: an annotation.
- dev: Device used for rendering, obtained from fz_new_*_device.
- ctm: A transformation matrix applied to the objects on the page,
- e.g. to scale or rotate the page contents as desired.
- */
- void pdf_run_annot(fz_context *ctx, pdf_annot *annot, fz_device *dev, fz_matrix ctm, fz_cookie *cookie);
- /*
- Lookup needle in the nametree of the document given by which.
- The returned reference is borrowed, and should not be dropped,
- unless it is kept first.
- */
- pdf_obj *pdf_lookup_name(fz_context *ctx, pdf_document *doc, pdf_obj *which, pdf_obj *needle);
- /*
- Load a nametree, flattening it into a single dictionary.
- The caller is responsible for pdf_dropping the returned
- reference.
- */
- pdf_obj *pdf_load_name_tree(fz_context *ctx, pdf_document *doc, pdf_obj *which);
- /*
- Lookup needle in the given number tree.
- The returned reference is borrowed, and should not be dropped,
- unless it is kept first.
- */
- pdf_obj *pdf_lookup_number(fz_context *ctx, pdf_obj *root, int needle);
- /*
- Perform a depth first traversal of a tree.
- Start at tree, looking for children in the array named
- kid_name at each level.
- The arrive callback is called when we arrive at a node (i.e.
- before all the children are walked), and then the leave callback
- is called as we leave it (after all the children have been
- walked).
- names and values are (matching) null terminated arrays of
- names and values to be carried down the tree, to implement
- inheritance. NULL is a permissible value.
- */
- void pdf_walk_tree(fz_context *ctx, pdf_obj *tree, pdf_obj *kid_name,
- void (*arrive)(fz_context *, pdf_obj *, void *, pdf_obj **),
- void (*leave)(fz_context *, pdf_obj *, void *),
- void *arg,
- pdf_obj **names,
- pdf_obj **values);
- /*
- Resolve a link within a document.
- */
- int pdf_resolve_link(fz_context *ctx, pdf_document *doc, const char *uri, float *xp, float *yp);
- fz_link_dest pdf_resolve_link_dest(fz_context *ctx, pdf_document *doc, const char *uri);
- /*
- Create an action object given a link URI. The action will
- be a GoTo or URI action depending on whether the link URI
- specifies a document internal or external destination.
- */
- pdf_obj *pdf_new_action_from_link(fz_context *ctx, pdf_document *doc, const char *uri);
- /*
- Create a destination object given a link URI expected to adhere
- to the Adobe specification "Parameters for Opening PDF files"
- from the Adobe Acrobat SDK. The resulting destination object
- will either be a PDF string, or a PDF array referring to a page
- and suitable zoom level settings. In the latter case the page
- can be referred to by PDF object number or by page number, this
- is controlled by the is_remote argument. For remote destinations
- it is not possible to refer to the page by object number, so
- page numbers are used instead.
- */
- pdf_obj *pdf_new_dest_from_link(fz_context *ctx, pdf_document *doc, const char *uri, int is_remote);
- /*
- Create a link URI string according to the Adobe specification
- "Parameters for Opening PDF files" from the Adobe Acrobat SDK,
- version 8.1, which can, at the time of writing, be found here:
- https://web.archive.org/web/20170921000830/http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_open_parameters.pdf
- The resulting string must be freed by the caller.
- */
- char *pdf_new_uri_from_explicit_dest(fz_context *ctx, fz_link_dest dest);
- /*
- Create a remote link URI string according to the Adobe specification
- "Parameters for Opening PDF files" from the Adobe Acrobat SDK,
- version 8.1, which can, at the time of writing, be found here:
- https://web.archive.org/web/20170921000830/http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_open_parameters.pdf
- The file: URI scheme is used in the resulting URI if the remote document
- is specified by a system independent path (already taking the recommendations
- in table 3.40 of the PDF 1.7 specification into account), and either a
- destination name or a page number and zoom level are appended:
- file:///path/doc.pdf#page=42&view=FitV,100
- file:///path/doc.pdf#nameddest=G42.123456
- If a URL is used to specify the remote document, then its scheme takes
- precedence and either a destination name or a page number and zoom level
- are appended:
- ftp://example.com/alpha.pdf#page=42&view=Fit
- https://example.com/bravo.pdf?query=parameter#page=42&view=Fit
- The resulting string must be freed by the caller.
- */
- char *pdf_append_named_dest_to_uri(fz_context *ctx, const char *url, const char *name);
- char *pdf_append_explicit_dest_to_uri(fz_context *ctx, const char *url, fz_link_dest dest);
- char *pdf_new_uri_from_path_and_named_dest(fz_context *ctx, const char *path, const char *name);
- char *pdf_new_uri_from_path_and_explicit_dest(fz_context *ctx, const char *path, fz_link_dest dest);
- /*
- Create transform to fit appearance stream to annotation Rect
- */
- fz_matrix pdf_annot_transform(fz_context *ctx, pdf_annot *annot);
- /*
- Create a new link object.
- */
- fz_link *pdf_new_link(fz_context *ctx, pdf_page *page, fz_rect rect, const char *uri, pdf_obj *obj);
- /*
- create a new annotation of the specified type on the
- specified page. The returned pdf_annot structure is owned by the
- page and does not need to be freed.
- */
- pdf_annot *pdf_create_annot_raw(fz_context *ctx, pdf_page *page, enum pdf_annot_type type);
- /*
- create a new link on the specified page. The returned fz_link
- structure is owned by the page and does not need to be freed.
- */
- fz_link *pdf_create_link(fz_context *ctx, pdf_page *page, fz_rect bbox, const char *uri);
- /*
- delete an existing link from the specified page.
- */
- void pdf_delete_link(fz_context *ctx, pdf_page *page, fz_link *link);
- enum pdf_border_style
- {
- PDF_BORDER_STYLE_SOLID = 0,
- PDF_BORDER_STYLE_DASHED,
- PDF_BORDER_STYLE_BEVELED,
- PDF_BORDER_STYLE_INSET,
- PDF_BORDER_STYLE_UNDERLINE,
- };
- enum pdf_border_effect
- {
- PDF_BORDER_EFFECT_NONE = 0,
- PDF_BORDER_EFFECT_CLOUDY,
- };
- /*
- create a new annotation of the specified type on the
- specified page. Populate it with sensible defaults per the type.
- Currently this returns a reference that the caller owns, and
- must drop when finished with it. Up until release 1.18, the
- returned reference was owned by the page and did not need to
- be freed.
- */
- pdf_annot *pdf_create_annot(fz_context *ctx, pdf_page *page, enum pdf_annot_type type);
- /*
- Delete an annotation from the page.
- This unlinks the annotation from the page structure and drops
- the pages reference to it. Any reference held by the caller
- will not be dropped automatically, so this can safely be used
- on a borrowed reference.
- */
- void pdf_delete_annot(fz_context *ctx, pdf_page *page, pdf_annot *annot);
- /*
- Edit the associated Popup annotation rectangle.
- Popup annotations are used to store the size and position of the
- popup box that is used to edit the contents of the markup annotation.
- */
- void pdf_set_annot_popup(fz_context *ctx, pdf_annot *annot, fz_rect rect);
- fz_rect pdf_annot_popup(fz_context *ctx, pdf_annot *annot);
- /*
- Check to see if an annotation has a rect.
- */
- int pdf_annot_has_rect(fz_context *ctx, pdf_annot *annot);
- /*
- Check to see if an annotation has an ink list.
- */
- int pdf_annot_has_ink_list(fz_context *ctx, pdf_annot *annot);
- /*
- Check to see if an annotation has quad points data.
- */
- int pdf_annot_has_quad_points(fz_context *ctx, pdf_annot *annot);
- /*
- Check to see if an annotation has vertex data.
- */
- int pdf_annot_has_vertices(fz_context *ctx, pdf_annot *annot);
- /*
- Check to see if an annotation has line data.
- */
- int pdf_annot_has_line(fz_context *ctx, pdf_annot *annot);
- /*
- Check to see if an annotation has an interior color.
- */
- int pdf_annot_has_interior_color(fz_context *ctx, pdf_annot *annot);
- /*
- Check to see if an annotation has line ending styles.
- */
- int pdf_annot_has_line_ending_styles(fz_context *ctx, pdf_annot *annot);
- /*
- Check to see if an annotation has quadding.
- */
- int pdf_annot_has_quadding(fz_context *ctx, pdf_annot *annot);
- /*
- Check to see if an annotation has a border.
- */
- int pdf_annot_has_border(fz_context *ctx, pdf_annot *annot);
- /*
- Check to see if an annotation has a border effect.
- */
- int pdf_annot_has_border_effect(fz_context *ctx, pdf_annot *annot);
- /*
- Check to see if an annotation has an icon name.
- */
- int pdf_annot_has_icon_name(fz_context *ctx, pdf_annot *annot);
- /*
- Check to see if an annotation has an open action.
- */
- int pdf_annot_has_open(fz_context *ctx, pdf_annot *annot);
- /*
- Check to see if an annotation has a popup annotation.
- */
- int pdf_annot_has_popup(fz_context *ctx, pdf_annot *annot);
- /*
- Check to see if an annotation has author data.
- */
- int pdf_annot_has_author(fz_context *ctx, pdf_annot *annot);
- /*
- Check to see if an annotation has rich content.
- */
- int pdf_annot_has_rich_contents(fz_context *ctx, pdf_annot *annot);
- /*
- Check to see if an annotation has rich default styles.
- */
- int pdf_annot_has_rich_defaults(fz_context *ctx, pdf_annot *annot);
- /*
- Retrieve the annotation flags.
- */
- int pdf_annot_flags(fz_context *ctx, pdf_annot *annot);
- /*
- Retrieve the annotation design rectangle in doc space.
- Note: This is NOT the same as the bounding rectangle.
- The design rectangle is the bounding rectangle adjusted
- by the RD padding.
- */
- fz_rect pdf_annot_rect(fz_context *ctx, pdf_annot *annot);
- /*
- Retrieve the annotation border line width in points.
- DEPRECATED: Use pdf_annot_border_width instead.
- */
- float pdf_annot_border(fz_context *ctx, pdf_annot *annot);
- /*
- Retrieve the annotation border style.
- */
- enum pdf_border_style pdf_annot_border_style(fz_context *ctx, pdf_annot *annot);
- /*
- Retrieve the annotation border width in points.
- */
- float pdf_annot_border_width(fz_context *ctx, pdf_annot *annot);
- /*
- How many items does the annotation border dash pattern have?
- */
- int pdf_annot_border_dash_count(fz_context *ctx, pdf_annot *annot);
- /*
- How long is dash item i in the annotation border dash pattern?
- */
- float pdf_annot_border_dash_item(fz_context *ctx, pdf_annot *annot, int i);
- /*
- Retrieve the annotation border effect.
- */
- enum pdf_border_effect pdf_annot_border_effect(fz_context *ctx, pdf_annot *annot);
- /*
- Retrieve the annotation border effect intensity.
- */
- float pdf_annot_border_effect_intensity(fz_context *ctx, pdf_annot *annot);
- /*
- Retrieve the annotation opacity. (0 transparent, 1 solid).
- */
- float pdf_annot_opacity(fz_context *ctx, pdf_annot *annot);
- /*
- Retrieve the annotation color.
- n components, each between 0 and 1.
- n = 1 (grey), 3 (rgb) or 4 (cmyk).
- */
- void pdf_annot_color(fz_context *ctx, pdf_annot *annot, int *n, float color[4]);
- /*
- Retrieve the annotation interior color.
- n components, each between 0 and 1.
- n = 1 (grey), 3 (rgb) or 4 (cmyk).
- */
- void pdf_annot_interior_color(fz_context *ctx, pdf_annot *annot, int *n, float color[4]);
- /*
- Retrieve the annotation quadding (justification) to use.
- 0 = Left-justified
- 1 = Centered
- 2 = Right-justified
- */
- int pdf_annot_quadding(fz_context *ctx, pdf_annot *annot);
- /*
- Retrieve the annotations text language (either from the
- annotation, or from the document).
- */
- fz_text_language pdf_annot_language(fz_context *ctx, pdf_annot *annot);
- /*
- How many quad points does an annotation have?
- */
- int pdf_annot_quad_point_count(fz_context *ctx, pdf_annot *annot);
- /*
- Get quadpoint i for an annotation.
- */
- fz_quad pdf_annot_quad_point(fz_context *ctx, pdf_annot *annot, int i);
- /*
- How many strokes in the ink list for an annotation?
- */
- int pdf_annot_ink_list_count(fz_context *ctx, pdf_annot *annot);
- /*
- How many vertices in stroke i of the ink list for an annotation?
- */
- int pdf_annot_ink_list_stroke_count(fz_context *ctx, pdf_annot *annot, int i);
- /*
- Get vertex k from stroke i of the ink list for an annotation, in
- doc space.
- */
- fz_point pdf_annot_ink_list_stroke_vertex(fz_context *ctx, pdf_annot *annot, int i, int k);
- /*
- Set the flags for an annotation.
- */
- void pdf_set_annot_flags(fz_context *ctx, pdf_annot *annot, int flags);
- /*
- Set the stamp appearance to a custom image.
- */
- pdf_obj *pdf_annot_stamp_image_obj(fz_context *ctx, pdf_annot *annot);
- void pdf_set_annot_stamp_image_obj(fz_context *ctx, pdf_annot *annot, pdf_obj *ref);
- void pdf_set_annot_stamp_image(fz_context *ctx, pdf_annot *annot, fz_image *image);
- /*
- Set the design rectangle for an annotation, in doc space.
- */
- void pdf_set_annot_rect(fz_context *ctx, pdf_annot *annot, fz_rect rect);
- /*
- Set the border width for an annotation, in points.
- DEPRECATED: Use pdf_set_annot_border_width instead.
- */
- void pdf_set_annot_border(fz_context *ctx, pdf_annot *annot, float width);
- /*
- Set the border style for an annotation.
- */
- void pdf_set_annot_border_style(fz_context *ctx, pdf_annot *annot, enum pdf_border_style style);
- /*
- Set the border width for an annotation in points;
- */
- void pdf_set_annot_border_width(fz_context *ctx, pdf_annot *annot, float width);
- /*
- Clear the entire border dash pattern for an annotation.
- */
- void pdf_clear_annot_border_dash(fz_context *ctx, pdf_annot *annot);
- /*
- Add an item to the end of the border dash pattern for an annotation.
- */
- void pdf_add_annot_border_dash_item(fz_context *ctx, pdf_annot *annot, float length);
- /*
- Set the border effect for an annotation.
- */
- void pdf_set_annot_border_effect(fz_context *ctx, pdf_annot *annot, enum pdf_border_effect effect);
- /*
- Set the border effect intensity for an annotation.
- */
- void pdf_set_annot_border_effect_intensity(fz_context *ctx, pdf_annot *annot, float intensity);
- /*
- Set the opacity for an annotation, between 0 (transparent) and 1
- (solid).
- */
- void pdf_set_annot_opacity(fz_context *ctx, pdf_annot *annot, float opacity);
- /*
- Set the annotation color.
- n components, each between 0 and 1.
- n = 1 (grey), 3 (rgb) or 4 (cmyk).
- */
- void pdf_set_annot_color(fz_context *ctx, pdf_annot *annot, int n, const float *color);
- /*
- Set the annotation interior color.
- n components, each between 0 and 1.
- n = 1 (grey), 3 (rgb) or 4 (cmyk).
- */
- void pdf_set_annot_interior_color(fz_context *ctx, pdf_annot *annot, int n, const float *color);
- /*
- Set the quadding (justification) to use for the annotation.
- 0 = Left-justified
- 1 = Centered
- 2 = Right-justified
- */
- void pdf_set_annot_quadding(fz_context *ctx, pdf_annot *annot, int q);
- /*
- Set the language for the annotation.
- */
- void pdf_set_annot_language(fz_context *ctx, pdf_annot *annot, fz_text_language lang);
- /*
- Set the quad points for an annotation to those in the qv array
- of length n.
- */
- void pdf_set_annot_quad_points(fz_context *ctx, pdf_annot *annot, int n, const fz_quad *qv);
- /*
- Clear the quadpoint data for an annotation.
- */
- void pdf_clear_annot_quad_points(fz_context *ctx, pdf_annot *annot);
- /*
- Append a new quad point to the quad point data in an annotation.
- */
- void pdf_add_annot_quad_point(fz_context *ctx, pdf_annot *annot, fz_quad quad);
- /*
- Set the ink list for an annotation.
- n strokes. For 0 <= i < n, stroke i has count[i] points,
- The vertices for all the strokes are packed into a single
- array, pointed to by v.
- */
- void pdf_set_annot_ink_list(fz_context *ctx, pdf_annot *annot, int n, const int *count, const fz_point *v);
- /*
- Clear the ink list for an annotation.
- */
- void pdf_clear_annot_ink_list(fz_context *ctx, pdf_annot *annot);
- /*
- Add a new stroke (initially empty) to the ink list for an
- annotation.
- */
- void pdf_add_annot_ink_list_stroke(fz_context *ctx, pdf_annot *annot);
- /*
- Add a new vertex to the last stroke in the ink list for an
- annotation.
- */
- void pdf_add_annot_ink_list_stroke_vertex(fz_context *ctx, pdf_annot *annot, fz_point p);
- /*
- Add a new stroke to the ink list for an annotation, and
- populate it with the n points from stroke[].
- */
- void pdf_add_annot_ink_list(fz_context *ctx, pdf_annot *annot, int n, fz_point stroke[]);
- /*
- */
- void pdf_set_annot_icon_name(fz_context *ctx, pdf_annot *annot, const char *name);
- void pdf_set_annot_is_open(fz_context *ctx, pdf_annot *annot, int is_open);
- enum pdf_line_ending pdf_annot_line_start_style(fz_context *ctx, pdf_annot *annot);
- enum pdf_line_ending pdf_annot_line_end_style(fz_context *ctx, pdf_annot *annot);
- void pdf_annot_line_ending_styles(fz_context *ctx, pdf_annot *annot, enum pdf_line_ending *start_style, enum pdf_line_ending *end_style);
- void pdf_set_annot_line_start_style(fz_context *ctx, pdf_annot *annot, enum pdf_line_ending s);
- void pdf_set_annot_line_end_style(fz_context *ctx, pdf_annot *annot, enum pdf_line_ending e);
- void pdf_set_annot_line_ending_styles(fz_context *ctx, pdf_annot *annot, enum pdf_line_ending start_style, enum pdf_line_ending end_style);
- const char *pdf_annot_icon_name(fz_context *ctx, pdf_annot *annot);
- int pdf_annot_is_open(fz_context *ctx, pdf_annot *annot);
- int pdf_annot_is_standard_stamp(fz_context *ctx, pdf_annot *annot);
- void pdf_annot_line(fz_context *ctx, pdf_annot *annot, fz_point *a, fz_point *b);
- void pdf_set_annot_line(fz_context *ctx, pdf_annot *annot, fz_point a, fz_point b);
- float pdf_annot_line_leader(fz_context *ctx, pdf_annot *annot);
- float pdf_annot_line_leader_extension(fz_context *ctx, pdf_annot *annot);
- float pdf_annot_line_leader_offset(fz_context *ctx, pdf_annot *annot);
- void pdf_set_annot_line_leader(fz_context *ctx, pdf_annot *annot, float ll);
- void pdf_set_annot_line_leader_extension(fz_context *ctx, pdf_annot *annot, float lle);
- void pdf_set_annot_line_leader_offset(fz_context *ctx, pdf_annot *annot, float llo);
- int pdf_annot_line_caption(fz_context *ctx, pdf_annot *annot);
- void pdf_set_annot_line_caption(fz_context *ctx, pdf_annot *annot, int cap);
- fz_point pdf_annot_line_caption_offset(fz_context *ctx, pdf_annot *annot);
- void pdf_set_annot_line_caption_offset(fz_context *ctx, pdf_annot *annot, fz_point offset);
- int pdf_annot_vertex_count(fz_context *ctx, pdf_annot *annot);
- fz_point pdf_annot_vertex(fz_context *ctx, pdf_annot *annot, int i);
- void pdf_set_annot_vertices(fz_context *ctx, pdf_annot *annot, int n, const fz_point *v);
- void pdf_clear_annot_vertices(fz_context *ctx, pdf_annot *annot);
- void pdf_add_annot_vertex(fz_context *ctx, pdf_annot *annot, fz_point p);
- void pdf_set_annot_vertex(fz_context *ctx, pdf_annot *annot, int i, fz_point p);
- const char *pdf_annot_contents(fz_context *ctx, pdf_annot *annot);
- void pdf_set_annot_contents(fz_context *ctx, pdf_annot *annot, const char *text);
- const char *pdf_annot_author(fz_context *ctx, pdf_annot *annot);
- void pdf_set_annot_author(fz_context *ctx, pdf_annot *annot, const char *author);
- int64_t pdf_annot_modification_date(fz_context *ctx, pdf_annot *annot);
- void pdf_set_annot_modification_date(fz_context *ctx, pdf_annot *annot, int64_t time);
- int64_t pdf_annot_creation_date(fz_context *ctx, pdf_annot *annot);
- void pdf_set_annot_creation_date(fz_context *ctx, pdf_annot *annot, int64_t time);
- int pdf_annot_has_intent(fz_context *ctx, pdf_annot *annot);
- enum pdf_intent pdf_annot_intent(fz_context *ctx, pdf_annot *annot);
- void pdf_set_annot_intent(fz_context *ctx, pdf_annot *annot, enum pdf_intent it);
- int pdf_annot_has_callout(fz_context *ctx, pdf_annot *annot);
- enum pdf_line_ending pdf_annot_callout_style(fz_context *ctx, pdf_annot *annot);
- void pdf_set_annot_callout_style(fz_context *ctx, pdf_annot *annot, enum pdf_line_ending style);
- void pdf_annot_callout_line(fz_context *ctx, pdf_annot *annot, fz_point callout[3], int *n);
- void pdf_set_annot_callout_line(fz_context *ctx, pdf_annot *annot, fz_point callout[3], int n);
- fz_point pdf_annot_callout_point(fz_context *ctx, pdf_annot *annot);
- void pdf_set_annot_callout_point(fz_context *ctx, pdf_annot *annot, fz_point p);
- int pdf_annot_has_default_appearance(fz_context *ctx, pdf_annot *annot);
- void pdf_parse_default_appearance_unmapped(fz_context *ctx, const char *da, char *font_name, int font_name_len, float *size, int *n, float color[4]);
- void pdf_parse_default_appearance(fz_context *ctx, const char *da, const char **font, float *size, int *n, float color[4]);
- void pdf_print_default_appearance(fz_context *ctx, char *buf, int nbuf, const char *font, float size, int n, const float *color);
- void pdf_annot_default_appearance_unmapped(fz_context *ctx, pdf_annot *annot, char *font_name, int font_name_len, float *size, int *n, float color[4]);
- void pdf_annot_default_appearance(fz_context *ctx, pdf_annot *annot, const char **font, float *size, int *n, float color[4]);
- void pdf_set_annot_default_appearance(fz_context *ctx, pdf_annot *annot, const char *font, float size, int n, const float *color);
- const char *pdf_annot_rich_contents(fz_context *ctx, pdf_annot *annot);
- void pdf_set_annot_rich_contents(fz_context *ctx, pdf_annot *annot, const char *plain, const char *rich);
- const char *pdf_annot_rich_defaults(fz_context *ctx, pdf_annot *annot);
- void pdf_set_annot_rich_defaults(fz_context *ctx, pdf_annot *annot, const char *style);
- /*
- * Request that an appearance stream should be generated for an annotation if none is present.
- * It will be created in future calls to pdf_update_annot or pdf_update_page.
- */
- void pdf_annot_request_synthesis(fz_context *ctx, pdf_annot *annot);
- /*
- * Request that an appearance stream should be re-generated for an annotation
- * the next time pdf_annot_update or pdf_page_update is called.
- * You usually won't need to call this, because changing any annotation attributes
- * via the pdf_annot functions will do so automatically.
- * It will be created in future calls to pdf_update_annot or pdf_update_page.
- */
- void pdf_annot_request_resynthesis(fz_context *ctx, pdf_annot *annot);
- int pdf_annot_needs_resynthesis(fz_context *ctx, pdf_annot *annot);
- void pdf_set_annot_resynthesised(fz_context *ctx, pdf_annot *annot);
- void pdf_dirty_annot(fz_context *ctx, pdf_annot *annot);
- int pdf_annot_field_flags(fz_context *ctx, pdf_annot *annot);
- const char *pdf_annot_field_value(fz_context *ctx, pdf_annot *annot);
- const char *pdf_annot_field_label(fz_context *ctx, pdf_annot *widget);
- int pdf_set_annot_field_value(fz_context *ctx, pdf_document *doc, pdf_annot *widget, const char *text, int ignore_trigger_events);
- /*
- Recreate the appearance stream for an annotation, if necessary.
- */
- fz_text *pdf_layout_fit_text(fz_context *ctx, fz_font *font, fz_text_language lang, const char *str, fz_rect bounds);
- /*
- Start/Stop using the annotation-local xref. This allows us to
- generate appearance streams that don't actually hit the underlying
- document.
- */
- void pdf_annot_push_local_xref(fz_context *ctx, pdf_annot *annot);
- void pdf_annot_pop_local_xref(fz_context *ctx, pdf_annot *annot);
- void pdf_annot_ensure_local_xref(fz_context *ctx, pdf_annot *annot);
- void pdf_annot_pop_and_discard_local_xref(fz_context *ctx, pdf_annot *annot);
- /*
- Regenerate any appearance streams that are out of date and check for
- cases where a different appearance stream should be selected because of
- state changes.
- Note that a call to pdf_pass_event for one page may lead to changes on
- any other, so an app should call pdf_update_annot for every annotation
- it currently displays. Also it is important that the pdf_annot object
- is the one used to last render the annotation. If instead the app were
- to drop the page or annotations and reload them then a call to
- pdf_update_annot would not reliably be able to report all changed
- annotations.
- Returns true if the annotation appearance has changed since the last time
- pdf_update_annot was called or the annotation was first loaded.
- */
- int pdf_update_annot(fz_context *ctx, pdf_annot *annot);
- /*
- Recalculate form fields if necessary.
- Loop through all annotations on the page and update them. Return true
- if any of them were changed (by either event or javascript actions, or
- by annotation editing) and need re-rendering.
- If you need more granularity, loop through the annotations and call
- pdf_update_annot for each one to detect changes on a per-annotation
- basis.
- */
- int pdf_update_page(fz_context *ctx, pdf_page *page);
- /*
- Update internal state appropriate for editing this field. When editing
- is true, updating the text of the text widget will not have any
- side-effects such as changing other widgets or running javascript.
- This state is intended for the period when a text widget is having
- characters typed into it. The state should be reverted at the end of
- the edit sequence and the text newly updated.
- */
- void pdf_set_widget_editing_state(fz_context *ctx, pdf_annot *widget, int editing);
- int pdf_get_widget_editing_state(fz_context *ctx, pdf_annot *widget);
- /*
- Toggle the state of a specified annotation. Applies only to check-box
- and radio-button widgets.
- */
- int pdf_toggle_widget(fz_context *ctx, pdf_annot *widget);
- fz_display_list *pdf_new_display_list_from_annot(fz_context *ctx, pdf_annot *annot);
- /*
- Render an annotation suitable for blending on top of the opaque
- pixmap returned by fz_new_pixmap_from_page_contents.
- */
- fz_pixmap *pdf_new_pixmap_from_annot(fz_context *ctx, pdf_annot *annot, fz_matrix ctm, fz_colorspace *cs, fz_separations *seps, int alpha);
- fz_stext_page *pdf_new_stext_page_from_annot(fz_context *ctx, pdf_annot *annot, const fz_stext_options *options);
- fz_layout_block *pdf_layout_text_widget(fz_context *ctx, pdf_annot *annot);
- /*
- Parameters for and embedded file. Obtained through
- pdf_get_filespec_params(). The creation and
- modification date fields are < 0 if unknown.
- */
- typedef struct pdf_filespec_params {
- const char *filename;
- const char *mimetype;
- int size;
- int64_t created;
- int64_t modified;
- } pdf_filespec_params;
- /*
- Check if pdf object is a file specification.
- */
- int pdf_is_filespec(fz_context *ctx, pdf_obj *fs);
- /*
- Check if pdf object is a file specification where the data
- is embedded within the PDF file.
- */
- int pdf_is_embedded_file(fz_context *ctx, pdf_obj *fs);
- /*
- Add an embedded file to the document. This can later
- be passed e.g. to pdf_annot_set_filespec(). If unknown,
- supply NULL for MIME type and -1 for the date arguments.
- If a checksum is added it can later be verified by calling
- pdf_verify_embedded_file_checksum().
- */
- pdf_obj *pdf_add_embedded_file(fz_context *ctx, pdf_document *doc, const char *filename, const char *mimetype, fz_buffer *contents, int64_t created, int64_t modified, int add_checksum);
- /*
- Obtain parameters for a filespec: name, size,
- creation and modification dates and MIME type.
- */
- void pdf_get_filespec_params(fz_context *ctx, pdf_obj *fs, pdf_filespec_params *out);
- /*
- Load embedded file contents in a buffer which
- needs to be dropped by the called after use.
- */
- fz_buffer *pdf_load_embedded_file_contents(fz_context *ctx, pdf_obj *fs);
- /*
- Verifies the embedded file checksum. Returns 1
- if the verification is successful or there is no
- checksum to be verified, or 0 if verification fails.
- */
- int pdf_verify_embedded_file_checksum(fz_context *ctx, pdf_obj *fs);
- pdf_obj *pdf_lookup_dest(fz_context *ctx, pdf_document *doc, pdf_obj *needle);
- fz_link *pdf_load_link_annots(fz_context *ctx, pdf_document *, pdf_page *, pdf_obj *annots, int pagenum, fz_matrix page_ctm);
- void pdf_annot_MK_BG(fz_context *ctx, pdf_annot *annot, int *n, float color[4]);
- void pdf_annot_MK_BC(fz_context *ctx, pdf_annot *annot, int *n, float color[4]);
- int pdf_annot_MK_BG_rgb(fz_context *ctx, pdf_annot *annot, float rgb[3]);
- int pdf_annot_MK_BC_rgb(fz_context *ctx, pdf_annot *annot, float rgb[3]);
- pdf_obj *pdf_annot_ap(fz_context *ctx, pdf_annot *annot);
- int pdf_annot_active(fz_context *ctx, pdf_annot *annot);
- void pdf_set_annot_active(fz_context *ctx, pdf_annot *annot, int active);
- int pdf_annot_hot(fz_context *ctx, pdf_annot *annot);
- void pdf_set_annot_hot(fz_context *ctx, pdf_annot *annot, int hot);
- void pdf_set_annot_appearance(fz_context *ctx, pdf_annot *annot, const char *appearance, const char *state, fz_matrix ctm, fz_rect bbox, pdf_obj *res, fz_buffer *contents);
- void pdf_set_annot_appearance_from_display_list(fz_context *ctx, pdf_annot *annot, const char *appearance, const char *state, fz_matrix ctm, fz_display_list *list);
- /*
- Check to see if an annotation has a file specification.
- */
- int pdf_annot_has_filespec(fz_context *ctx, pdf_annot *annot);
- /*
- Retrieve the file specification for the given annotation.
- */
- pdf_obj *pdf_annot_filespec(fz_context *ctx, pdf_annot *annot);
- /*
- Set the annotation file specification.
- */
- void pdf_set_annot_filespec(fz_context *ctx, pdf_annot *annot, pdf_obj *obj);
- /*
- Get/set a hidden flag preventing the annotation from being
- rendered when it is being edited. This flag is independent
- of the hidden flag in the PDF annotation object described in the PDF specification.
- */
- int pdf_annot_hidden_for_editing(fz_context *ctx, pdf_annot *annot);
- void pdf_set_annot_hidden_for_editing(fz_context *ctx, pdf_annot *annot, int hidden);
- /*
- * Apply Redaction annotation by redacting page underneath and removing the annotation.
- */
- int pdf_apply_redaction(fz_context *ctx, pdf_annot *annot, pdf_redact_options *opts);
- #endif
|