205 lines
8.0 KiB
TypeScript
205 lines
8.0 KiB
TypeScript
import PDFDocument from "../PDFDocument";
|
|
import PDFFont from "../PDFFont";
|
|
import { AppearanceMapping } from "./appearances";
|
|
import { Color } from "../colors";
|
|
import { Rotation } from "../rotations";
|
|
import { PDFRef, PDFWidgetAnnotation, PDFOperator, PDFName, PDFDict, PDFAcroTerminal } from "../../core";
|
|
import { ImageAlignment } from '../image';
|
|
import PDFImage from '../PDFImage';
|
|
export interface FieldAppearanceOptions {
|
|
x?: number;
|
|
y?: number;
|
|
width?: number;
|
|
height?: number;
|
|
textColor?: Color;
|
|
backgroundColor?: Color;
|
|
borderColor?: Color;
|
|
borderWidth?: number;
|
|
rotate?: Rotation;
|
|
font?: PDFFont;
|
|
hidden?: boolean;
|
|
}
|
|
export declare const assertFieldAppearanceOptions: (options?: FieldAppearanceOptions | undefined) => void;
|
|
/**
|
|
* Represents a field of a [[PDFForm]].
|
|
*
|
|
* This class is effectively abstract. All fields in a [[PDFForm]] will
|
|
* actually be an instance of a subclass of this class.
|
|
*
|
|
* Note that each field in a PDF is represented by a single field object.
|
|
* However, a given field object may be rendered at multiple locations within
|
|
* the document (across one or more pages). The rendering of a field is
|
|
* controlled by its widgets. Each widget causes its field to be displayed at a
|
|
* particular location in the document.
|
|
*
|
|
* Most of the time each field in a PDF has only a single widget, and thus is
|
|
* only rendered once. However, if a field is rendered multiple times, it will
|
|
* have multiple widgets - one for each location it is rendered.
|
|
*
|
|
* This abstraction of field objects and widgets is defined in the PDF
|
|
* specification and dictates how PDF files store fields and where they are
|
|
* to be rendered.
|
|
*/
|
|
export default class PDFField {
|
|
/** The low-level PDFAcroTerminal wrapped by this field. */
|
|
readonly acroField: PDFAcroTerminal;
|
|
/** The unique reference assigned to this field within the document. */
|
|
readonly ref: PDFRef;
|
|
/** The document to which this field belongs. */
|
|
readonly doc: PDFDocument;
|
|
protected constructor(acroField: PDFAcroTerminal, ref: PDFRef, doc: PDFDocument);
|
|
/**
|
|
* Get the fully qualified name of this field. For example:
|
|
* ```js
|
|
* const fields = form.getFields()
|
|
* fields.forEach(field => {
|
|
* const name = field.getName()
|
|
* console.log('Field name:', name)
|
|
* })
|
|
* ```
|
|
* Note that PDF fields are structured as a tree. Each field is the
|
|
* descendent of a series of ancestor nodes all the way up to the form node,
|
|
* which is always the root of the tree. Each node in the tree (except for
|
|
* the form node) has a partial name. Partial names can be composed of any
|
|
* unicode characters except a period (`.`). The fully qualified name of a
|
|
* field is composed of the partial names of all its ancestors joined
|
|
* with periods. This means that splitting the fully qualified name on
|
|
* periods and taking the last element of the resulting array will give you
|
|
* the partial name of a specific field.
|
|
* @returns The fully qualified name of this field.
|
|
*/
|
|
getName(): string;
|
|
/**
|
|
* Returns `true` if this field is read only. This means that PDF readers
|
|
* will not allow users to interact with the field or change its value. See
|
|
* [[PDFField.enableReadOnly]] and [[PDFField.disableReadOnly]].
|
|
* For example:
|
|
* ```js
|
|
* const field = form.getField('some.field')
|
|
* if (field.isReadOnly()) console.log('Read only is enabled')
|
|
* ```
|
|
* @returns Whether or not this is a read only field.
|
|
*/
|
|
isReadOnly(): boolean;
|
|
/**
|
|
* Prevent PDF readers from allowing users to interact with this field or
|
|
* change its value. The field will not respond to mouse or keyboard input.
|
|
* For example:
|
|
* ```js
|
|
* const field = form.getField('some.field')
|
|
* field.enableReadOnly()
|
|
* ```
|
|
* Useful for fields whose values are computed, imported from a database, or
|
|
* prefilled by software before being displayed to the user.
|
|
*/
|
|
enableReadOnly(): void;
|
|
/**
|
|
* Allow users to interact with this field and change its value in PDF
|
|
* readers via mouse and keyboard input. For example:
|
|
* ```js
|
|
* const field = form.getField('some.field')
|
|
* field.disableReadOnly()
|
|
* ```
|
|
*/
|
|
disableReadOnly(): void;
|
|
/**
|
|
* Returns `true` if this field must have a value when the form is submitted.
|
|
* See [[PDFField.enableRequired]] and [[PDFField.disableRequired]].
|
|
* For example:
|
|
* ```js
|
|
* const field = form.getField('some.field')
|
|
* if (field.isRequired()) console.log('Field is required')
|
|
* ```
|
|
* @returns Whether or not this field is required.
|
|
*/
|
|
isRequired(): boolean;
|
|
/**
|
|
* Require this field to have a value when the form is submitted.
|
|
* For example:
|
|
* ```js
|
|
* const field = form.getField('some.field')
|
|
* field.enableRequired()
|
|
* ```
|
|
*/
|
|
enableRequired(): void;
|
|
/**
|
|
* Do not require this field to have a value when the form is submitted.
|
|
* For example:
|
|
* ```js
|
|
* const field = form.getField('some.field')
|
|
* field.disableRequired()
|
|
* ```
|
|
*/
|
|
disableRequired(): void;
|
|
/**
|
|
* Returns `true` if this field's value should be exported when the form is
|
|
* submitted. See [[PDFField.enableExporting]] and
|
|
* [[PDFField.disableExporting]].
|
|
* For example:
|
|
* ```js
|
|
* const field = form.getField('some.field')
|
|
* if (field.isExported()) console.log('Exporting is enabled')
|
|
* ```
|
|
* @returns Whether or not this field's value should be exported.
|
|
*/
|
|
isExported(): boolean;
|
|
/**
|
|
* Indicate that this field's value should be exported when the form is
|
|
* submitted in a PDF reader. For example:
|
|
* ```js
|
|
* const field = form.getField('some.field')
|
|
* field.enableExporting()
|
|
* ```
|
|
*/
|
|
enableExporting(): void;
|
|
/**
|
|
* Indicate that this field's value should **not** be exported when the form
|
|
* is submitted in a PDF reader. For example:
|
|
* ```js
|
|
* const field = form.getField('some.field')
|
|
* field.disableExporting()
|
|
* ```
|
|
*/
|
|
disableExporting(): void;
|
|
/** @ignore */
|
|
needsAppearancesUpdate(): boolean;
|
|
/** @ignore */
|
|
defaultUpdateAppearances(_font: PDFFont): void;
|
|
protected markAsDirty(): void;
|
|
protected markAsClean(): void;
|
|
protected isDirty(): boolean;
|
|
protected createWidget(options: {
|
|
x: number;
|
|
y: number;
|
|
width: number;
|
|
height: number;
|
|
textColor?: Color;
|
|
backgroundColor?: Color;
|
|
borderColor?: Color;
|
|
borderWidth: number;
|
|
rotate: Rotation;
|
|
caption?: string;
|
|
hidden?: boolean;
|
|
page?: PDFRef;
|
|
}): PDFWidgetAnnotation;
|
|
protected updateWidgetAppearanceWithFont(widget: PDFWidgetAnnotation, font: PDFFont, { normal, rollover, down }: AppearanceMapping<PDFOperator[]>): void;
|
|
protected updateOnOffWidgetAppearance(widget: PDFWidgetAnnotation, onValue: PDFName, { normal, rollover, down, }: AppearanceMapping<{
|
|
on: PDFOperator[];
|
|
off: PDFOperator[];
|
|
}>): void;
|
|
protected updateWidgetAppearances(widget: PDFWidgetAnnotation, { normal, rollover, down }: AppearanceMapping<PDFRef | PDFDict>): void;
|
|
private createAppearanceStream;
|
|
/**
|
|
* Create a FormXObject of the supplied image and add it to context.
|
|
* The FormXObject size is calculated based on the widget (including
|
|
* the alignment).
|
|
* @param widget The widget that should display the image.
|
|
* @param alignment The alignment of the image.
|
|
* @param image The image that should be displayed.
|
|
* @returns The ref for the FormXObject that was added to the context.
|
|
*/
|
|
protected createImageAppearanceStream(widget: PDFWidgetAnnotation, image: PDFImage, alignment: ImageAlignment): PDFRef;
|
|
private createAppearanceDict;
|
|
}
|
|
//# sourceMappingURL=PDFField.d.ts.map
|