148 lines
5.8 KiB
C
148 lines
5.8 KiB
C
|
#ifndef MUPDF_PDF_FORM_H
|
||
|
#define MUPDF_PDF_FORM_H
|
||
|
|
||
|
/* Types of widget */
|
||
|
enum pdf_widget_type
|
||
|
{
|
||
|
PDF_WIDGET_TYPE_UNKNOWN,
|
||
|
PDF_WIDGET_TYPE_BUTTON,
|
||
|
PDF_WIDGET_TYPE_CHECKBOX,
|
||
|
PDF_WIDGET_TYPE_COMBOBOX,
|
||
|
PDF_WIDGET_TYPE_LISTBOX,
|
||
|
PDF_WIDGET_TYPE_RADIOBUTTON,
|
||
|
PDF_WIDGET_TYPE_SIGNATURE,
|
||
|
PDF_WIDGET_TYPE_TEXT,
|
||
|
};
|
||
|
|
||
|
/* Types of text widget content */
|
||
|
enum pdf_widget_tx_format
|
||
|
{
|
||
|
PDF_WIDGET_TX_FORMAT_NONE,
|
||
|
PDF_WIDGET_TX_FORMAT_NUMBER,
|
||
|
PDF_WIDGET_TX_FORMAT_SPECIAL,
|
||
|
PDF_WIDGET_TX_FORMAT_DATE,
|
||
|
PDF_WIDGET_TX_FORMAT_TIME
|
||
|
};
|
||
|
|
||
|
pdf_widget *pdf_keep_widget(fz_context *ctx, pdf_widget *widget);
|
||
|
void pdf_drop_widget(fz_context *ctx, pdf_widget *widget);
|
||
|
pdf_widget *pdf_first_widget(fz_context *ctx, pdf_page *page);
|
||
|
pdf_widget *pdf_next_widget(fz_context *ctx, pdf_widget *previous);
|
||
|
int pdf_update_widget(fz_context *ctx, pdf_widget *widget);
|
||
|
|
||
|
enum pdf_widget_type pdf_widget_type(fz_context *ctx, pdf_widget *widget);
|
||
|
|
||
|
fz_rect pdf_bound_widget(fz_context *ctx, pdf_widget *widget);
|
||
|
|
||
|
int pdf_text_widget_max_len(fz_context *ctx, pdf_widget *tw);
|
||
|
int pdf_text_widget_format(fz_context *ctx, pdf_widget *tw);
|
||
|
|
||
|
int pdf_choice_widget_options(fz_context *ctx, pdf_widget *tw, int exportval, const char *opts[]);
|
||
|
int pdf_choice_widget_is_multiselect(fz_context *ctx, pdf_widget *tw);
|
||
|
int pdf_choice_widget_value(fz_context *ctx, pdf_widget *tw, const char *opts[]);
|
||
|
void pdf_choice_widget_set_value(fz_context *ctx, pdf_widget *tw, int n, const char *opts[]);
|
||
|
|
||
|
int pdf_choice_field_option_count(fz_context *ctx, pdf_obj *field);
|
||
|
const char *pdf_choice_field_option(fz_context *ctx, pdf_obj *field, int exportval, int i);
|
||
|
|
||
|
/* Field flags */
|
||
|
enum
|
||
|
{
|
||
|
/* All fields */
|
||
|
PDF_FIELD_IS_READ_ONLY = 1,
|
||
|
PDF_FIELD_IS_REQUIRED = 1 << 1,
|
||
|
PDF_FIELD_IS_NO_EXPORT = 1 << 2,
|
||
|
|
||
|
/* Text fields */
|
||
|
PDF_TX_FIELD_IS_MULTILINE = 1 << 12,
|
||
|
PDF_TX_FIELD_IS_PASSWORD = 1 << 13,
|
||
|
PDF_TX_FIELD_IS_FILE_SELECT = 1 << 20,
|
||
|
PDF_TX_FIELD_IS_DO_NOT_SPELL_CHECK = 1 << 22,
|
||
|
PDF_TX_FIELD_IS_DO_NOT_SCROLL = 1 << 23,
|
||
|
PDF_TX_FIELD_IS_COMB = 1 << 24,
|
||
|
PDF_TX_FIELD_IS_RICH_TEXT = 1 << 25,
|
||
|
|
||
|
/* Button fields */
|
||
|
PDF_BTN_FIELD_IS_NO_TOGGLE_TO_OFF = 1 << 14,
|
||
|
PDF_BTN_FIELD_IS_RADIO = 1 << 15,
|
||
|
PDF_BTN_FIELD_IS_PUSHBUTTON = 1 << 16,
|
||
|
PDF_BTN_FIELD_IS_RADIOS_IN_UNISON = 1 << 25,
|
||
|
|
||
|
/* Choice fields */
|
||
|
PDF_CH_FIELD_IS_COMBO = 1 << 17,
|
||
|
PDF_CH_FIELD_IS_EDIT = 1 << 18,
|
||
|
PDF_CH_FIELD_IS_SORT = 1 << 19,
|
||
|
PDF_CH_FIELD_IS_MULTI_SELECT = 1 << 21,
|
||
|
PDF_CH_FIELD_IS_DO_NOT_SPELL_CHECK = 1 << 22,
|
||
|
PDF_CH_FIELD_IS_COMMIT_ON_SEL_CHANGE = 1 << 26,
|
||
|
};
|
||
|
|
||
|
void pdf_calculate_form(fz_context *ctx, pdf_document *doc);
|
||
|
void pdf_reset_form(fz_context *ctx, pdf_document *doc, pdf_obj *fields, int exclude);
|
||
|
|
||
|
int pdf_field_type(fz_context *ctx, pdf_obj *field);
|
||
|
int pdf_field_flags(fz_context *ctx, pdf_obj *field);
|
||
|
char *pdf_field_name(fz_context *ctx, pdf_obj *field);
|
||
|
const char *pdf_field_value(fz_context *ctx, pdf_obj *field);
|
||
|
|
||
|
char *pdf_field_border_style(fz_context *ctx, pdf_obj *field);
|
||
|
void pdf_field_set_border_style(fz_context *ctx, pdf_obj *field, const char *text);
|
||
|
void pdf_field_set_button_caption(fz_context *ctx, pdf_obj *field, const char *text);
|
||
|
void pdf_field_set_fill_color(fz_context *ctx, pdf_obj *field, pdf_obj *col);
|
||
|
void pdf_field_set_text_color(fz_context *ctx, pdf_obj *field, pdf_obj *col);
|
||
|
int pdf_field_display(fz_context *ctx, pdf_obj *field);
|
||
|
void pdf_field_set_display(fz_context *ctx, pdf_obj *field, int d);
|
||
|
const char *pdf_field_label(fz_context *ctx, pdf_obj *field);
|
||
|
pdf_obj *pdf_button_field_on_state(fz_context *ctx, pdf_obj *field);
|
||
|
|
||
|
int pdf_set_field_value(fz_context *ctx, pdf_document *doc, pdf_obj *field, const char *text, int ignore_trigger_events);
|
||
|
int pdf_set_text_field_value(fz_context *ctx, pdf_widget *widget, const char *value);
|
||
|
int pdf_set_choice_field_value(fz_context *ctx, pdf_widget *widget, const char *value);
|
||
|
|
||
|
int pdf_signature_is_signed(fz_context *ctx, pdf_document *doc, pdf_obj *field);
|
||
|
void pdf_signature_set_value(fz_context *ctx, pdf_document *doc, pdf_obj *field, pdf_pkcs7_signer *signer);
|
||
|
|
||
|
void pdf_field_reset(fz_context *ctx, pdf_document *doc, pdf_obj *field);
|
||
|
|
||
|
pdf_obj *pdf_lookup_field(fz_context *ctx, pdf_obj *form, const char *name);
|
||
|
|
||
|
/* Form text field editing events: */
|
||
|
|
||
|
typedef struct pdf_keystroke_event_s
|
||
|
{
|
||
|
const char *value;
|
||
|
const char *change;
|
||
|
int selStart, selEnd;
|
||
|
int willCommit;
|
||
|
char *newChange;
|
||
|
} pdf_keystroke_event;
|
||
|
|
||
|
int pdf_field_event_keystroke(fz_context *ctx, pdf_document *doc, pdf_obj *field, pdf_keystroke_event *evt);
|
||
|
int pdf_field_event_validate(fz_context *ctx, pdf_document *doc, pdf_obj *field, const char *value);
|
||
|
void pdf_field_event_calculate(fz_context *ctx, pdf_document *doc, pdf_obj *field);
|
||
|
char *pdf_field_event_format(fz_context *ctx, pdf_document *doc, pdf_obj *field);
|
||
|
|
||
|
/* Call these to trigger actions from various UI events: */
|
||
|
|
||
|
void pdf_document_event_will_close(fz_context *ctx, pdf_document *doc);
|
||
|
void pdf_document_event_will_save(fz_context *ctx, pdf_document *doc);
|
||
|
void pdf_document_event_did_save(fz_context *ctx, pdf_document *doc);
|
||
|
void pdf_document_event_will_print(fz_context *ctx, pdf_document *doc);
|
||
|
void pdf_document_event_did_print(fz_context *ctx, pdf_document *doc);
|
||
|
|
||
|
void pdf_page_event_open(fz_context *ctx, pdf_page *page);
|
||
|
void pdf_page_event_close(fz_context *ctx, pdf_page *page);
|
||
|
|
||
|
void pdf_annot_event_enter(fz_context *ctx, pdf_annot *annot);
|
||
|
void pdf_annot_event_exit(fz_context *ctx, pdf_annot *annot);
|
||
|
void pdf_annot_event_down(fz_context *ctx, pdf_annot *annot);
|
||
|
void pdf_annot_event_up(fz_context *ctx, pdf_annot *annot);
|
||
|
void pdf_annot_event_focus(fz_context *ctx, pdf_annot *annot);
|
||
|
void pdf_annot_event_blur(fz_context *ctx, pdf_annot *annot);
|
||
|
void pdf_annot_event_page_open(fz_context *ctx, pdf_annot *annot);
|
||
|
void pdf_annot_event_page_close(fz_context *ctx, pdf_annot *annot);
|
||
|
void pdf_annot_event_page_visible(fz_context *ctx, pdf_annot *annot);
|
||
|
void pdf_annot_event_page_invisible(fz_context *ctx, pdf_annot *annot);
|
||
|
|
||
|
#endif
|