// Use DLLs (x64, x86) from https://github.com/bblanchon/pdfium-binaries // // DLL Version: chromium/6611 unit PdfiumLib; {$IFDEF FPC} {$MODE DelphiUnicode} {$ENDIF FPC} {$IFNDEF FPC} {$A8,B-,E-,F-,G+,H+,I+,J-,K-,M-,N-,P+,Q-,R-,S-,T-,U-,V+,X+,Z1} {$STRINGCHECKS OFF} // It only slows down Delphi strings in Delphi 2009 and 2010 {$ENDIF ~FPC} {$SCOPEDENUMS ON} {.$DEFINE DLLEXPORT} // stdcall in WIN32 instead of CDECL in WIN32 (The library switches between those from release to release) {$DEFINE PDF_USE_SKIA} {$DEFINE PDF_ENABLE_XFA} {$DEFINE PDF_ENABLE_V8} interface uses {$IFDEF FPC} {$IFDEF MSWINDOWS} Windows; {$ELSE} dynlibs; {$ENDIF MSWINDOWS} {$ELSE} {$IF CompilerVersion >= 23.0} // XE2+ WinApi.Windows; {$ELSE} Windows; {$IFEND} {$ENDIF FPC} type // Delphi/FPC version compatibility types {$IF not declared(SIZE_T)} SIZE_T = LongWord; {$IFEND} {$IF not declared(DWORD)} DWORD = UInt32; {$IFEND} {$IF not declared(UINT)} UINT = LongWord; {$IFEND} {$IF not declared(PUINT)} PUINT = ^UINT; {$IFEND} TIME_T = Longint; PTIME_T = ^TIME_T; // Returns True if the pdfium.dll supports Skia. function PDF_IsSkiaAvailable: Boolean; // *** _FPDFVIEW_H_ *** {.$IFDEF PDF_ENABLE_XFA} // PDF_USE_XFA is set in confirmation that this version of PDFium can support // XFA forms as requested by the PDF_ENABLE_XFA setting. function PDF_USE_XFA: Boolean; {.$ENDIF PDF_ENABLE_XFA} const // PDF object types FPDF_OBJECT_UNKNOWN = 0; FPDF_OBJECT_BOOLEAN = 1; FPDF_OBJECT_NUMBER = 2; FPDF_OBJECT_STRING = 3; FPDF_OBJECT_NAME = 4; FPDF_OBJECT_ARRAY = 5; FPDF_OBJECT_DICTIONARY = 6; FPDF_OBJECT_STREAM = 7; FPDF_OBJECT_NULLOBJ = 8; FPDF_OBJECT_REFERENCE = 9; // PDF text rendering modes type FPDF_TEXT_RENDERMODE = Integer; const FPDF_TEXTRENDERMODE_UNKNOWN = -1; FPDF_TEXTRENDERMODE_FILL = 0; FPDF_TEXTRENDERMODE_STROKE = 1; FPDF_TEXTRENDERMODE_FILL_STROKE = 2; FPDF_TEXTRENDERMODE_INVISIBLE = 3; FPDF_TEXTRENDERMODE_FILL_CLIP = 4; FPDF_TEXTRENDERMODE_STROKE_CLIP = 5; FPDF_TEXTRENDERMODE_FILL_STROKE_CLIP = 6; FPDF_TEXTRENDERMODE_CLIP = 7; FPDF_TEXTRENDERMODE_LAST = FPDF_TEXTRENDERMODE_CLIP; type // Helper data type for type safety. __FPDF_PTRREC = record end; __PFPDF_PTRREC = ^__FPDF_PTRREC; PFPDF_LINK = ^FPDF_LINK; // array PFPDF_PAGE = ^FPDF_PAGE; // array // PDF types - use incomplete types (never completed) to force API type safety. FPDF_ACTION = type __PFPDF_PTRREC; FPDF_ANNOTATION = type __PFPDF_PTRREC; FPDF_ATTACHMENT = type __PFPDF_PTRREC; FPDF_AVAIL = type __PFPDF_PTRREC; FPDF_BITMAP = type __PFPDF_PTRREC; FPDF_BOOKMARK = type __PFPDF_PTRREC; FPDF_CLIPPATH = type __PFPDF_PTRREC; FPDF_DEST = type __PFPDF_PTRREC; FPDF_DOCUMENT = type __PFPDF_PTRREC; FPDF_FONT = type __PFPDF_PTRREC; FPDF_FORMHANDLE = type __PFPDF_PTRREC; FPDF_GLYPHPATH = type __PFPDF_PTRREC; FPDF_JAVASCRIPT_ACTION = type __PFPDF_PTRREC; FPDF_LINK = type __PFPDF_PTRREC; FPDF_PAGE = type __PFPDF_PTRREC; FPDF_PAGELINK = type __PFPDF_PTRREC; FPDF_PAGEOBJECT = type __PFPDF_PTRREC; // (text, path, etc.) FPDF_PAGEOBJECTMARK = type __PFPDF_PTRREC; FPDF_PAGERANGE = type __PFPDF_PTRREC; FPDF_PATHSEGMENT = type __PFPDF_PTRREC; FPDF_SCHHANDLE = type __PFPDF_PTRREC; FPDF_SIGNATURE = type __PFPDF_PTRREC; FPDF_SKIA_CANVAS = type Pointer; // Passed into Skia as an SkCanvas. FPDF_STRUCTELEMENT = type __PFPDF_PTRREC; FPDF_STRUCTELEMENT_ATTR = type __PFPDF_PTRREC; FPDF_STRUCTELEMENT_ATTR_VALUE = type __PFPDF_PTRREC; FPDF_STRUCTTREE = type __PFPDF_PTRREC; FPDF_TEXTPAGE = type __PFPDF_PTRREC; FPDF_WIDGET = type __PFPDF_PTRREC; FPDF_XOBJECT = type __PFPDF_PTRREC; // Basic data types FPDF_BOOL = Integer; FPDF_RESULT = Integer; FPDF_DWORD = LongWord; FS_FLOAT = Single; PFS_FLOAT = ^FS_FLOAT; // Duplex types FPDF_DUPLEXTYPE = ( DuplexUndefined = 0, Simplex, DuplexFlipShortEdge, DuplexFlipLongEdge ); // String types PFPDF_WCHAR = PWideChar; FPDF_WCHAR = WideChar; // The public PDFium API uses three types of strings: byte string, wide string // (UTF-16LE encoded), and platform dependent string. // Public PDFium API type for byte strings. FPDF_BYTESTRING = PAnsiChar; // The public PDFium API always uses UTF-16LE encoded wide strings, each // character uses 2 bytes (except surrogation), with the low byte first. FPDF_WIDESTRING = PFPDF_WCHAR; // Structure for persisting a string beyond the duration of a callback. // Note: although represented as a char*, string may be interpreted as // a UTF-16LE formated string. Used only by XFA callbacks. PFPDF_BSTR = ^FPDF_BSTR; FPDF_BSTR = record str: PAnsiChar; // String buffer, manipulate only with FPDF_BStr_* methods. len: Integer; // Length of the string, in bytes. end; PFPdfBStr = ^TFPdfBStr; TFPdfBStr = FPDF_BSTR; // For Windows programmers: In most cases it's OK to treat FPDF_WIDESTRING as a // Windows unicode string, however, special care needs to be taken if you // expect to process Unicode larger than 0xffff. // // For Linux/Unix programmers: most compiler/library environments use 4 bytes // for a Unicode character, and you have to convert between FPDF_WIDESTRING and // system wide string by yourself. FPDF_STRING = PAnsiChar; // Matrix for transformation, in the form [a b c d e f], equivalent to: // | a b 0 | // | c d 0 | // | e f 1 | // // Translation is performed with [1 0 0 1 tx ty]. // Scaling is performed with [sx 0 0 sy 0 0]. // See PDF Reference 1.7, 4.2.2 Common Transformations for more. PFS_MATRIX = ^FS_MATRIX; FS_MATRIX = record a: Single; b: Single; c: Single; d: Single; e: Single; f: Single; end; PFSMatrix = ^TFSMatrix; TFSMatrix = FS_MATRIX; // Rectangle area(float) in device or page coordinate system. PFS_RECTF = ^FS_RECTF; FS_RECTF = record // The x-coordinate of the left-top corner. left: Single; // The y-coordinate of the left-top corner. top: Single; // The x-coordinate of the right-bottom corner. right: Single; // The y-coordinate of the right-bottom corner. bottom: Single; end; // Const Pointer to FS_RECTF structure. FS_LPCRECTF = ^FS_RECTF; PFSRectF = ^TFSRectF; TFSRectF = FS_RECTF; // Rectangle size. Coordinate system agnostic. PFS_SIZEF = ^FS_SIZEF; FS_SIZEF = record width: Single; height: Single; end; PFSSizeF = ^TFSSizeF; TFSSizeF = FS_SIZEF; // Const Pointer to FS_SIZEF structure. PFS_POINTF = ^FS_POINTF; FS_POINTF = record x: Single; y: Single; end; PFSPointF = ^TFSPointF; TFSPointF = FS_POINTF; // Const Pointer to FS_POINTF structure. FS_LPCPOINTF = ^FS_POINTF; PFS_QUADPOINTSF = ^FS_QUADPOINTSF; FS_QUADPOINTSF = record x1: FS_FLOAT; y1: FS_FLOAT; x2: FS_FLOAT; y2: FS_FLOAT; x3: FS_FLOAT; y3: FS_FLOAT; x4: FS_FLOAT; y4: FS_FLOAT; end; PFSQuadPointsF = ^TFSQuadPointsF; TFSQuadPointsF = FS_QUADPOINTSF; // Annotation enums. FPDF_ANNOTATION_SUBTYPE = Integer; PFPDF_ANNOTATION_SUBTYPE = ^FPDF_ANNOTATION_SUBTYPE; FPDF_ANNOT_APPEARANCEMODE = Integer; // Dictionary value types. FPDF_OBJECT_TYPE = Integer; // PDF renderer types - Experimental. // Selection of 2D graphics library to use for rendering to FPDF_BITMAPs. type FPDF_RENDERER_TYPE = Integer; const // Anti-Grain Geometry - https://sourceforge.net/projects/agg/ FPDF_RENDERERTYPE_AGG = 0; // Skia - https://skia.org/ FPDF_RENDERERTYPE_SKIA = 1; type // Process-wide options for initializing the library. PFPDF_LIBRARY_CONFIG = ^FPDF_LIBRARY_CONFIG; FPDF_LIBRARY_CONFIG = record // Version number of the interface. Currently must be 2. // Support for version 1 will be deprecated in the future. version: Integer; // Array of paths to scan in place of the defaults when using built-in // FXGE font loading code. The array is terminated by a NULL pointer. // The Array may be NULL itself to use the default paths. May be ignored // entirely depending upon the platform. m_pUserFontPaths: PPAnsiChar; // Version 2. // Pointer to the v8::Isolate to use, or NULL to force PDFium to create one. m_pIsolate: Pointer; // The embedder data slot to use in the v8::Isolate to store PDFium's // per-isolate data. The value needs to be in the range // [0, |v8::Internals::kNumIsolateDataLots|). Note that 0 is fine for most // embedders. m_v8EmbedderSlot: Cardinal; // Version 3 - Experimental. // Pointer to the V8::Platform to use. m_pPlatform: Pointer; // Version 4 - Experimental. // Explicit specification of core renderer to use. |m_RendererType| must be // a valid value for |FPDF_LIBRARY_CONFIG| versions of this level or higher, // or else the initialization will fail with an immediate crash. // Note that use of a specified |FPDF_RENDERER_TYPE| value for which the // corresponding render library is not included in the build will similarly // fail with an immediate crash. m_RendererType: FPDF_RENDERER_TYPE; end; PFPdfLibraryConfig = ^TFPdfLibraryConfig; TFPdfLibraryConfig = FPDF_LIBRARY_CONFIG; // Function: FPDF_InitLibraryWithConfig // Initialize the PDFium library and allocate global resources for it. // Parameters: // config - configuration information as above. // Return value: // None. // Comments: // You have to call this function before you can call any PDF // processing functions. var FPDF_InitLibraryWithConfig: procedure(config: PFPDF_LIBRARY_CONFIG); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_InitLibrary // Initialize the PDFium library (alternative form). // Parameters: // None // Return value: // None. // Comments: // Convenience function to call FPDF_InitLibraryWithConfig() with a // default configuration for backwards compatibility purposes. New // code should call FPDF_InitLibraryWithConfig() instead. This will // be deprecated in the future. var FPDF_InitLibrary: procedure(); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_DestroyLibary // Release global resources allocated to the PDFium library by // FPDF_InitLibrary() or FPDF_InitLibraryWithConfig(). // Parameters: // None. // Return value: // None. // Comments: // After this function is called, you must not call any PDF // processing functions. // // Calling this function does not automatically close other // objects. It is recommended to close other objects before // closing the library with this function. var FPDF_DestroyLibrary: procedure(); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Policy for accessing the local machine time. const FPDF_POLICY_MACHINETIME_ACCESS = 0; // Function: FPDF_SetSandBoxPolicy // Set the policy for the sandbox environment. // Parameters: // policy - The specified policy for setting, for example: // FPDF_POLICY_MACHINETIME_ACCESS. // enable - True to enable, false to disable the policy. // Return value: // None. var FPDF_SetSandBoxPolicy: procedure(policy: FPDF_DWORD; enable: FPDF_BOOL); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; {$IFDEF MSWINDOWS} // Experimental API. // Function: FPDF_SetPrintMode // Set printing mode when printing on Windows. // Parameters: // mode - FPDF_PRINTMODE_EMF to output EMF (default) // FPDF_PRINTMODE_TEXTONLY to output text only (for charstream // devices) // FPDF_PRINTMODE_POSTSCRIPT2 to output level 2 PostScript into // EMF as a series of GDI comments. // FPDF_PRINTMODE_POSTSCRIPT3 to output level 3 PostScript into // EMF as a series of GDI comments. // FPDF_PRINTMODE_POSTSCRIPT2_PASSTHROUGH to output level 2 // PostScript via ExtEscape() in PASSTHROUGH mode. // FPDF_PRINTMODE_POSTSCRIPT3_PASSTHROUGH to output level 3 // PostScript via ExtEscape() in PASSTHROUGH mode. // FPDF_PRINTMODE_EMF_IMAGE_MASKS to output EMF, with more // efficient processing of documents containing image masks. // FPDF_PRINTMODE_POSTSCRIPT3_TYPE42 to output level 3 // PostScript with embedded Type 42 fonts, when applicable, into // EMF as a series of GDI comments. // FPDF_PRINTMODE_POSTSCRIPT3_TYPE42_PASSTHROUGH to output level // 3 PostScript with embedded Type 42 fonts, when applicable, // via ExtEscape() in PASSTHROUGH mode. // Return value: // True if successful, false if unsuccessful (typically invalid input). var FPDF_SetPrintMode: function(mode: Integer): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; {$ENDIF MSWINDOWS} // Function: FPDF_LoadDocument // Open and load a PDF document. // Parameters: // file_path - Path to the PDF file (including extension). // password - A string used as the password for the PDF file. // If no password is needed, empty or NULL can be used. // See comments below regarding the encoding. // Return value: // A handle to the loaded document, or NULL on failure. // Comments: // Loaded document can be closed by FPDF_CloseDocument(). // If this function fails, you can use FPDF_GetLastError() to retrieve // the reason why it failed. // // The encoding for |file_path| is UTF-8. // // The encoding for |password| can be either UTF-8 or Latin-1. PDFs, // depending on the security handler revision, will only accept one or // the other encoding. If |password|'s encoding and the PDF's expected // encoding do not match, FPDF_LoadDocument() will automatically // convert |password| to the other encoding. var FPDF_LoadDocument: function(file_path: FPDF_STRING; password: FPDF_BYTESTRING): FPDF_DOCUMENT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_LoadMemDocument // Open and load a PDF document from memory. // Parameters: // data_buf - Pointer to a buffer containing the PDF document. // size - Number of bytes in the PDF document. // password - A string used as the password for the PDF file. // If no password is needed, empty or NULL can be used. // Return value: // A handle to the loaded document, or NULL on failure. // Comments: // The memory buffer must remain valid when the document is open. // The loaded document can be closed by FPDF_CloseDocument. // If this function fails, you can use FPDF_GetLastError() to retrieve // the reason why it failed. // // See the comments for FPDF_LoadDocument() regarding the encoding for // |password|. // Notes: // If PDFium is built with the XFA module, the application should call // FPDF_LoadXFA() function after the PDF document loaded to support XFA // fields defined in the fpdfformfill.h file. var FPDF_LoadMemDocument: function(data_buf: Pointer; size: Integer; password: FPDF_BYTESTRING): FPDF_DOCUMENT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_LoadMemDocument64 // Open and load a PDF document from memory. // Parameters: // data_buf - Pointer to a buffer containing the PDF document. // size - Number of bytes in the PDF document. // password - A string used as the password for the PDF file. // If no password is needed, empty or NULL can be used. // Return value: // A handle to the loaded document, or NULL on failure. // Comments: // The memory buffer must remain valid when the document is open. // The loaded document can be closed by FPDF_CloseDocument. // If this function fails, you can use FPDF_GetLastError() to retrieve // the reason why it failed. // // See the comments for FPDF_LoadDocument() regarding the encoding for // |password|. // Notes: // If PDFium is built with the XFA module, the application should call // FPDF_LoadXFA() function after the PDF document loaded to support XFA // fields defined in the fpdfformfill.h file. var FPDF_LoadMemDocument64: function(data_buf: Pointer; size: SIZE_T; password: FPDF_BYTESTRING): FPDF_DOCUMENT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Structure for custom file access. type PFPDF_FILEACCESS = ^FPDF_FILEACCESS; FPDF_FILEACCESS = record // File length, in bytes. m_FileLen: LongWord; // A function pointer for getting a block of data from a specific position. // Position is specified by byte offset from the beginning of the file. // The pointer to the buffer is never NULL and the size is never 0. // The position and size will never go out of range of the file length. // It may be possible for PDFium to call this function multiple times for // the same position. // Return value: should be non-zero if successful, zero for error. m_GetBlock: function(param: Pointer; position: LongWord; pBuf: PByte; size: LongWord): Integer; cdecl; // A custom pointer for all implementation specific data. This pointer will // be used as the first parameter to the m_GetBlock callback. m_Param: Pointer; end; PFPdfFileAccess = ^TFPdfFileAccess; TFPdfFileAccess = FPDF_FILEACCESS; // Structure for file reading or writing (I/O). // // Note: This is a handler and should be implemented by callers, // and is only used from XFA. PFPDF_FILEHANDLER = ^FPDF_FILEHANDLER; FPDF_FILEHANDLER = record // User-defined data. // Note: Callers can use this field to track controls. clientData: Pointer; // Callback function to release the current file stream object. // // Parameters: // clientData - Pointer to user-defined data. // Returns: // None. Release: procedure(clientData: Pointer); cdecl; // Callback function to retrieve the current file stream size. // // Parameters: // clientData - Pointer to user-defined data. // Returns: // Size of file stream. GetSize: function(clientData: Pointer): FPDF_DWORD; cdecl; // Callback function to read data from the current file stream. // // Parameters: // clientData - Pointer to user-defined data. // offset - Offset position starts from the beginning of file // stream. This parameter indicates reading position. // buffer - Memory buffer to store data which are read from // file stream. This parameter should not be NULL. // size - Size of data which should be read from file stream, // in bytes. The buffer indicated by |buffer| must be // large enough to store specified data. // Returns: // 0 for success, other value for failure. ReadBlock: function(clientData: Pointer; offset: FPDF_DWORD; buffer: Pointer; size: FPDF_DWORD): FPDF_RESULT; cdecl; // Callback function to write data into the current file stream. // // Parameters: // clientData - Pointer to user-defined data. // offset - Offset position starts from the beginning of file // stream. This parameter indicates writing position. // buffer - Memory buffer contains data which is written into // file stream. This parameter should not be NULL. // size - Size of data which should be written into file // stream, in bytes. // Returns: // 0 for success, other value for failure. WriteBlock: function(clientData: Pointer; offset: FPDF_DWORD; const buffer: Pointer; size: FPDF_DWORD): FPDF_RESULT; cdecl; // Callback function to flush all internal accessing buffers. // // Parameters: // clientData - Pointer to user-defined data. // Returns: // 0 for success, other value for failure. Flush: function(clientData: Pointer): FPDF_RESULT; cdecl; // Callback function to change file size. // // Description: // This function is called under writing mode usually. Implementer // can determine whether to realize it based on application requests. // Parameters: // clientData - Pointer to user-defined data. // size - New size of file stream, in bytes. // Returns: // 0 for success, other value for failure. Truncate: function(clientData: Pointer; size: FPDF_DWORD): FPDF_RESULT; cdecl; end; PFPdfFileHandler = ^TFPdfFileHandler; TFPdfFileHandler = FPDF_FILEHANDLER; // Function: FPDF_LoadCustomDocument // Load PDF document from a custom access descriptor. // Parameters: // pFileAccess - A structure for accessing the file. // password - Optional password for decrypting the PDF file. // Return value: // A handle to the loaded document, or NULL on failure. // Comments: // The application must keep the file resources |pFileAccess| points to // valid until the returned FPDF_DOCUMENT is closed. |pFileAccess| // itself does not need to outlive the FPDF_DOCUMENT. // // The loaded document can be closed with FPDF_CloseDocument(). // // See the comments for FPDF_LoadDocument() regarding the encoding for // |password|. // Notes: // If PDFium is built with the XFA module, the application should call // FPDF_LoadXFA() function after the PDF document loaded to support XFA // fields defined in the fpdfformfill.h file. var FPDF_LoadCustomDocument: function(pFileAccess: PFPDF_FILEACCESS; password: FPDF_BYTESTRING): FPDF_DOCUMENT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_GetFileVersion // Get the file version of the given PDF document. // Parameters: // doc - Handle to a document. // fileVersion - The PDF file version. File version: 14 for 1.4, 15 for 1.5, ... // Return value: // True if succeeds, false otherwise. // Comments: // If the document was created by FPDF_CreateNewDocument, // then this function will always fail. var FPDF_GetFileVersion: function(doc: FPDF_DOCUMENT; var fileVersion: Integer): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; const FPDF_ERR_SUCCESS = 0; // No error. FPDF_ERR_UNKNOWN = 1; // Unknown error. FPDF_ERR_FILE = 2; // File not found or could not be opened. FPDF_ERR_FORMAT = 3; // File not in PDF format or corrupted. FPDF_ERR_PASSWORD = 4; // Password required or incorrect password. FPDF_ERR_SECURITY = 5; // Unsupported security scheme. FPDF_ERR_PAGE = 6; // Page not found or content error. {$IFDEF PDF_ENABLE_XFA} FPDF_ERR_XFALOAD = 7; // Load XFA error. FPDF_ERR_XFALAYOUT = 8; // Layout XFA error. {$ENDIF PDF_ENABLE_XFA} // Function: FPDF_GetLastError // Get last error code when a function fails. // Parameters: // None. // Return value: // A 32-bit integer indicating error code as defined above. // Comments: // If the previous SDK call succeeded, the return value of this // function is not defined. This function only works in conjunction // with APIs that mention FPDF_GetLastError() in their documentation. var FPDF_GetLastError: function(): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_DocumentHasValidCrossReferenceTable // Whether the document's cross reference table is valid or not. // Parameters: // document - Handle to a document. Returned by FPDF_LoadDocument. // Return value: // True if the PDF parser did not encounter problems parsing the cross // reference table. False if the parser could not parse the cross // reference table and the table had to be rebuild from other data // within the document. // Comments: // The return value can change over time as the PDF parser evolves. var FPDF_DocumentHasValidCrossReferenceTable: function(document: FPDF_DOCUMENT): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_GetTrailerEnds // Get the byte offsets of trailer ends. // Parameters: // document - Handle to document. Returned by FPDF_LoadDocument(). // buffer - The address of a buffer that receives the // byte offsets. // length - The size, in ints, of |buffer|. // Return value: // Returns the number of ints in the buffer on success, 0 on error. // // |buffer| is an array of integers that describes the exact byte offsets of the // trailer ends in the document. If |length| is less than the returned length, // or |document| or |buffer| is NULL, |buffer| will not be modified. var FPDF_GetTrailerEnds: function(document: FPDF_DOCUMENT; buffer: PUINT; length: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_GetDocPermissions // Get file permission flags of the document. // Parameters: // document - Handle to a document. Returned by FPDF_LoadDocument. // Return value: // A 32-bit integer indicating permission flags. Please refer to the // PDF Reference for detailed descriptions. If the document is not // protected or was unlocked by the owner, 0xffffffff will be returned. var FPDF_GetDocPermissions: function(document: FPDF_DOCUMENT): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_GetDocUserPermissions // Get user file permission flags of the document. // Parameters: // document - Handle to a document. Returned by FPDF_LoadDocument. // Return value: // A 32-bit integer indicating permission flags. Please refer to the // PDF Reference for detailed descriptions. If the document is not // protected, 0xffffffff will be returned. Always returns user // permissions, even if the document was unlocked by the owner. var FPDF_GetDocUserPermissions: function(document: FPDF_DOCUMENT): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_GetSecurityHandlerRevision // Get the revision for the security handler. // Parameters: // document - Handle to a document. Returned by FPDF_LoadDocument. // Return value: // The security handler revision number. Please refer to the PDF // Reference for a detailed description. If the document is not // protected, -1 will be returned. var FPDF_GetSecurityHandlerRevision: function(document: FPDF_DOCUMENT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_GetPageCount // Get total number of pages in the document. // Parameters: // document - Handle to document. Returned by FPDF_LoadDocument. // Return value: // Total number of pages in the document. var FPDF_GetPageCount: function(document: FPDF_DOCUMENT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_LoadPage // Load a page inside the document. // Parameters: // document - Handle to document. Returned by FPDF_LoadDocument // page_index - Index number of the page. 0 for the first page. // Return value: // A handle to the loaded page, or NULL if page load fails. // Comments: // The loaded page can be rendered to devices using FPDF_RenderPage. // The loaded page can be closed using FPDF_ClosePage. var FPDF_LoadPage: function(document: FPDF_DOCUMENT; page_index: Integer): FPDF_PAGE; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API // Function: FPDF_GetPageWidthF // Get page width. // Parameters: // page - Handle to the page. Returned by FPDF_LoadPage(). // Return value: // Page width (excluding non-displayable area) measured in points. // One point is 1/72 inch (around 0.3528 mm). var FPDF_GetPageWidthF: function(page: FPDF_PAGE): Single; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_GetPageWidth // Get page width. // Parameters: // page - Handle to the page. Returned by FPDF_LoadPage. // Return value: // Page width (excluding non-displayable area) measured in points. // One point is 1/72 inch (around 0.3528 mm). // Note: // Prefer FPDF_GetPageWidthF() above. This will be deprecated in the // future. var FPDF_GetPageWidth: function(page: FPDF_PAGE): Double; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API // Function: FPDF_GetPageHeightF // Get page height. // Parameters: // page - Handle to the page. Returned by FPDF_LoadPage(). // Return value: // Page height (excluding non-displayable area) measured in points. // One point is 1/72 inch (around 0.3528 mm) var FPDF_GetPageHeightF: function(page: FPDF_PAGE): Single; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_GetPageHeight // Get page height. // Parameters: // page - Handle to the page. Returned by FPDF_LoadPage. // Return value: // Page height (excluding non-displayable area) measured in points. // One point is 1/72 inch (around 0.3528 mm) // Note: // Prefer FPDF_GetPageHeightF() above. This will be deprecated in the // future. var FPDF_GetPageHeight: function(page: FPDF_PAGE): Double; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_GetPageBoundingBox // Get the bounding box of the page. This is the intersection between // its media box and its crop box. // Parameters: // page - Handle to the page. Returned by FPDF_LoadPage. // rect - Pointer to a rect to receive the page bounding box. // On an error, |rect| won't be filled. // Return value: // True for success. var FPDF_GetPageBoundingBox: function(page: FPDF_PAGE; rect: PFS_RECTF): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_GetPageSizeByIndexF // Get the size of the page at the given index. // Parameters: // document - Handle to document. Returned by FPDF_LoadDocument(). // page_index - Page index, zero for the first page. // size - Pointer to a FS_SIZEF to receive the page size. // (in points). // Return value: // Non-zero for success. 0 for error (document or page not found). var FPDF_GetPageSizeByIndexF: function(document: FPDF_DOCUMENT; page_index: Integer; size: PFS_SIZEF): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_GetPageSizeByIndex // Get the size of the page at the given index. // Parameters: // document - Handle to document. Returned by FPDF_LoadDocument. // page_index - Page index, zero for the first page. // width - Pointer to a double to receive the page width // (in points). // height - Pointer to a double to receive the page height // (in points). // Return value: // Non-zero for success. 0 for error (document or page not found). // Note: // Prefer FPDF_GetPageSizeByIndexF() above. This will be deprecated in // the future. var FPDF_GetPageSizeByIndex: function(document: FPDF_DOCUMENT; page_index: Integer; var width, height: Double): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Page rendering flags. They can be combined with bit-wise OR. const FPDF_ANNOT = $01; // Set if annotations are to be rendered. FPDF_LCD_TEXT = $02; // Set if using text rendering optimized for LCD display. This flag will only take effect if anti-aliasing is enabled for text. FPDF_NO_NATIVETEXT = $04; // Don't use the native text output available on some platforms FPDF_GRAYSCALE = $08 deprecated; // Obsolete, has no effect, retained for compatibility. FPDF_DEBUG_INFO = $80 deprecated; // Obsolete, has no effect, retained for compatibility. FPDF_NO_CATCH = $100; // Set if you don't want to catch exceptions. FPDF_RENDER_LIMITEDIMAGECACHE = $200; // Limit image cache size. FPDF_RENDER_FORCEHALFTONE = $400; // Always use halftone for image stretching. FPDF_PRINTING = $800; // Render for printing. FPDF_RENDER_NO_SMOOTHTEXT = $1000; // Set to disable anti-aliasing on text. This flag will also disable LCD optimization for text rendering. FPDF_RENDER_NO_SMOOTHIMAGE = $2000; // Set to disable anti-aliasing on images. FPDF_RENDER_NO_SMOOTHPATH = $4000; // Set to disable anti-aliasing on paths. // Set whether to render in a reverse Byte order, this flag is only used when // rendering to a bitmap. FPDF_REVERSE_BYTE_ORDER = $10; // Set whether fill paths need to be stroked. This flag is only used when // FPDF_COLORSCHEME is passed in, since with a single fill color for paths the // boundaries of adjacent fill paths are less visible. FPDF_CONVERT_FILL_TO_STROKE = $20; type // Struct for color scheme. // Each should be a 32-bit value specifying the color, in 8888 ARGB format. PFPDF_COLORSCHEME = ^FPDF_COLORSCHEME; FPDF_COLORSCHEME = record path_fill_color: FPDF_DWORD; path_stroke_color: FPDF_DWORD; text_fill_color: FPDF_DWORD; text_stroke_color: FPDF_DWORD; end; PFPdfColorScheme = ^TFPdfColorScheme; TFPdfColorScheme = FPDF_COLORSCHEME; {$IFDEF MSWINDOWS} // Function: FPDF_RenderPage // Render contents of a page to a device (screen, bitmap, or printer). // This function is only supported on Windows. // Parameters: // dc - Handle to the device context. // page - Handle to the page. Returned by FPDF_LoadPage. // start_x - Left pixel position of the display area in // device coordinates. // start_y - Top pixel position of the display area in device // coordinates. // size_x - Horizontal size (in pixels) for displaying the page. // size_y - Vertical size (in pixels) for displaying the page. // rotate - Page orientation: // 0 (normal) // 1 (rotated 90 degrees clockwise) // 2 (rotated 180 degrees) // 3 (rotated 90 degrees counter-clockwise) // flags - 0 for normal display, or combination of flags // defined above. // Return value: // None. var FPDF_RenderPage: procedure(DC: HDC; page: FPDF_PAGE; start_x, start_y, size_x, size_y: Integer; rotate: Integer; flags: Integer); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; {$ENDIF MSWINDOWS} // Function: FPDF_RenderPageBitmap // Render contents of a page to a device independent bitmap. // Parameters: // bitmap - Handle to the device independent bitmap (as the // output buffer). The bitmap handle can be created // by FPDFBitmap_Create or retrieved from an image // object by FPDFImageObj_GetBitmap. // page - Handle to the page. Returned by FPDF_LoadPage // start_x - Left pixel position of the display area in // bitmap coordinates. // start_y - Top pixel position of the display area in bitmap // coordinates. // size_x - Horizontal size (in pixels) for displaying the page. // size_y - Vertical size (in pixels) for displaying the page. // rotate - Page orientation: // 0 (normal) // 1 (rotated 90 degrees clockwise) // 2 (rotated 180 degrees) // 3 (rotated 90 degrees counter-clockwise) // flags - 0 for normal display, or combination of the Page // Rendering flags defined above. With the FPDF_ANNOT // flag, it renders all annotations that do not require // user-interaction, which are all annotations except // widget and popup annotations. // Return value: // None. var FPDF_RenderPageBitmap: procedure(bitmap: FPDF_BITMAP; page: FPDF_PAGE; start_x, start_y, size_x, size_y: Integer; rotate: Integer; flags: Integer); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_RenderPageBitmapWithMatrix // Render contents of a page to a device independent bitmap. // Parameters: // bitmap - Handle to the device independent bitmap (as the // output buffer). The bitmap handle can be created // by FPDFBitmap_Create or retrieved by // FPDFImageObj_GetBitmap. // page - Handle to the page. Returned by FPDF_LoadPage. // matrix - The transform matrix, which must be invertible. // See PDF Reference 1.7, 4.2.2 Common Transformations. // clipping - The rect to clip to in device coords. // flags - 0 for normal display, or combination of the Page // Rendering flags defined above. With the FPDF_ANNOT // flag, it renders all annotations that do not require // user-interaction, which are all annotations except // widget and popup annotations. // Return value: // None. Note that behavior is undefined if det of |matrix| is 0. var FPDF_RenderPageBitmapWithMatrix: procedure(bitmap: FPDF_BITMAP; page: FPDF_PAGE; matrix: PFS_MATRIX; clipping: PFS_RECTF; flags: Integer); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; {$IFDEF PDF_USE_SKIA} // Function: FPDF_RenderPageSkia // Render contents of a page to a Skia SkCanvas. // Parameters: // canvas - SkCanvas to render to. // page - Handle to the page. // size_x - Horizontal size (in pixels) for displaying the page. // size_y - Vertical size (in pixels) for displaying the page. // Return value: // None. var FPDF_RenderPageSkia: procedure(canvas: FPDF_SKIA_CANVAS; page: FPDF_PAGE; size_x, size_y: Integer); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; {$ENDIF PDF_USE_SKIA} // Function: FPDF_ClosePage // Close a loaded PDF page. // Parameters: // page - Handle to the loaded page. // Return value: // None. var FPDF_ClosePage: procedure(page: FPDF_PAGE); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_CloseDocument // Close a loaded PDF document. // Parameters: // document - Handle to the loaded document. // Return value: // None. var FPDF_CloseDocument: procedure(document: FPDF_DOCUMENT); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_DeviceToPage // Convert the screen coordinates of a point to page coordinates. // Parameters: // page - Handle to the page. Returned by FPDF_LoadPage. // start_x - Left pixel position of the display area in // device coordinates. // start_y - Top pixel position of the display area in device // coordinates. // size_x - Horizontal size (in pixels) for displaying the page. // size_y - Vertical size (in pixels) for displaying the page. // rotate - Page orientation: // 0 (normal) // 1 (rotated 90 degrees clockwise) // 2 (rotated 180 degrees) // 3 (rotated 90 degrees counter-clockwise) // device_x - X value in device coordinates to be converted. // device_y - Y value in device coordinates to be converted. // page_x - A pointer to a double receiving the converted X // value in page coordinates. // page_y - A pointer to a double receiving the converted Y // value in page coordinates. // Return value: // Returns true if the conversion succeeds, and |page_x| and |page_y| // successfully receives the converted coordinates. // Comments: // The page coordinate system has its origin at the left-bottom corner // of the page, with the X-axis on the bottom going to the right, and // the Y-axis on the left side going up. // // NOTE: this coordinate system can be altered when you zoom, scroll, // or rotate a page, however, a point on the page should always have // the same coordinate values in the page coordinate system. // // The device coordinate system is device dependent. For screen device, // its origin is at the left-top corner of the window. However this // origin can be altered by the Windows coordinate transformation // utilities. // // You must make sure the start_x, start_y, size_x, size_y // and rotate parameters have exactly same values as you used in // the FPDF_RenderPage() function call. var FPDF_DeviceToPage: procedure(page: FPDF_PAGE; start_x, start_y, size_x, size_y: Integer; rotate: Integer; device_x, device_y: Integer; var page_x, page_y: Double); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_PageToDevice // Convert the page coordinates of a point to screen coordinates. // Parameters: // page - Handle to the page. Returned by FPDF_LoadPage. // start_x - Left pixel position of the display area in // device coordinates. // start_y - Top pixel position of the display area in device // coordinates. // size_x - Horizontal size (in pixels) for displaying the page. // size_y - Vertical size (in pixels) for displaying the page. // rotate - Page orientation: // 0 (normal) // 1 (rotated 90 degrees clockwise) // 2 (rotated 180 degrees) // 3 (rotated 90 degrees counter-clockwise) // page_x - X value in page coordinates. // page_y - Y value in page coordinate. // device_x - A pointer to an integer receiving the result X // value in device coordinates. // device_y - A pointer to an integer receiving the result Y // value in device coordinates. // Return value: // Returns true if the conversion succeeds, and |device_x| and // |device_y| successfully receives the converted coordinates. // Comments: // See comments for FPDF_DeviceToPage(). var FPDF_PageToDevice: procedure(page: FPDF_PAGE; start_x, start_y, size_x, size_y: Integer; rotate: Integer; page_x, page_y: Double; var device_x, device_y: Integer); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFBitmap_Create // Create a device independent bitmap (FXDIB). // Parameters: // width - The number of pixels in width for the bitmap. // Must be greater than 0. // height - The number of pixels in height for the bitmap. // Must be greater than 0. // alpha - A flag indicating whether the alpha channel is used. // Non-zero for using alpha, zero for not using. // Return value: // The created bitmap handle, or NULL if a parameter error or out of // memory. // Comments: // The bitmap always uses 4 bytes per pixel. The first byte is always // double word aligned. // // The byte order is BGRx (the last byte unused if no alpha channel) or // BGRA. // // The pixels in a horizontal line are stored side by side, with the // left most pixel stored first (with lower memory address). // Each line uses width * 4 bytes. // // Lines are stored one after another, with the top most line stored // first. There is no gap between adjacent lines. // // This function allocates enough memory for holding all pixels in the // bitmap, but it doesn't initialize the buffer. Applications can use // FPDFBitmap_FillRect() to fill the bitmap using any color. If the OS // allows it, this function can allocate up to 4 GB of memory. FPDFBitmap_Create: function(width, height: Integer; alpha: Integer): FPDF_BITMAP; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; const // More DIB formats FPDFBitmap_Unknown = 0; // Unknown or unsupported format. FPDFBitmap_Gray = 1; // Gray scale bitmap, one byte per pixel. FPDFBitmap_BGR = 2; // 3 bytes per pixel, byte order: blue, green, red. FPDFBitmap_BGRx = 3; // 4 bytes per pixel, byte order: blue, green, red, unused. FPDFBitmap_BGRA = 4; // 4 bytes per pixel, byte order: blue, green, red, alpha. // Function: FPDFBitmap_CreateEx // Create a device independent bitmap (FXDIB) // Parameters: // width - The number of pixels in width for the bitmap. // Must be greater than 0. // height - The number of pixels in height for the bitmap. // Must be greater than 0. // format - A number indicating for bitmap format, as defined // above. // first_scan - A pointer to the first byte of the first line if // using an external buffer. If this parameter is NULL, // then the a new buffer will be created. // then a new buffer will be created. // stride - Number of bytes for each scan line. The value must // be 0 or greater. When the value is 0, // FPDFBitmap_CreateEx() will automatically calculate // the appropriate value using |width| and |format|. // When using an external buffer, it is recommended for // the caller to pass in the value. // When not using an external buffer, it is recommended // for the caller to pass in 0. // Return value: // The bitmap handle, or NULL if parameter error or out of memory. // Comments: // Similar to FPDFBitmap_Create function, but allows for more formats // and an external buffer is supported. The bitmap created by this // function can be used in any place that a FPDF_BITMAP handle is // required. // // If an external buffer is used, then the caller should destroy the // buffer. FPDFBitmap_Destroy() will not destroy the buffer. // // It is recommended to use FPDFBitmap_GetStride() to get the stride // value. var FPDFBitmap_CreateEx: function(width, height: Integer; format: Integer; first_scan: Pointer; stride: Integer): FPDF_BITMAP; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFBitmap_GetFormat // Get the format of the bitmap. // Parameters: // bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create // or FPDFImageObj_GetBitmap. // Return value: // The format of the bitmap. // Comments: // Only formats supported by FPDFBitmap_CreateEx are supported by this // function; see the list of such formats above. var FPDFBitmap_GetFormat: function(bitmap: FPDF_BITMAP): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFBitmap_FillRect // Fill a rectangle in a bitmap. // Parameters: // bitmap - The handle to the bitmap. Returned by // FPDFBitmap_Create. // left - The left position. Starting from 0 at the // left-most pixel. // top - The top position. Starting from 0 at the // top-most line. // width - Width in pixels to be filled. // height - Height in pixels to be filled. // color - A 32-bit value specifing the color, in 8888 ARGB // format. // Return value: // None. // Comments: // This function sets the color and (optionally) alpha value in the // specified region of the bitmap. // // NOTE: If the alpha channel is used, this function does NOT // composite the background with the source color, instead the // background will be replaced by the source color and the alpha. // // If the alpha channel is not used, the alpha parameter is ignored. var FPDFBitmap_FillRect: procedure(bitmap: FPDF_BITMAP; left, top, width, height: Integer; color: FPDF_DWORD); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFBitmap_GetBuffer // Get data buffer of a bitmap. // Parameters: // bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create // or FPDFImageObj_GetBitmap. // Return value: // The pointer to the first byte of the bitmap buffer. // Comments: // The stride may be more than width * number of bytes per pixel // // Applications can use this function to get the bitmap buffer pointer, // then manipulate any color and/or alpha values for any pixels in the // bitmap. // // Use FPDFBitmap_GetFormat() to find out the format of the data. var FPDFBitmap_GetBuffer: function(bitmap: FPDF_BITMAP): Pointer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFBitmap_GetWidth // Get width of a bitmap. // Parameters: // bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create // or FPDFImageObj_GetBitmap. // Return value: // The width of the bitmap in pixels. var FPDFBitmap_GetWidth: function(bitmap: FPDF_BITMAP): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFBitmap_GetHeight // Get height of a bitmap. // Parameters: // bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create // or FPDFImageObj_GetBitmap. // Return value: // The height of the bitmap in pixels. var FPDFBitmap_GetHeight: function(bitmap: FPDF_BITMAP): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFBitmap_GetStride // Get number of bytes for each line in the bitmap buffer. // Parameters: // bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create // or FPDFImageObj_GetBitmap. // Return value: // The number of bytes for each line in the bitmap buffer. // Comments: // The stride may be more than width * number of bytes per pixel. var FPDFBitmap_GetStride: function(bitmap: FPDF_BITMAP): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFBitmap_Destroy // Destroy a bitmap and release all related buffers. // Parameters: // bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create // or FPDFImageObj_GetBitmap. // Return value: // None. // Comments: // This function will not destroy any external buffers provided when // the bitmap was created. var FPDFBitmap_Destroy: procedure(bitmap: FPDF_BITMAP); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_VIEWERREF_GetPrintScaling // Whether the PDF document prefers to be scaled or not. // Parameters: // document - Handle to the loaded document. // Return value: // None. var FPDF_VIEWERREF_GetPrintScaling: function(document: FPDF_DOCUMENT): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_VIEWERREF_GetNumCopies // Returns the number of copies to be printed. // Parameters: // document - Handle to the loaded document. // Return value: // The number of copies to be printed. var FPDF_VIEWERREF_GetNumCopies: function(document: FPDF_DOCUMENT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_VIEWERREF_GetPrintPageRange // Page numbers to initialize print dialog box when file is printed. // Parameters: // document - Handle to the loaded document. // Return value: // The print page range to be used for printing. var FPDF_VIEWERREF_GetPrintPageRange: function(document: FPDF_DOCUMENT): FPDF_PAGERANGE; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_VIEWERREF_GetPrintPageRangeCount // Returns the number of elements in a FPDF_PAGERANGE. // Parameters: // pagerange - Handle to the page range. // Return value: // The number of elements in the page range. Returns 0 on error. var FPDF_VIEWERREF_GetPrintPageRangeCount: function(pagerange: FPDF_PAGERANGE): SIZE_T; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_VIEWERREF_GetPrintPageRangeElement // Returns an element from a FPDF_PAGERANGE. // Parameters: // pagerange - Handle to the page range. // index - Index of the element. // Return value: // The value of the element in the page range at a given index. // Returns -1 on error. var FPDF_VIEWERREF_GetPrintPageRangeElement: function(pagerange: FPDF_PAGERANGE; index: SIZE_T): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_VIEWERREF_GetDuplex // Returns the paper handling option to be used when printing from // the print dialog. // Parameters: // document - Handle to the loaded document. // Return value: // The paper handling option to be used when printing. var FPDF_VIEWERREF_GetDuplex: function(document: FPDF_DOCUMENT): FPDF_DUPLEXTYPE; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_VIEWERREF_GetName // Gets the contents for a viewer ref, with a given key. The value must // be of type "name". // Parameters: // document - Handle to the loaded document. // key - Name of the key in the viewer pref dictionary, // encoded in UTF-8. // buffer - Caller-allocate buffer to receive the key, or NULL // - to query the required length. // length - Length of the buffer. // Return value: // The number of bytes in the contents, including the NULL terminator. // Thus if the return value is 0, then that indicates an error, such // as when |document| is invalid or |buffer| is NULL. If |length| is // as when |document| is invalid. If |length| is less than the required // length, or |buffer| is NULL, |buffer| will not be modified. var FPDF_VIEWERREF_GetName: function(document: FPDF_DOCUMENT; key: FPDF_BYTESTRING; buffer: PAnsiChar; length: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_CountNamedDests // Get the count of named destinations in the PDF document. // Parameters: // document - Handle to a document // Return value: // The count of named destinations. var FPDF_CountNamedDests: function(document: FPDF_DOCUMENT): FPDF_DWORD; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_GetNamedDestByName // Get a the destination handle for the given name. // Parameters: // document - Handle to the loaded document. // name - The name of a destination. // Return value: // The handle to the destination. var FPDF_GetNamedDestByName: function(document: FPDF_DOCUMENT; name: FPDF_BYTESTRING): FPDF_DEST; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_GetNamedDest // Get the named destination by index. // Parameters: // document - Handle to a document // index - The index of a named destination. // buffer - The buffer to store the destination name, // used as wchar_t*. // buflen [in/out] - Size of the buffer in bytes on input, // length of the result in bytes on output // or -1 if the buffer is too small. // Return value: // The destination handle for a given index, or NULL if there is no // named destination corresponding to |index|. // Comments: // Call this function twice to get the name of the named destination: // 1) First time pass in |buffer| as NULL and get buflen. // 2) Second time pass in allocated |buffer| and buflen to retrieve // |buffer|, which should be used as wchar_t*. // // If buflen is not sufficiently large, it will be set to -1 upon // return. var FPDF_GetNamedDest: function(document: FPDF_DOCUMENT; index: Integer; buffer: Pointer; var buflen: LongWord): FPDF_DEST; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_GetXFAPacketCount // Get the number of valid packets in the XFA entry. // Parameters: // document - Handle to the document. // Return value: // The number of valid packets, or -1 on error. var FPDF_GetXFAPacketCount: function(document: FPDF_DOCUMENT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_GetXFAPacketName // Get the name of a packet in the XFA array. // Parameters: // document - Handle to the document. // index - Index number of the packet. 0 for the first packet. // buffer - Buffer for holding the name of the XFA packet. // buflen - Length of |buffer| in bytes. // Return value: // The length of the packet name in bytes, or 0 on error. // // |document| must be valid and |index| must be in the range [0, N), where N is // the value returned by FPDF_GetXFAPacketCount(). // |buffer| is only modified if it is non-NULL and |buflen| is greater than or // equal to the length of the packet name. The packet name includes a // terminating NUL character. |buffer| is unmodified on error. var FPDF_GetXFAPacketName: function(document: FPDF_DOCUMENT; index: Integer; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_GetXFAPacketContent // Get the content of a packet in the XFA array. // Parameters: // document - Handle to the document. // index - Index number of the packet. 0 for the first packet. // buffer - Buffer for holding the content of the XFA packet. // buflen - Length of |buffer| in bytes. // out_buflen - Pointer to the variable that will receive the minimum // buffer size needed to contain the content of the XFA // packet. // Return value: // Whether the operation succeeded or not. // // |document| must be valid and |index| must be in the range [0, N), where N is // the value returned by FPDF_GetXFAPacketCount(). |out_buflen| must not be // NULL. When the aforementioned arguments are valid, the operation succeeds, // and |out_buflen| receives the content size. |buffer| is only modified if // |buffer| is non-null and long enough to contain the content. Callers must // check both the return value and the input |buflen| is no less than the // returned |out_buflen| before using the data in |buffer|. var FPDF_GetXFAPacketContent: function(document: FPDF_DOCUMENT; index: Integer; buffer: Pointer; buflen: LongWord; var out_buflen: LongWord): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; {$IFDEF PDF_ENABLE_V8} // Function: FPDF_GetRecommendedV8Flags // Returns a space-separated string of command line flags that are // recommended to be passed into V8 via V8::SetFlagsFromString() // prior to initializing the PDFium library. // Parameters: // None. // Return value: // NUL-terminated string of the form "--flag1 --flag2". // The caller must not attempt to modify or free the result. var FPDF_GetRecommendedV8Flags: function: PAnsiChar; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_GetArrayBufferAllocatorSharedInstance() // Helper function for initializing V8 isolates that will // use PDFium's internal memory management. // Parameters: // None. // Return Value: // Pointer to a suitable v8::ArrayBuffer::Allocator, returned // as void for C compatibility. // Notes: // Use is optional, but allows external creation of isolates // matching the ones PDFium will make when none is provided // via |FPDF_LIBRARY_CONFIG::m_pIsolate|. // // Can only be called when the library is in an uninitialized or // destroyed state. var FPDF_GetArrayBufferAllocatorSharedInstance: function: Pointer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; {$ENDIF PDF_ENABLE_V8} {$IFDEF PDF_ENABLE_XFA} // Function: FPDF_BStr_Init // Helper function to initialize a FPDF_BSTR. var FPDF_BStr_Init: function(bstr: PFPDF_BSTR): FPDF_RESULT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_BStr_Set // Helper function to copy string data into the FPDF_BSTR. var FPDF_BStr_Set: function(vstr: PFPDF_BSTR; const cstr: PAnsiChar; length: Integer): FPDF_RESULT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_BStr_Clear // Helper function to clear a FPDF_BSTR. var FPDF_BStr_Clear: function(bstr: PFPDF_BSTR): FPDF_RESULT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; {$ENDIF PDF_ENABLE_XFA} // *** _FPDFEDIT_H_ *** function FPDF_ARGB(a, r, g, b: Byte): DWORD; inline; function FPDF_GetBValue(argb: DWORD): Byte; inline; function FPDF_GetGValue(argb: DWORD): Byte; inline; function FPDF_GetRValue(argb: DWORD): Byte; inline; function FPDF_GetAValue(argb: DWORD): Byte; inline; const // Refer to PDF Reference version 1.7 table 4.12 for all color space families. FPDF_COLORSPACE_UNKNOWN = 0; FPDF_COLORSPACE_DEVICEGRAY = 1; FPDF_COLORSPACE_DEVICERGB = 2; FPDF_COLORSPACE_DEVICECMYK = 3; FPDF_COLORSPACE_CALGRAY = 4; FPDF_COLORSPACE_CALRGB = 5; FPDF_COLORSPACE_LAB = 6; FPDF_COLORSPACE_ICCBASED = 7; FPDF_COLORSPACE_SEPARATION = 8; FPDF_COLORSPACE_DEVICEN = 9; FPDF_COLORSPACE_INDEXED = 10; FPDF_COLORSPACE_PATTERN = 11; // The page object constants. FPDF_PAGEOBJ_UNKNOWN = 0; FPDF_PAGEOBJ_TEXT = 1; FPDF_PAGEOBJ_PATH = 2; FPDF_PAGEOBJ_IMAGE = 3; FPDF_PAGEOBJ_SHADING = 4; FPDF_PAGEOBJ_FORM = 5; // The path segment constants. FPDF_SEGMENT_UNKNOWN = -1; FPDF_SEGMENT_LINETO = 0; FPDF_SEGMENT_BEZIERTO = 1; FPDF_SEGMENT_MOVETO = 2; FPDF_FILLMODE_NONE = 0; FPDF_FILLMODE_ALTERNATE = 1; FPDF_FILLMODE_WINDING = 2; FPDF_FONT_TYPE1 = 1; FPDF_FONT_TRUETYPE = 2; FPDF_LINECAP_BUTT = 0; FPDF_LINECAP_ROUND = 1; FPDF_LINECAP_PROJECTING_SQUARE = 2; FPDF_LINEJOIN_MITER = 0; FPDF_LINEJOIN_ROUND = 1; FPDF_LINEJOIN_BEVEL = 2; // See FPDF_SetPrintMode() for descriptions. FPDF_PRINTMODE_EMF = 0; FPDF_PRINTMODE_TEXTONLY = 1; FPDF_PRINTMODE_POSTSCRIPT2 = 2; FPDF_PRINTMODE_POSTSCRIPT3 = 3; FPDF_PRINTMODE_POSTSCRIPT2_PASSTHROUGH = 4; FPDF_PRINTMODE_POSTSCRIPT3_PASSTHROUGH = 5; FPDF_PRINTMODE_EMF_IMAGE_MASKS = 6; FPDF_PRINTMODE_POSTSCRIPT3_TYPE42 = 7; FPDF_PRINTMODE_POSTSCRIPT3_TYPE42_PASSTHROUGH= 8; type PFPDF_IMAGEOBJ_METADATA = ^FPDF_IMAGEOBJ_METADATA; FPDF_IMAGEOBJ_METADATA = record // The image width in pixels. width: Cardinal; // The image height in pixels. height: Cardinal; // The image's horizontal pixel-per-inch. horizontal_dpi: Single; // The image's vertical pixel-per-inch. vertical_dpi: Single; // The number of bits used to represent each pixel. bits_per_pixel: Cardinal; // The image's colorspace. See above for the list of FPDF_COLORSPACE_*. colorspace: Integer; // The image's marked content ID. Useful for pairing with associated alt-text. // A value of -1 indicates no ID. marked_content_id: Integer; end; PFPdfImageObjMetaData = ^TFPdfImageObjMetaData; TFPdfImageObjMetaData = FPDF_IMAGEOBJ_METADATA; // Create a new PDF document. // // Returns a handle to a new document, or NULL on failure. var FPDF_CreateNewDocument: function: FPDF_DOCUMENT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Create a new PDF page. // // document - handle to document. // page_index - suggested 0-based index of the page to create. If it is larger // than document's current last index(L), the created page index // is the next available index -- L+1. // width - the page width in points. // height - the page height in points. // // Returns the handle to the new page or NULL on failure. // // The page should be closed with FPDF_ClosePage() when finished as // with any other page in the document. var FPDFPage_New: function(document: FPDF_DOCUMENT; page_index: Integer; width, height: Double): FPDF_PAGE; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Delete the page at |page_index|. // // document - handle to document. // page_index - the index of the page to delete. var FPDFPage_Delete: procedure(document: FPDF_DOCUMENT; page_index: Integer); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Move the given pages to a new index position. // // page_indices - the ordered list of pages to move. No duplicates allowed. // page_indices_len - the number of elements in |page_indices| // dest_page_index - the new index position to which the pages in // |page_indices| are moved. // // Returns TRUE on success. If it returns FALSE, the document may be left in an // indeterminate state. // // Example: The PDF document starts out with pages [A, B, C, D], with indices // [0, 1, 2, 3]. // // > Move(doc, [3, 2], 2, 1); // returns true // > // The document has pages [A, D, C, B]. // > // > Move(doc, [0, 4, 3], 3, 1); // returns false // > // Returned false because index 4 is out of range. // > // > Move(doc, [0, 3, 1], 3, 2); // returns false // > // Returned false because index 2 is out of range for 3 page indices. // > // > Move(doc, [2, 2], 2, 0); // returns false // > // Returned false because [2, 2] contains duplicates. // var FPDF_MovePages: function(document: FPDF_DOCUMENT; page_indices: PInteger; page_indices_len: LongWord; dest_page_index: Integer): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the rotation of |page|. // // page - handle to a page // // Returns one of the following indicating the page rotation: // 0 - No rotation. // 1 - Rotated 90 degrees clockwise. // 2 - Rotated 180 degrees clockwise. // 3 - Rotated 270 degrees clockwise. var FPDFPage_GetRotation: function(page: FPDF_PAGE): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Set rotation for |page|. // // page - handle to a page. // rotate - the rotation value, one of: // 0 - No rotation. // 1 - Rotated 90 degrees clockwise. // 2 - Rotated 180 degrees clockwise. // 3 - Rotated 270 degrees clockwise. var FPDFPage_SetRotation: procedure(page: FPDF_PAGE; rotate: Integer); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Insert |page_object| into |page|. // // page - handle to a page // page_object - handle to a page object. The |page_object| will be // automatically freed. var FPDFPage_InsertObject: procedure(page: FPDF_PAGE; page_object: FPDF_PAGEOBJECT); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Remove |page_object| from |page|. // // page - handle to a page // page_object - handle to a page object to be removed. // // Returns TRUE on success. // // Ownership is transferred to the caller. Call FPDFPageObj_Destroy() to free // it. // Note that when removing a |page_object| of type FPDF_PAGEOBJ_TEXT, all // FPDF_TEXTPAGE handles for |page| are no longer valid. var FPDFPage_RemoveObject: function(page: FPDF_PAGE; page_object: FPDF_PAGEOBJECT): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get number of page objects inside |page|. // // page - handle to a page. // // Returns the number of objects in |page|. var FPDFPage_CountObjects: function(page: FPDF_PAGE): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get object in |page| at |index|. // // page - handle to a page. // index - the index of a page object. // // Returns the handle to the page object, or NULL on failed. var FPDFPage_GetObject: function(page: FPDF_PAGE; index: Integer): FPDF_PAGEOBJECT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Checks if |page| contains transparency. // // page - handle to a page. // // Returns TRUE if |page| contains transparency. var FPDFPage_HasTransparency: function(page: FPDF_PAGE): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Generate the content of |page|. // // page - handle to a page. // // Returns TRUE on success. // // Before you save the page to a file, or reload the page, you must call // |FPDFPage_GenerateContent| or any changes to |page| will be lost. var FPDFPage_GenerateContent: function(page: FPDF_PAGE): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Destroy |page_object| by releasing its resources. |page_object| must have // been created by FPDFPageObj_CreateNew{Path|Rect}() or // FPDFPageObj_New{Text|Image}Obj(). This function must be called on // newly-created objects if they are not added to a page through // FPDFPage_InsertObject() or to an annotation through FPDFAnnot_AppendObject(). // // page_object - handle to a page object. var FPDFPageObj_Destroy: procedure(page_obj: FPDF_PAGEOBJECT); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Checks if |page_object| contains transparency. // // page_object - handle to a page object. // // Returns TRUE if |page_object| contains transparency. var FPDFPageObj_HasTransparency: function(page_object: FPDF_PAGEOBJECT): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get type of |page_object|. // // page_object - handle to a page object. // // Returns one of the FPDF_PAGEOBJ_* values on success, FPDF_PAGEOBJ_UNKNOWN on // error. var FPDFPageObj_GetType: function(page_object: FPDF_PAGEOBJECT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Transform |page_object| by the given matrix. // // page_object - handle to a page object. // a - matrix value. // b - matrix value. // c - matrix value. // d - matrix value. // e - matrix value. // f - matrix value. // // The matrix is composed as: // |a c e| // |b d f| // and can be used to scale, rotate, shear and translate the |page_object|. var FPDFPageObj_Transform: procedure(page_object: FPDF_PAGEOBJECT; a, b, c, d, e, f: Double); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Transform |page_object| by the given matrix. // // page_object - handle to a page object. // matrix - the transform matrix. // // Returns TRUE on success. // // This can be used to scale, rotate, shear and translate the |page_object|. // It is an improved version of FPDFPageObj_Transform() that does not do // unnecessary double to float conversions, and only uses 1 parameter for the // matrix. It also returns whether the operation succeeded or not. var FPDFPageObj_TransformF: function(page_object: FPDF_PAGEOBJECT; matrix: PFS_MATRIX): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the transform matrix of a page object. // // page_object - handle to a page object. // matrix - pointer to struct to receive the matrix value. // // The matrix is composed as: // |a c e| // |b d f| // and used to scale, rotate, shear and translate the page object. // // For page objects outside form objects, the matrix values are relative to the // page that contains it. // For page objects inside form objects, the matrix values are relative to the // form that contains it. // // Returns TRUE on success. var FPDFPageObj_GetMatrix: function(page_object: FPDF_PAGEOBJECT; matrix: PFS_MATRIX): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Set the transform matrix of a page object. // // page_object - handle to a page object. // matrix - pointer to struct with the matrix value. // // The matrix is composed as: // |a c e| // |b d f| // and can be used to scale, rotate, shear and translate the page object. // // Returns TRUE on success. var FPDFPageObj_SetMatrix: function(page_object: FPDF_PAGEOBJECT; const matrix: PFS_MATRIX): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Transform all annotations in |page|. // // page - handle to a page. // a - matrix value. // b - matrix value. // c - matrix value. // d - matrix value. // e - matrix value. // f - matrix value. // // The matrix is composed as: // |a c e| // |b d f| // and can be used to scale, rotate, shear and translate the |page| annotations. var FPDFPage_TransformAnnots: procedure(page: FPDF_PAGE; a, b, c, d, e, f: Double); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Create a new image object. // // document - handle to a document. // // Returns a handle to a new image object. var FPDFPageObj_NewImageObj: function(document: FPDF_DOCUMENT): FPDF_PAGEOBJECT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the marked content ID for the object. // // page_object - handle to a page object. // // Returns the page object's marked content ID, or -1 on error. var FPDFPageObj_GetMarkedContentID: function(page_object: FPDF_PAGEOBJECT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get number of content marks in |page_object|. // // page_object - handle to a page object. // // Returns the number of content marks in |page_object|, or -1 in case of // failure. var FPDFPageObj_CountMarks: function(page_object: FPDF_PAGEOBJECT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get content mark in |page_object| at |index|. // // page_object - handle to a page object. // index - the index of a page object. // // Returns the handle to the content mark, or NULL on failure. The handle is // still owned by the library, and it should not be freed directly. It becomes // invalid if the page object is destroyed, either directly or indirectly by // unloading the page. var FPDFPageObj_GetMark: function(page_object: FPDF_PAGEOBJECT; index: LongWord): FPDF_PAGEOBJECTMARK; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Add a new content mark to a |page_object|. // // page_object - handle to a page object. // name - the name (tag) of the mark. // // Returns the handle to the content mark, or NULL on failure. The handle is // still owned by the library, and it should not be freed directly. It becomes // invalid if the page object is destroyed, either directly or indirectly by // unloading the page. var FPDFPageObj_AddMark: function(page_object: FPDF_PAGEOBJECT; name: FPDF_BYTESTRING): FPDF_PAGEOBJECTMARK; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Removes a content |mark| from a |page_object|. // The mark handle will be invalid after the removal. // // page_object - handle to a page object. // mark - handle to a content mark in that object to remove. // // Returns TRUE if the operation succeeded, FALSE if it failed. var FPDFPageObj_RemoveMark: function(page_object: FPDF_PAGEOBJECT; mark: FPDF_PAGEOBJECTMARK): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the name of a content mark. // // mark - handle to a content mark. // buffer - buffer for holding the returned name in UTF-16LE. This is only // modified if |buflen| is longer than the length of the name. // Optional, pass null to just retrieve the size of the buffer // needed. // buflen - length of the buffer. // out_buflen - pointer to variable that will receive the minimum buffer size // to contain the name. Not filled if FALSE is returned. // // Returns TRUE if the operation succeeded, FALSE if it failed. var FPDFPageObjMark_GetName: function(mark: FPDF_PAGEOBJECTMARK; buffer: Pointer; buflen: LongWord; out_buflen: PLongWord): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the number of key/value pair parameters in |mark|. // // mark - handle to a content mark. // // Returns the number of key/value pair parameters |mark|, or -1 in case of // failure. var FPDFPageObjMark_CountParams: function(mark: FPDF_PAGEOBJECTMARK): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the key of a property in a content mark. // // mark - handle to a content mark. // index - index of the property. // buffer - buffer for holding the returned key in UTF-16LE. This is only // modified if |buflen| is longer than the length of the key. // Optional, pass null to just retrieve the size of the buffer // needed. // buflen - length of the buffer. // out_buflen - pointer to variable that will receive the minimum buffer size // to contain the key. Not filled if FALSE is returned. // // Returns TRUE if the operation was successful, FALSE otherwise. var FPDFPageObjMark_GetParamKey: function(mark: FPDF_PAGEOBJECTMARK; index: LongWord; buffer: Pointer; buflen: LongWord; out_buflen: PLongWord): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the type of the value of a property in a content mark by key. // // mark - handle to a content mark. // key - string key of the property. // // Returns the type of the value, or FPDF_OBJECT_UNKNOWN in case of failure. var FPDFPageObjMark_GetParamValueType: function(mark: FPDF_PAGEOBJECTMARK; key: FPDF_BYTESTRING): FPDF_OBJECT_TYPE; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the value of a number property in a content mark by key as int. // FPDFPageObjMark_GetParamValueType() should have returned FPDF_OBJECT_NUMBER // for this property. // // mark - handle to a content mark. // key - string key of the property. // out_value - pointer to variable that will receive the value. Not filled if // false is returned. // // Returns TRUE if the key maps to a number value, FALSE otherwise. var FPDFPageObjMark_GetParamIntValue: function(mark: FPDF_PAGEOBJECTMARK; key: FPDF_BYTESTRING; out_value: PInteger): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the value of a string property in a content mark by key. // // mark - handle to a content mark. // key - string key of the property. // buffer - buffer for holding the returned value in UTF-16LE. This is // only modified if |buflen| is longer than the length of the // value. // Optional, pass null to just retrieve the size of the buffer // needed. // buflen - length of the buffer. // out_buflen - pointer to variable that will receive the minimum buffer size // to contain the value. Not filled if FALSE is returned. // // Returns TRUE if the key maps to a string/blob value, FALSE otherwise. var FPDFPageObjMark_GetParamStringValue: function(mark: FPDF_PAGEOBJECTMARK; key: FPDF_BYTESTRING; buffer: Pointer; buflen: LongWord; out_buflen: PLongWord): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the value of a blob property in a content mark by key. // // mark - handle to a content mark. // key - string key of the property. // buffer - buffer for holding the returned value. This is only modified // if |buflen| is at least as long as the length of the value. // Optional, pass null to just retrieve the size of the buffer // needed. // buflen - length of the buffer. // out_buflen - pointer to variable that will receive the minimum buffer size // to contain the value. Not filled if FALSE is returned. // // Returns TRUE if the key maps to a string/blob value, FALSE otherwise. var FPDFPageObjMark_GetParamBlobValue: function(mark: FPDF_PAGEOBJECTMARK; key: FPDF_BYTESTRING; buffer: Pointer; buflen: LongWord; out_buflen: PLongWord): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Set the value of an int property in a content mark by key. If a parameter // with key |key| exists, its value is set to |value|. Otherwise, it is added as // a new parameter. // // document - handle to the document. // page_object - handle to the page object with the mark. // mark - handle to a content mark. // key - string key of the property. // value - int value to set. // // Returns TRUE if the operation succeeded, FALSE otherwise. var FPDFPageObjMark_SetIntParam: function(document: FPDF_DOCUMENT; page_object: FPDF_PAGEOBJECT; mark: FPDF_PAGEOBJECTMARK; key: FPDF_BYTESTRING; value: Integer): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Set the value of a string property in a content mark by key. If a parameter // with key |key| exists, its value is set to |value|. Otherwise, it is added as // a new parameter. // // document - handle to the document. // page_object - handle to the page object with the mark. // mark - handle to a content mark. // key - string key of the property. // value - string value to set. // // Returns TRUE if the operation succeeded, FALSE otherwise. var FPDFPageObjMark_SetStringParam: function(document: FPDF_DOCUMENT; page_object: FPDF_PAGEOBJECT; mark: FPDF_PAGEOBJECTMARK; key: FPDF_BYTESTRING; value: FPDF_BYTESTRING): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Set the value of a blob property in a content mark by key. If a parameter // with key |key| exists, its value is set to |value|. Otherwise, it is added as // a new parameter. // // document - handle to the document. // page_object - handle to the page object with the mark. // mark - handle to a content mark. // key - string key of the property. // value - pointer to blob value to set. // value_len - size in bytes of |value|. // // Returns TRUE if the operation succeeded, FALSE otherwise. var FPDFPageObjMark_SetBlobParam: function(document: FPDF_DOCUMENT; page_object: FPDF_PAGEOBJECT; mark: FPDF_PAGEOBJECTMARK; key: FPDF_BYTESTRING; value: Pointer; value_len: LongWord): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Removes a property from a content mark by key. // // page_object - handle to the page object with the mark. // mark - handle to a content mark. // key - string key of the property. // // Returns TRUE if the operation succeeded, FALSE otherwise. var FPDFPageObjMark_RemoveParam: function(page_object: FPDF_PAGEOBJECT; mark: FPDF_PAGEOBJECTMARK; key: FPDF_BYTESTRING): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Load an image from a JPEG image file and then set it into |image_object|. // // pages - pointer to the start of all loaded pages, may be NULL. // count - number of |pages|, may be 0. // image_object - handle to an image object. // file_access - file access handler which specifies the JPEG image file. // // Returns TRUE on success. // // The image object might already have an associated image, which is shared and // cached by the loaded pages. In that case, we need to clear the cached image // for all the loaded pages. Pass |pages| and page count (|count|) to this API // to clear the image cache. If the image is not previously shared, or NULL is a // valid |pages| value. var FPDFImageObj_LoadJpegFile: function(pages: PFPDF_PAGE; nCount: Integer; image_object: FPDF_PAGEOBJECT; fileAccess: PFPDF_FILEACCESS): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Load an image from a JPEG image file and then set it into |image_object|. // // pages - pointer to the start of all loaded pages, may be NULL. // count - number of |pages|, may be 0. // image_object - handle to an image object. // file_access - file access handler which specifies the JPEG image file. // // Returns TRUE on success. // // The image object might already have an associated image, which is shared and // cached by the loaded pages. In that case, we need to clear the cached image // for all the loaded pages. Pass |pages| and page count (|count|) to this API // to clear the image cache. If the image is not previously shared, or NULL is a // valid |pages| value. This function loads the JPEG image inline, so the image // content is copied to the file. This allows |file_access| and its associated // data to be deleted after this function returns. var FPDFImageObj_LoadJpegFileInline: function(pages: PFPDF_PAGE; count: Integer; image_object: FPDF_PAGEOBJECT; file_access: PFPDF_FILEACCESS): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // TODO(thestig): Start deprecating this once FPDFPageObj_SetMatrix() is stable. // Set the transform matrix of |image_object|. // // image_object - handle to an image object. // a - matrix value. // b - matrix value. // c - matrix value. // d - matrix value. // e - matrix value. // f - matrix value. // // The matrix is composed as: // |a c e| // |b d f| // and can be used to scale, rotate, shear and translate the |image_object|. // // Returns TRUE on success. var FPDFImageObj_SetMatrix: function(image_object: FPDF_PAGEOBJECT; a, b, c, d, e, f: Double): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Set |bitmap| to |image_object|. // // pages - pointer to the start of all loaded pages, may be NULL. // count - number of |pages|, may be 0. // image_object - handle to an image object. // bitmap - handle of the bitmap. // // Returns TRUE on success. var FPDFImageObj_SetBitmap: function(pages: PFPDF_PAGE; nCount: Integer; image_object: FPDF_PAGEOBJECT; bitmap: FPDF_BITMAP): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get a bitmap rasterization of |image_object|. FPDFImageObj_GetBitmap() only // operates on |image_object| and does not take the associated image mask into // account. It also ignores the matrix for |image_object|. // The returned bitmap will be owned by the caller, and FPDFBitmap_Destroy() // must be called on the returned bitmap when it is no longer needed. // // image_object - handle to an image object. // // Returns the bitmap. var FPDFImageObj_GetBitmap: function(image_object: FPDF_PAGEOBJECT): FPDF_BITMAP; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get a bitmap rasterization of |image_object| that takes the image mask and // image matrix into account. To render correctly, the caller must provide the // |document| associated with |image_object|. If there is a |page| associated // with |image_object|, the caller should provide that as well. // The returned bitmap will be owned by the caller, and FPDFBitmap_Destroy() // must be called on the returned bitmap when it is no longer needed. // // document - handle to a document associated with |image_object|. // page - handle to an optional page associated with |image_object|. // image_object - handle to an image object. // // Returns the bitmap or NULL on failure. var FPDFImageObj_GetRenderedBitmap: function(document: FPDF_DOCUMENT; page: FPDF_PAGE; image_object: FPDF_PAGEOBJECT): FPDF_BITMAP; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the decoded image data of |image_object|. The decoded data is the // uncompressed image data, i.e. the raw image data after having all filters // applied. |buffer| is only modified if |buflen| is longer than the length of // the decoded image data. // // image_object - handle to an image object. // buffer - buffer for holding the decoded image data. // buflen - length of the buffer in bytes. // // Returns the length of the decoded image data. var FPDFImageObj_GetImageDataDecoded: function(image_object: FPDF_PAGEOBJECT; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the raw image data of |image_object|. The raw data is the image data as // stored in the PDF without applying any filters. |buffer| is only modified if // |buflen| is longer than the length of the raw image data. // // image_object - handle to an image object. // buffer - buffer for holding the raw image data. // buflen - length of the buffer in bytes. // // Returns the length of the raw image data. var FPDFImageObj_GetImageDataRaw: function(image_object: FPDF_PAGEOBJECT; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the number of filters (i.e. decoders) of the image in |image_object|. // // image_object - handle to an image object. // // Returns the number of |image_object|'s filters. var FPDFImageObj_GetImageFilterCount: function(image_object: FPDF_PAGEOBJECT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the filter at |index| of |image_object|'s list of filters. Note that the // filters need to be applied in order, i.e. the first filter should be applied // first, then the second, etc. |buffer| is only modified if |buflen| is longer // than the length of the filter string. // // image_object - handle to an image object. // index - the index of the filter requested. // buffer - buffer for holding filter string, encoded in UTF-8. // buflen - length of the buffer. // // Returns the length of the filter string. var FPDFImageObj_GetImageFilter: function(image_object: FPDF_PAGEOBJECT; index: Integer; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the image metadata of |image_object|, including dimension, DPI, bits per // pixel, and colorspace. If the |image_object| is not an image object or if it // does not have an image, then the return value will be false. Otherwise, // failure to retrieve any specific parameter would result in its value being 0. // // image_object - handle to an image object. // page - handle to the page that |image_object| is on. Required for // retrieving the image's bits per pixel and colorspace. // metadata - receives the image metadata; must not be NULL. // // Returns true if successful. var FPDFImageObj_GetImageMetadata: function(image_object: FPDF_PAGEOBJECT; page: FPDF_PAGE; metadata: PFPDF_IMAGEOBJ_METADATA): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the image size in pixels. Faster method to get only image size. // // image_object - handle to an image object. // width - receives the image width in pixels; must not be NULL. // height - receives the image height in pixels; must not be NULL. // // Returns true if successful. var FPDFImageObj_GetImagePixelSize: function(image_object: FPDF_PAGEOBJECT; var width, height: UInt32): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Create a new path object at an initial position. // // x - initial horizontal position. // y - initial vertical position. // // Returns a handle to a new path object. var FPDFPageObj_CreateNewPath: function(x, y: Single): FPDF_PAGEOBJECT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Create a closed path consisting of a rectangle. // // x - horizontal position for the left boundary of the rectangle. // y - vertical position for the bottom boundary of the rectangle. // w - width of the rectangle. // h - height of the rectangle. // // Returns a handle to the new path object. var FPDFPageObj_CreateNewRect: function(x, y, w, h: Single): FPDF_PAGEOBJECT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the bounding box of |page_object|. // // page_object - handle to a page object. // left - pointer where the left coordinate will be stored // bottom - pointer where the bottom coordinate will be stored // right - pointer where the right coordinate will be stored // top - pointer where the top coordinate will be stored // // On success, returns TRUE and fills in the 4 coordinates. var FPDFPageObj_GetBounds: function(page_object: FPDF_PAGEOBJECT; var left, bottom, right, top: Single): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the quad points that bounds |page_object|. // // page_object - handle to a page object. // quad_points - pointer where the quadrilateral points will be stored. // // On success, returns TRUE and fills in |quad_points|. // // Similar to FPDFPageObj_GetBounds(), this returns the bounds of a page // object. When the object is rotated by a non-multiple of 90 degrees, this API // returns a tighter bound that cannot be represented with just the 4 sides of // a rectangle. // // Currently only works the following |page_object| types: FPDF_PAGEOBJ_TEXT and // FPDF_PAGEOBJ_IMAGE. var FPDFPageObj_GetRotatedBounds: function(page_object: FPDF_PAGEOBJECT; quad_points: PFS_QUADPOINTSF): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Set the blend mode of |page_object|. // // page_object - handle to a page object. // blend_mode - string containing the blend mode. // // Blend mode can be one of following: Color, ColorBurn, ColorDodge, Darken, // Difference, Exclusion, HardLight, Hue, Lighten, Luminosity, Multiply, Normal, // Overlay, Saturation, Screen, SoftLight var FPDFPageObj_SetBlendMode: procedure(page_object: FPDF_PAGEOBJECT; blend_mode: FPDF_BYTESTRING); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Set the stroke RGBA of a page object. Range of values: 0 - 255. // // page_object - the handle to the page object. // R - the red component for the object's stroke color. // G - the green component for the object's stroke color. // B - the blue component for the object's stroke color. // A - the stroke alpha for the object. // // Returns TRUE on success. var FPDFPageObj_SetStrokeColor: function(page_object: FPDF_PAGEOBJECT; R, G, B, A: Cardinal): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the stroke RGBA of a page object. Range of values: 0 - 255. // // page_object - the handle to the page object. // R - the red component of the path stroke color. // G - the green component of the object's stroke color. // B - the blue component of the object's stroke color. // A - the stroke alpha of the object. // // Returns TRUE on success. var FPDFPageObj_GetStrokeColor: function(page_object: FPDF_PAGEOBJECT; var R, G, B, A: Cardinal): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Set the stroke width of a page object. // // path - the handle to the page object. // width - the width of the stroke. // // Returns TRUE on success var FPDFPageObj_SetStrokeWidth: function(page_object: FPDF_PAGEOBJECT; width: Single): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the stroke width of a page object. // // path - the handle to the page object. // width - the width of the stroke. // // Returns TRUE on success var FPDFPageObj_GetStrokeWidth: function(page_object: FPDF_PAGEOBJECT; var width: Single): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the line join of |page_object|. // // page_object - handle to a page object. // // Returns the line join, or -1 on failure. // Line join can be one of following: FPDF_LINEJOIN_MITER, FPDF_LINEJOIN_ROUND, // FPDF_LINEJOIN_BEVEL var FPDFPageObj_GetLineJoin: function(page_object: FPDF_PAGEOBJECT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Set the line join of |page_object|. // // page_object - handle to a page object. // line_join - line join // // Line join can be one of following: FPDF_LINEJOIN_MITER, FPDF_LINEJOIN_ROUND, // FPDF_LINEJOIN_BEVEL var FPDFPageObj_SetLineJoin: function(page_object: FPDF_PAGEOBJECT; line_join: Integer): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the line cap of |page_object|. // // page_object - handle to a page object. // // Returns the line cap, or -1 on failure. // Line cap can be one of following: FPDF_LINECAP_BUTT, FPDF_LINECAP_ROUND, // FPDF_LINECAP_PROJECTING_SQUARE var FPDFPageObj_GetLineCap: function(page_object: FPDF_PAGEOBJECT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Set the line cap of |page_object|. // // page_object - handle to a page object. // line_cap - line cap // // Line cap can be one of following: FPDF_LINECAP_BUTT, FPDF_LINECAP_ROUND, // FPDF_LINECAP_PROJECTING_SQUARE var FPDFPageObj_SetLineCap: function(page_object: FPDF_PAGEOBJECT; line_cap: Integer): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Set the fill RGBA of a page object. Range of values: 0 - 255. // // page_object - the handle to the page object. // R - the red component for the object's fill color. // G - the green component for the object's fill color. // B - the blue component for the object's fill color. // A - the fill alpha for the object. // // Returns TRUE on success. var FPDFPageObj_SetFillColor: function(page_object: FPDF_PAGEOBJECT; R, G, B, A: Cardinal): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the fill RGBA of a page object. Range of values: 0 - 255. // // page_object - the handle to the page object. // R - the red component of the object's fill color. // G - the green component of the object's fill color. // B - the blue component of the object's fill color. // A - the fill alpha of the object. // // Returns TRUE on success. var FPDFPageObj_GetFillColor: function(page_object: FPDF_PAGEOBJECT; var R, G, B, A: Cardinal): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the line dash |phase| of |page_object|. // // page_object - handle to a page object. // phase - pointer where the dashing phase will be stored. // // Returns TRUE on success. var FPDFPageObj_GetDashPhase: function(page_object: FPDF_PAGEOBJECT; var phase: Single): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Set the line dash phase of |page_object|. // // page_object - handle to a page object. // phase - line dash phase. // // Returns TRUE on success. var FPDFPageObj_SetDashPhase: function(page_object: FPDF_PAGEOBJECT; phase: Single): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the line dash array of |page_object|. // // page_object - handle to a page object. // // Returns the line dash array size or -1 on failure. var FPDFPageObj_GetDashCount: function(page_object: FPDF_PAGEOBJECT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the line dash array of |page_object|. // // page_object - handle to a page object. // dash_array - pointer where the dashing array will be stored. // dash_count - number of elements in |dash_array|. // // Returns TRUE on success. var FPDFPageObj_GetDashArray: function(page_object: FPDF_PAGEOBJECT; dash_array: PSingle; dash_count: SIZE_T): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Set the line dash array of |page_object|. // // page_object - handle to a page object. // dash_array - the dash array. // dash_count - number of elements in |dash_array|. // phase - the line dash phase. // // Returns TRUE on success. var FPDFPageObj_SetDashArray: function(page_object: FPDF_PAGEOBJECT; const dash_array: PSingle; dash_count: SIZE_T; phase: Single): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get number of segments inside |path|. // // path - handle to a path. // // A segment is a command, created by e.g. FPDFPath_MoveTo(), // FPDFPath_LineTo() or FPDFPath_BezierTo(). // // Returns the number of objects in |path| or -1 on failure. var FPDFPath_CountSegments: function(path: FPDF_PAGEOBJECT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get segment in |path| at |index|. // // path - handle to a path. // index - the index of a segment. // // Returns the handle to the segment, or NULL on faiure. var FPDFPath_GetPathSegment: function(path: FPDF_PAGEOBJECT; index: Integer): FPDF_PATHSEGMENT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get coordinates of |segment|. // // segment - handle to a segment. // x - the horizontal position of the segment. // y - the vertical position of the segment. // // Returns TRUE on success, otherwise |x| and |y| is not set. var FPDFPathSegment_GetPoint: function(segment: FPDF_PATHSEGMENT; var x, y: Single): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get type of |segment|. // // segment - handle to a segment. // // Returns one of the FPDF_SEGMENT_* values on success, // FPDF_SEGMENT_UNKNOWN on error. var FPDFPathSegment_GetType: function(segment: FPDF_PATHSEGMENT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Gets if the |segment| closes the current subpath of a given path. // // segment - handle to a segment. // // Returns close flag for non-NULL segment, FALSE otherwise. var FPDFPathSegment_GetClose: function(segment: FPDF_PATHSEGMENT): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Move a path's current point. // // path - the handle to the path object. // x - the horizontal position of the new current point. // y - the vertical position of the new current point. // // Note that no line will be created between the previous current point and the // new one. // // Returns TRUE on success var FPDFPath_MoveTo: function(path: FPDF_PAGEOBJECT; x, y: Single): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Add a line between the current point and a new point in the path. // // path - the handle to the path object. // x - the horizontal position of the new point. // y - the vertical position of the new point. // // The path's current point is changed to (x, y). // // Returns TRUE on success var FPDFPath_LineTo: function(path: FPDF_PAGEOBJECT; x, y: Single): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Add a cubic Bezier curve to the given path, starting at the current point. // // path - the handle to the path object. // x1 - the horizontal position of the first Bezier control point. // y1 - the vertical position of the first Bezier control point. // x2 - the horizontal position of the second Bezier control point. // y2 - the vertical position of the second Bezier control point. // x3 - the horizontal position of the ending point of the Bezier curve. // y3 - the vertical position of the ending point of the Bezier curve. // // Returns TRUE on success var FPDFPath_BezierTo: function(path: FPDF_PAGEOBJECT; x1, y1, x2, y2, x3, y3: Single): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Close the current subpath of a given path. // // path - the handle to the path object. // // This will add a line between the current point and the initial point of the // subpath, thus terminating the current subpath. // // Returns TRUE on success var FPDFPath_Close: function(path: FPDF_PAGEOBJECT): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Set the drawing mode of a path. // // path - the handle to the path object. // fillmode - the filling mode to be set: one of the FPDF_FILLMODE_* flags. // stroke - a boolean specifying if the path should be stroked or not. // // Returns TRUE on success var FPDFPath_SetDrawMode: function(path: FPDF_PAGEOBJECT; fillmode: Integer; stoke: FPDF_BOOL): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the drawing mode of a path. // // path - the handle to the path object. // fillmode - the filling mode of the path: one of the FPDF_FILLMODE_* flags. // stroke - a boolean specifying if the path is stroked or not. // // Returns TRUE on success var FPDFPath_GetDrawMode: function(path: FPDF_PAGEOBJECT; var fillmode: Integer; var stoke: FPDF_BOOL): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Create a new text object using one of the standard PDF fonts. // // document - handle to the document. // font - string containing the font name, without spaces. // font_size - the font size for the new text object. // // Returns a handle to a new text object, or NULL on failure var FPDFPageObj_NewTextObj: function(document: FPDF_DOCUMENT; font: FPDF_BYTESTRING; font_size: Single): FPDF_PAGEOBJECT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Set the text for a text object. If it had text, it will be replaced. // // text_object - handle to the text object. // text - the UTF-16LE encoded string containing the text to be added. // // Returns TRUE on success var FPDFText_SetText: function(text_object: FPDF_PAGEOBJECT; text: FPDF_WIDESTRING): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Set the text using charcodes for a text object. If it had text, it will be // replaced. // // text_object - handle to the text object. // charcodes - pointer to an array of charcodes to be added. // count - number of elements in |charcodes|. // // Returns TRUE on success var FPDFText_SetCharcodes: function(text_object: FPDF_PAGEOBJECT; const charcodes: PUINT; count: SIZE_T): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Returns a font object loaded from a stream of data. The font is loaded // into the document. Various font data structures, such as the ToUnicode data, // are auto-generated based on the inputs. // // document - handle to the document. // data - the stream of font data, which will be copied by the font object. // size - the size of the font data, in bytes. // font_type - FPDF_FONT_TYPE1 or FPDF_FONT_TRUETYPE depending on the font type. // cid - a boolean specifying if the font is a CID font or not. // // The loaded font can be closed using FPDFFont_Close(). var FPDFText_LoadFont: function(document: FPDF_DOCUMENT; data: PByte; size: DWORD; font_type: Integer; cid: FPDF_BOOL): FPDF_FONT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Loads one of the standard 14 fonts per PDF spec 1.7 page 416. The preferred // way of using font style is using a dash to separate the name from the style, // for example 'Helvetica-BoldItalic'. // // document - handle to the document. // font - string containing the font name, without spaces. // // The loaded font can be closed using FPDFFont_Close(). // // Returns NULL on failure. var FPDFText_LoadStandardFont: function(document: FPDF_DOCUMENT; font: FPDF_BYTESTRING): FPDF_FONT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Returns a font object loaded from a stream of data for a type 2 CID font. The // font is loaded into the document. Unlike FPDFText_LoadFont(), the ToUnicode // data and the CIDToGIDMap data are caller provided, instead of auto-generated. // // document - handle to the document. // font_data - the stream of font data, which will be copied by // the font object. // font_data_size - the size of the font data, in bytes. // to_unicode_cmap - the ToUnicode data. // cid_to_gid_map_data - the stream of CIDToGIDMap data. // cid_to_gid_map_data_size - the size of the CIDToGIDMap data, in bytes. // // The loaded font can be closed using FPDFFont_Close(). // // Returns NULL on failure. var FPDFText_LoadCidType2Font: function(document: FPDF_DOCUMENT; font_data: PByte; font_data_size: DWORD; to_unicode_cmap: FPDF_BYTESTRING; cid_to_gid_map_data: PByte; cid_to_gid_map_data_size: DWORD): FPDF_FONT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the font size of a text object. // // text - handle to a text. // // size - pointer to the font size of the text object, measured in points // (about 1/72 inch) // // Returns TRUE on success. var FPDFTextObj_GetFontSize: function(text: FPDF_PAGEOBJECT; var size: Single): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Close a loaded PDF font. // // font - Handle to the loaded font. var FPDFFont_Close: procedure(font: FPDF_FONT); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Create a new text object using a loaded font. // // document - handle to the document. // font - handle to the font object. // font_size - the font size for the new text object. // // Returns a handle to a new text object, or NULL on failure var FPDFPageObj_CreateTextObj: function(document: FPDF_DOCUMENT; font: FPDF_FONT; font_size: Single): FPDF_PAGEOBJECT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the text rendering mode of a text object. // // text - the handle to the text object. // // Returns one of the known FPDF_TEXT_RENDERMODE enum values on success, // FPDF_TEXTRENDERMODE_UNKNOWN on error. var FPDFTextObj_GetTextRenderMode: function(text: FPDF_PAGEOBJECT): FPDF_TEXT_RENDERMODE; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Set the text rendering mode of a text object. // // text - the handle to the text object. // render_mode - the FPDF_TEXT_RENDERMODE enum value to be set (cannot set to // FPDF_TEXTRENDERMODE_UNKNOWN). // // Returns TRUE on success. var FPDFTextObj_SetTextRenderMode: function(text: FPDF_PAGEOBJECT; render_mode: FPDF_TEXT_RENDERMODE): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the text of a text object. // // text_object - the handle to the text object. // text_page - the handle to the text page. // buffer - the address of a buffer that receives the text. // length - the size, in bytes, of |buffer|. // // Returns the number of bytes in the text (including the trailing NUL // character) on success, 0 on error. // // Regardless of the platform, the |buffer| is always in UTF-16LE encoding. // If |length| is less than the returned length, or |buffer| is NULL, |buffer| // will not be modified. var FPDFTextObj_GetText: function(text_object: FPDF_PAGEOBJECT; text_page: FPDF_TEXTPAGE; buffer: PFPDF_WCHAR; length: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get a bitmap rasterization of |text_object|. To render correctly, the caller // must provide the |document| associated with |text_object|. If there is a // |page| associated with |text_object|, the caller should provide that as well. // The returned bitmap will be owned by the caller, and FPDFBitmap_Destroy() // must be called on the returned bitmap when it is no longer needed. // // document - handle to a document associated with |text_object|. // page - handle to an optional page associated with |text_object|. // text_object - handle to a text object. // scale - the scaling factor, which must be greater than 0. // // Returns the bitmap or NULL on failure. var FPDFTextObj_GetRenderedBitmap: function(document: FPDF_DOCUMENT; page: FPDF_PAGE; text_object: FPDF_PAGEOBJECT; scale: Single): FPDF_BITMAP; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the font of a text object. // // text - the handle to the text object. // // Returns a handle to the font object held by |text| which retains ownership. var FPDFTextObj_GetFont: function(text: FPDF_PAGEOBJECT): FPDF_FONT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the family name of a font. // // font - the handle to the font object. // buffer - the address of a buffer that receives the font name. // length - the size, in bytes, of |buffer|. // // Returns the number of bytes in the family name (including the trailing NUL // character) on success, 0 on error. // // Regardless of the platform, the |buffer| is always in UTF-8 encoding. // If |length| is less than the returned length, or |buffer| is NULL, |buffer| // will not be modified. var FPDFFont_GetFamilyName: function(font: FPDF_FONT; buffer: PAnsiChar; length: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the decoded data from the |font| object. // // font - The handle to the font object. (Required) // buffer - The address of a buffer that receives the font data. // buflen - Length of the buffer. // out_buflen - Pointer to variable that will receive the minimum buffer size // to contain the font data. Not filled if the return value is // FALSE. (Required) // // Returns TRUE on success. In which case, |out_buflen| will be filled, and // |buffer| will be filled if it is large enough. Returns FALSE if any of the // required parameters are null. // // The decoded data is the uncompressed font data. i.e. the raw font data after // having all stream filters applied, when the data is embedded. // // If the font is not embedded, then this API will instead return the data for // the substitution font it is using. var FPDFFont_GetFontData: function(font: FPDF_FONT; buffer: PByte; buflen: SIZE_T; var out_buflen: SIZE_T): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get whether |font| is embedded or not. // // font - the handle to the font object. // // Returns 1 if the font is embedded, 0 if it not, and -1 on failure. var FPDFFont_GetIsEmbedded: function(font: FPDF_FONT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the descriptor flags of a font. // // font - the handle to the font object. // // Returns the bit flags specifying various characteristics of the font as // defined in ISO 32000-1:2008, table 123, -1 on failure. var FPDFFont_GetFlags: function(font: FPDF_FONT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the font weight of a font. // // font - the handle to the font object. // // Returns the font weight, -1 on failure. // Typical values are 400 (normal) and 700 (bold). var FPDFFont_GetWeight: function(font: FPDF_FONT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the italic angle of a font. // // font - the handle to the font object. // angle - pointer where the italic angle will be stored // // The italic angle of a |font| is defined as degrees counterclockwise // from vertical. For a font that slopes to the right, this will be negative. // // Returns TRUE on success; |angle| unmodified on failure. var FPDFFont_GetItalicAngle: function(font: FPDF_FONT; var angle: Integer): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get ascent distance of a font. // // font - the handle to the font object. // font_size - the size of the |font|. // ascent - pointer where the font ascent will be stored // // Ascent is the maximum distance in points above the baseline reached by the // glyphs of the |font|. One point is 1/72 inch (around 0.3528 mm). // // Returns TRUE on success; |ascent| unmodified on failure. var FPDFFont_GetAscent: function(font: FPDF_FONT; font_size: Single; var ascent: Single): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get descent distance of a font. // // font - the handle to the font object. // font_size - the size of the |font|. // descent - pointer where the font descent will be stored // // Descent is the maximum distance in points below the baseline reached by the // glyphs of the |font|. One point is 1/72 inch (around 0.3528 mm). // // Returns TRUE on success; |descent| unmodified on failure. var FPDFFont_GetDescent: function(font: FPDF_FONT; font_size: Single; var descent: Single): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the width of a glyph in a font. // // font - the handle to the font object. // glyph - the glyph. // font_size - the size of the font. // width - pointer where the glyph width will be stored // // Glyph width is the distance from the end of the prior glyph to the next // glyph. This will be the vertical distance for vertical writing. // // Returns TRUE on success; |width| unmodified on failure. var FPDFFont_GetGlyphWidth: function(font: FPDF_FONT; glyph: UINT; font_size: Single; var width: Single): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the glyphpath describing how to draw a font glyph. // // font - the handle to the font object. // glyph - the glyph being drawn. // font_size - the size of the font. // // Returns the handle to the segment, or NULL on faiure. var FPDFFont_GetGlyphPath: function(font: FPDF_FONT; glyph: UINT; font_size: Single): FPDF_GLYPHPATH; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get number of segments inside glyphpath. // // glyphpath - handle to a glyph path. // // Returns the number of objects in |glyphpath| or -1 on failure. var FPDFGlyphPath_CountGlyphSegments: function(glyphpath: FPDF_GLYPHPATH): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get segment in glyphpath at index. // // glyphpath - handle to a glyph path. // index - the index of a segment. // // Returns the handle to the segment, or NULL on faiure. var FPDFGlyphPath_GetGlyphPathSegment: function(glyphpath: FPDF_GLYPHPATH; index: Integer): FPDF_PATHSEGMENT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get number of page objects inside |form_object|. // // form_object - handle to a form object. // // Returns the number of objects in |form_object| on success, -1 on error. var FPDFFormObj_CountObjects: function(form_object: FPDF_PAGEOBJECT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get page object in |form_object| at |index|. // // form_object - handle to a form object. // index - the 0-based index of a page object. // // Returns the handle to the page object, or NULL on error. var FPDFFormObj_GetObject: function(form_object: FPDF_PAGEOBJECT; index: LongWord): FPDF_PAGEOBJECT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // *** _FPDF_PPO_H_ *** // Experimental API. // Import pages to a FPDF_DOCUMENT. // // dest_doc - The destination document for the pages. // src_doc - The document to be imported. // page_indices - An array of page indices to be imported. The first page is // zero. If |page_indices| is NULL, all pages from |src_doc| // are imported. // length - The length of the |page_indices| array. // index - The page index at which to insert the first imported page // into |dest_doc|. The first page is zero. // // Returns TRUE on success. Returns FALSE if any pages in |page_indices| is // invalid. var FPDF_ImportPagesByIndex: function(dest_doc, src_doc: FPDF_DOCUMENT; page_indices: PInteger; length: LongWord; index: Integer): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Import pages to a FPDF_DOCUMENT. // // dest_doc - The destination document for the pages. // src_doc - The document to be imported. // pagerange - A page range string, Such as "1,3,5-7". The first page is one. // If |pagerange| is NULL, all pages from |src_doc| are imported. // index - The page index at which to insert the first imported page into // |dest_doc|. The first page is zero. // // Returns TRUE on success. Returns FALSE if any pages in |pagerange| is // invalid or if |pagerange| cannot be read. var FPDF_ImportPages: function(dest_doc, src_doc: FPDF_DOCUMENT; pagerange: FPDF_BYTESTRING; index: Integer): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Create a new document from |src_doc|. The pages of |src_doc| will be // combined to provide |num_pages_on_x_axis x num_pages_on_y_axis| pages per // |output_doc| page. // // src_doc - The document to be imported. // output_width - The output page width in PDF "user space" units. // output_height - The output page height in PDF "user space" units. // num_pages_on_x_axis - The number of pages on X Axis. // num_pages_on_y_axis - The number of pages on Y Axis. // // Return value: // A handle to the created document, or NULL on failure. // // Comments: // number of pages per page = num_pages_on_x_axis * num_pages_on_y_axis // var FPDF_ImportNPagesToOne: function(src_doc: FPDF_DOCUMENT; output_width, output_height: Single; num_pages_on_x_axis, num_pages_on_y_axis: SIZE_T): FPDF_DOCUMENT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Create a template to generate form xobjects from |src_doc|'s page at // |src_page_index|, for use in |dest_doc|. // // Returns a handle on success, or NULL on failure. Caller owns the newly // created object. var FPDF_NewXObjectFromPage: function(dest_doc, src_doc: FPDF_DOCUMENT; src_page_index: Integer): FPDF_XOBJECT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Close an FPDF_XOBJECT handle created by FPDF_NewXObjectFromPage(). // FPDF_PAGEOBJECTs created from the FPDF_XOBJECT handle are not affected. var FPDF_CloseXObject: procedure(xobject: FPDF_XOBJECT); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Create a new form object from an FPDF_XOBJECT object. // // Returns a new form object on success, or NULL on failure. Caller owns the // newly created object. var FPDF_NewFormObjectFromXObject: function(xobject: FPDF_XOBJECT): FPDF_PAGEOBJECT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Copy the viewer preferences from |src_doc| into |dest_doc|. // // dest_doc - Document to write the viewer preferences into. // src_doc - Document to read the viewer preferences from. // // Returns TRUE on success. var FPDF_CopyViewerPreferences: function(dest_doc, src_doc: FPDF_DOCUMENT): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // *** _FPDF_SAVE_H_ *** type // Structure for custom file write PFPDF_FILEWRITE = ^FPDF_FILEWRITE; FPDF_FILEWRITE = record // // Version number of the interface. Currently must be 1. // version: Integer; // // Method: WriteBlock // Output a block of data in your custom way. // Interface Version: // 1 // Implementation Required: // Yes // Comments: // Called by function FPDF_SaveDocument // Parameters: // pThis - Pointer to the structure itself // pData - Pointer to a buffer to output // size - The size of the buffer. // Return value: // Should be non-zero if successful, zero for error. // WriteBlock: function(pThis: PFPDF_FILEWRITE; pData: Pointer; size: LongWord): Integer; cdecl; end; PFPdfFileWrite = ^TFPdfFileWrite; TFPdfFileWrite = FPDF_FILEWRITE; const // Flags for FPDF_SaveAsCopy() FPDF_INCREMENTAL = 1; FPDF_NO_INCREMENTAL = 2; FPDF_REMOVE_SECURITY = 3; // Function: FPDF_SaveAsCopy // Saves the copy of specified document in custom way. // Parameters: // document - Handle to document, as returned by // FPDF_LoadDocument() or FPDF_CreateNewDocument(). // pFileWrite - A pointer to a custom file write structure. // flags - The creating flags. // Return value: // TRUE for succeed, FALSE for failed. // var FPDF_SaveAsCopy: function(document: FPDF_DOCUMENT; pFileWrite: PFPDF_FILEWRITE; flags: FPDF_DWORD): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_SaveWithVersion // Same as FPDF_SaveAsCopy(), except the file version of the // saved document can be specified by the caller. // Parameters: // document - Handle to document. // pFileWrite - A pointer to a custom file write structure. // flags - The creating flags. // fileVersion - The PDF file version. File version: 14 for 1.4, 15 for 1.5, ... // Return value: // TRUE if succeed, FALSE if failed. // var FPDF_SaveWithVersion: function(document: FPDF_DOCUMENT; pFileWrite: PFPDF_FILEWRITE; flags: FPDF_DWORD; fileVersion: Integer): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // *** _FPDF_FLATTEN_H_ *** const FLATTEN_FAIL = 0; // Flatten operation failed. FLATTEN_SUCCESS = 1; // Flatten operation succeed. FLATTEN_NOTINGTODO = 2; // Nothing to be flattened. FLAT_NORMALDISPLAY = 0; // Flatten for normal display. FLAT_PRINT = 1; // Flatten for print. // Flatten annotations and form fields into the page contents. // // page - handle to the page. // nFlag - One of the |FLAT_*| values denoting the page usage. // // Returns one of the |FLATTEN_*| values. // // Currently, all failures return |FLATTEN_FAIL| with no indication of the // cause. var FPDFPage_Flatten: function(page: FPDF_PAGE; nFlag: Integer): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // *** _FPDFTEXT_H_ *** // Function: FPDFText_LoadPage // Prepare information about all characters in a page. // Parameters: // page - Handle to the page. Returned by FPDF_LoadPage function (in FPDFVIEW module). // Return value: // A handle to the text page information structure. // NULL if something goes wrong. // Comments: // Application must call FPDFText_ClosePage to release the text page // information. // var FPDFText_LoadPage: function(page: FPDF_PAGE): FPDF_TEXTPAGE; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFText_ClosePage // Release all resources allocated for a text page information structure. // Parameters: // text_page - Handle to a text page information structure. Returned by FPDFText_LoadPage function. // Return Value: // None. // var FPDFText_ClosePage: procedure(text_page: FPDF_TEXTPAGE); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFText_CountChars // Get number of characters in a page. // Parameters: // text_page - Handle to a text page information structure. Returned by FPDFText_LoadPage function. // Return value: // Number of characters in the page. Return -1 for error. // Generated characters, like additional space characters, new line // characters, are also counted. // Comments: // Characters in a page form a "stream", inside the stream, each character has an index. // We will use the index parameters in many of FPDFTEXT functions. The first character in the page // has an index value of zero. // var FPDFText_CountChars: function(text_page: FPDF_TEXTPAGE): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFText_GetUnicode // Get Unicode of a character in a page. // Parameters: // text_page - Handle to a text page information structure. Returned by FPDFText_LoadPage function. // index - Zero-based index of the character. // Return value: // The Unicode of the particular character. // If a character is not encoded in Unicode and Foxit engine can't convert to Unicode, // the return value will be zero. // var FPDFText_GetUnicode: function(text_page: FPDF_TEXTPAGE; index: Integer): WideChar; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDFText_GetTextObject // Get the FPDF_PAGEOBJECT associated with a given character. // Parameters: // text_page - Handle to a text page information structure. // Returned by FPDFText_LoadPage function. // index - Zero-based index of the character. // Return value: // The associated text object for the character at |index|, or NULL on // error. The returned text object, if non-null, is of type // |FPDF_PAGEOBJ_TEXT|. The caller does not own the returned object. // var FPDFText_GetTextObject: function(text_page: FPDF_TEXTPAGE; index: Integer): FPDF_PAGEOBJECT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDFText_IsGenerated // Get if a character in a page is generated by PDFium. // Parameters: // text_page - Handle to a text page information structure. // Returned by FPDFText_LoadPage function. // index - Zero-based index of the character. // Return value: // 1 if the character is generated by PDFium. // 0 if the character is not generated by PDFium. // -1 if there was an error. // var FPDFText_IsGenerated: function(text_page: FPDF_TEXTPAGE; index: Integer): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDFText_IsHyphen // Get if a character in a page is a hyphen. // Parameters: // text_page - Handle to a text page information structure. // Returned by FPDFText_LoadPage function. // index - Zero-based index of the character. // Return value: // 1 if the character is a hyphen. // 0 if the character is not a hyphen. // -1 if there was an error. // var FPDFText_IsHyphen: function(text_page: FPDF_TEXTPAGE; index: Integer): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDFText_HasUnicodeMapError // Get if a character in a page has an invalid unicode mapping. // Parameters: // text_page - Handle to a text page information structure. // Returned by FPDFText_LoadPage function. // index - Zero-based index of the character. // Return value: // 1 if the character has an invalid unicode mapping. // 0 if the character has no known unicode mapping issues. // -1 if there was an error. // var FPDFText_HasUnicodeMapError: function(text_page: FPDF_TEXTPAGE; index: Integer): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFText_GetFontSize // Get the font size of a particular character. // Parameters: // text_page - Handle to a text page information structure. // Returned by FPDFText_LoadPage function. // index - Zero-based index of the character. // Return value: // The font size of the particular character, measured in points (about // 1/72 inch). This is the typographic size of the font (so called // "em size"). // var FPDFText_GetFontSize: function(text_page: FPDF_TEXTPAGE; index: Integer): Double; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDFText_GetFontInfo // Get the font name and flags of a particular character. // Parameters: // text_page - Handle to a text page information structure. // Returned by FPDFText_LoadPage function. // index - Zero-based index of the character. // buffer - A buffer receiving the font name. // buflen - The length of |buffer| in bytes. // flags - Optional pointer to an int receiving the font flags. // These flags should be interpreted per PDF spec 1.7 // Section 5.7.1 Font Descriptor Flags. // Return value: // On success, return the length of the font name, including the // trailing NUL character, in bytes. If this length is less than or // equal to |length|, |buffer| is set to the font name, |flags| is // set to the font flags. |buffer| is in UTF-8 encoding. Return 0 on // failure. // var FPDFText_GetFontInfo: function(text_page: FPDF_TEXTPAGE; index: Integer; buffer: Pointer; buflen: LongWord; flags: PInteger): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDFText_GetFontWeight // Get the font weight of a particular character. // Parameters: // text_page - Handle to a text page information structure. // Returned by FPDFText_LoadPage function. // index - Zero-based index of the character. // Return value: // On success, return the font weight of the particular character. If // |text_page| is invalid, if |index| is out of bounds, or if the // character's text object is undefined, return -1. // var FPDFText_GetFontWeight: function(text_page: FPDF_TEXTPAGE; index: Integer): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDFText_GetFillColor // Get the fill color of a particular character. // Parameters: // text_page - Handle to a text page information structure. // Returned by FPDFText_LoadPage function. // index - Zero-based index of the character. // R - Pointer to an unsigned int number receiving the // red value of the fill color. // G - Pointer to an unsigned int number receiving the // green value of the fill color. // B - Pointer to an unsigned int number receiving the // blue value of the fill color. // A - Pointer to an unsigned int number receiving the // alpha value of the fill color. // Return value: // Whether the call succeeded. If false, |R|, |G|, |B| and |A| are // unchanged. // var FPDFText_GetFillColor: function(text_page: FPDF_TEXTPAGE; index: Integer; var R, G, B, A: Cardinal): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDFText_GetStrokeColor // Get the stroke color of a particular character. // Parameters: // text_page - Handle to a text page information structure. // Returned by FPDFText_LoadPage function. // index - Zero-based index of the character. // R - Pointer to an unsigned int number receiving the // red value of the stroke color. // G - Pointer to an unsigned int number receiving the // green value of the stroke color. // B - Pointer to an unsigned int number receiving the // blue value of the stroke color. // A - Pointer to an unsigned int number receiving the // alpha value of the stroke color. // Return value: // Whether the call succeeded. If false, |R|, |G|, |B| and |A| are // unchanged. // var FPDFText_GetStrokeColor: function(text_page: FPDF_TEXTPAGE; index: Integer; var R, G, B, A: Cardinal): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDFText_GetCharAngle // Get character rotation angle. // Parameters: // text_page - Handle to a text page information structure. // Returned by FPDFText_LoadPage function. // index - Zero-based index of the character. // Return Value: // On success, return the angle value in radian. Value will always be // greater or equal to 0. If |text_page| is invalid, or if |index| is // out of bounds, then return -1. // var FPDFText_GetCharAngle: function(text_page: FPDF_TEXTPAGE; index: Integer): Single; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFText_GetCharBox // Get bounding box of a particular character. // Parameters: // text_page - Handle to a text page information structure. Returned by FPDFText_LoadPage function. // index - Zero-based index of the character. // left - Pointer to a double number receiving left position of the character box. // right - Pointer to a double number receiving right position of the character box. // bottom - Pointer to a double number receiving bottom position of the character box. // top - Pointer to a double number receiving top position of the character box. // Return Value: // On success, return TRUE and fill in |left|, |right|, |bottom|, and // |top|. If |text_page| is invalid, or if |index| is out of bounds, // then return FALSE, and the out parameters remain unmodified. // Comments: // All positions are measured in PDF "user space". // var FPDFText_GetCharBox: procedure(text_page: FPDF_TEXTPAGE; index: Integer; var left, right, bottom, top: Double); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDFText_GetLooseCharBox // Get a "loose" bounding box of a particular character, i.e., covering // the entire glyph bounds, without taking the actual glyph shape into // account. // Parameters: // text_page - Handle to a text page information structure. // Returned by FPDFText_LoadPage function. // index - Zero-based index of the character. // rect - Pointer to a FS_RECTF receiving the character box. // Return Value: // On success, return TRUE and fill in |rect|. If |text_page| is // invalid, or if |index| is out of bounds, then return FALSE, and the // |rect| out parameter remains unmodified. // Comments: // All positions are measured in PDF "user space". // var FPDFText_GetLooseCharBox: function(text_page: FPDF_TEXTPAGE; index: Integer; rect: PFS_RECTF): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDFText_GetMatrix // Get the effective transformation matrix for a particular character. // Parameters: // text_page - Handle to a text page information structure. // Returned by FPDFText_LoadPage(). // index - Zero-based index of the character. // matrix - Pointer to a FS_MATRIX receiving the transformation // matrix. // Return Value: // On success, return TRUE and fill in |matrix|. If |text_page| is // invalid, or if |index| is out of bounds, or if |matrix| is NULL, // then return FALSE, and |matrix| remains unmodified. // var FPDFText_GetMatrix: function(text_page: FPDF_TEXTPAGE; index: Integer; matrix: PFS_MATRIX): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFText_GetCharOrigin // Get origin of a particular character. // Parameters: // text_page - Handle to a text page information structure. // Returned by FPDFText_LoadPage function. // index - Zero-based index of the character. // x - Pointer to a double number receiving x coordinate of // the character origin. // y - Pointer to a double number receiving y coordinate of // the character origin. // Return Value: // Whether the call succeeded. If false, x and y are unchanged. // Comments: // All positions are measured in PDF "user space". // var FPDFText_GetCharOrigin: function(text_page: FPDF_TEXTPAGE; index: Integer; var x, y: Double): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFText_GetCharIndexAtPos // Get the index of a character at or nearby a certain position on the // page. // Parameters: // text_page - Handle to a text page information structure. // Returned by FPDFText_LoadPage function. // x - X position in PDF "user space". // y - Y position in PDF "user space". // xTolerance - An x-axis tolerance value for character hit // detection, in point units. // yTolerance - A y-axis tolerance value for character hit // detection, in point units. // Return Value: // The zero-based index of the character at, or nearby the point (x,y). // If there is no character at or nearby the point, return value will // be -1. If an error occurs, -3 will be returned. // var FPDFText_GetCharIndexAtPos: function(text_page: FPDF_TEXTPAGE; x, y, xTorelance, yTolerance: Double): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFText_GetText // Extract unicode text string from the page. // Parameters: // text_page - Handle to a text page information structure. // Returned by FPDFText_LoadPage function. // start_index - Index for the start characters. // count - Number of UCS-2 values to be extracted. // result - A buffer (allocated by application) receiving the // extracted UCS-2 values. The buffer must be able to // hold `count` UCS-2 values plus a terminator. // Return Value: // Number of characters written into the result buffer, including the // trailing terminator. // Comments: // This function ignores characters without UCS-2 representations. // It considers all characters on the page, even those that are not // visible when the page has a cropbox. To filter out the characters // outside of the cropbox, use FPDF_GetPageBoundingBox() and // FPDFText_GetCharBox(). // var FPDFText_GetText: function(text_page: FPDF_TEXTPAGE; start_index, count: Integer; result: PWideChar): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFText_CountRects // Counts number of rectangular areas occupied by a segment of text, // and caches the result for subsequent FPDFText_GetRect() calls. // Parameters: // text_page - Handle to a text page information structure. // Returned by FPDFText_LoadPage function. // start_index - Index for the start character. // count - Number of characters, or -1 for all remaining. // Return value: // Number of rectangles, 0 if text_page is null, or -1 on bad // start_index. // Comments: // This function, along with FPDFText_GetRect can be used by // applications to detect the position on the page for a text segment, // so proper areas can be highlighted. The FPDFText_* functions will // automatically merge small character boxes into bigger one if those // characters are on the same line and use same font settings. // var FPDFText_CountRects: function(text_page: FPDF_TEXTPAGE; start_index, count: Integer): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFText_GetRect // Get a rectangular area from the result generated by // FPDFText_CountRects. // Parameters: // text_page - Handle to a text page information structure. // Returned by FPDFText_LoadPage function. // rect_index - Zero-based index for the rectangle. // left - Pointer to a double value receiving the rectangle // left boundary. // top - Pointer to a double value receiving the rectangle // top boundary. // right - Pointer to a double value receiving the rectangle // right boundary. // bottom - Pointer to a double value receiving the rectangle // bottom boundary. // Return Value: // On success, return TRUE and fill in |left|, |top|, |right|, and // |bottom|. If |text_page| is invalid then return FALSE, and the out // parameters remain unmodified. If |text_page| is valid but // |rect_index| is out of bounds, then return FALSE and set the out // parameters to 0. // var FPDFText_GetRect: procedure(text_page: FPDF_TEXTPAGE; rect_index: Integer; var left, top, right, bottom: Double); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFText_GetBoundedText // Extract unicode text within a rectangular boundary on the page. // Parameters: // text_page - Handle to a text page information structure. // Returned by FPDFText_LoadPage function. // left - Left boundary. // top - Top boundary. // right - Right boundary. // bottom - Bottom boundary. // buffer - Caller-allocated buffer to receive UTF-16 values. // buflen - Number of UTF-16 values (not bytes) that `buffer` // is capable of holding. // Return Value: // If buffer is NULL or buflen is zero, return number of UTF-16 // values (not bytes) of text present within the rectangle, excluding // a terminating NUL. Generally you should pass a buffer at least one // larger than this if you want a terminating NUL, which will be // provided if space is available. Otherwise, return number of UTF-16 // values copied into the buffer, including the terminating NUL when // space for it is available. // Comment: // If the buffer is too small, as much text as will fit is copied into // it. May return a split surrogate in that case. // var FPDFText_GetBoundedText: function(text_page: FPDF_TEXTPAGE; left, top, right, bottom: Double; buffer: PWideChar; buflen: Integer): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; const // Flags used by FPDFText_FindStart function. FPDF_MATCHCASE = $00000001; // If not set, it will not match case by default. FPDF_MATCHWHOLEWORD = $00000002; // If not set, it will not match the whole word by default. FPDF_CONSECUTIVE = $00000004; // If not set, it will skip past the current match to look for the next match. // Function: FPDFText_FindStart // Start a search. // Parameters: // text_page - Handle to a text page information structure. Returned by FPDFText_LoadPage function. // findwhat - A unicode match pattern. // flags - Option flags. // start_index - Start from this character. -1 for end of the page. // Return Value: // A handle for the search context. FPDFText_FindClose must be called // to release this handle. // var FPDFText_FindStart: function(text_page: FPDF_TEXTPAGE; findwhat: FPDF_WIDESTRING; flags: LongWord; start_index: Integer): FPDF_SCHHANDLE; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFText_FindNext // Search in the direction from page start to end. // Parameters: // handle - A search context handle returned by FPDFText_FindStart. // Return Value: // Whether a match is found. // var FPDFText_FindNext: function(handle: FPDF_SCHHANDLE): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFText_FindPrev // Search in the direction from page end to start. // Parameters: // handle - A search context handle returned by FPDFText_FindStart. // Return Value: // Whether a match is found. // var FPDFText_FindPrev: function(handle: FPDF_SCHHANDLE): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFText_GetSchResultIndex // Get the starting character index of the search result. // Parameters: // handle - A search context handle returned by FPDFText_FindStart. // Return Value: // Index for the starting character. // var FPDFText_GetSchResultIndex: function(handle: FPDF_SCHHANDLE): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFText_GetSchCount // Get the number of matched characters in the search result. // Parameters: // handle - A search context handle returned by FPDFText_FindStart. // Return Value: // Number of matched characters. // var FPDFText_GetSchCount: function(handle: FPDF_SCHHANDLE): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFText_FindClose // Release a search context. // Parameters: // handle - A search context handle returned by FPDFText_FindStart. // Return Value: // None. // var FPDFText_FindClose: procedure(handle: FPDF_SCHHANDLE); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFLink_LoadWebLinks // Prepare information about weblinks in a page. // Parameters: // text_page - Handle to a text page information structure. // Returned by FPDFText_LoadPage function. // Return Value: // A handle to the page's links information structure, or // NULL if something goes wrong. // Comments: // Weblinks are those links implicitly embedded in PDF pages. PDF also // has a type of annotation called "link" (FPDFTEXT doesn't deal with // that kind of link). FPDFTEXT weblink feature is useful for // automatically detecting links in the page contents. For example, // things like "https://www.example.com" will be detected, so // applications can allow user to click on those characters to activate // the link, even the PDF doesn't come with link annotations. // // FPDFLink_CloseWebLinks must be called to release resources. // var FPDFLink_LoadWebLinks: function(text_page: FPDF_TEXTPAGE): FPDF_PAGELINK; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFLink_CountWebLinks // Count number of detected web links. // Parameters: // link_page - Handle returned by FPDFLink_LoadWebLinks. // Return Value: // Number of detected web links. // var FPDFLink_CountWebLinks: function(link_page: FPDF_PAGELINK): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFLink_GetURL // Fetch the URL information for a detected web link. // Parameters: // link_page - Handle returned by FPDFLink_LoadWebLinks. // link_index - Zero-based index for the link. // buffer - A unicode buffer for the result. // buflen - Number of 16-bit code units (not bytes) for the // buffer, including an additional terminator. // Return Value: // If |buffer| is NULL or |buflen| is zero, return the number of 16-bit // code units (not bytes) needed to buffer the result (an additional // terminator is included in this count). // Otherwise, copy the result into |buffer|, truncating at |buflen| if // the result is too large to fit, and return the number of 16-bit code // units actually copied into the buffer (the additional terminator is // also included in this count). // If |link_index| does not correspond to a valid link, then the result // is an empty string. // var FPDFLink_GetURL: function(link_page: FPDF_PAGELINK; link_index: Integer; buffer: PWideChar; buflen: Integer): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFLink_CountRects // Count number of rectangular areas for the link. // Parameters: // link_page - Handle returned by FPDFLink_LoadWebLinks. // link_index - Zero-based index for the link. // Return Value: // Number of rectangular areas for the link. If |link_index| does // not correspond to a valid link, then 0 is returned. // var FPDFLink_CountRects: function(link_page: FPDF_PAGELINK; link_index: Integer): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFLink_GetRect // Fetch the boundaries of a rectangle for a link. // Parameters: // link_page - Handle returned by FPDFLink_LoadWebLinks. // link_index - Zero-based index for the link. // rect_index - Zero-based index for a rectangle. // left - Pointer to a double value receiving the rectangle // left boundary. // top - Pointer to a double value receiving the rectangle // top boundary. // right - Pointer to a double value receiving the rectangle // right boundary. // bottom - Pointer to a double value receiving the rectangle // bottom boundary. // Return Value: // On success, return TRUE and fill in |left|, |top|, |right|, and // |bottom|. If |link_page| is invalid or if |link_index| does not // correspond to a valid link, then return FALSE, and the out // parameters remain unmodified. // var FPDFLink_GetRect: procedure(link_page: FPDF_PAGELINK; link_index, rect_index: Integer; var left, top, right, bottom: Double); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDFLink_GetTextRange // Fetch the start char index and char count for a link. // Parameters: // link_page - Handle returned by FPDFLink_LoadWebLinks. // link_index - Zero-based index for the link. // start_char_index - pointer to int receiving the start char index // char_count - pointer to int receiving the char count // Return Value: // On success, return TRUE and fill in |start_char_index| and // |char_count|. if |link_page| is invalid or if |link_index| does // not correspond to a valid link, then return FALSE and the out // parameters remain unmodified. // var FPDFLink_GetTextRange: function(link_page: FPDF_PAGELINK; link_index: Integer; start_char_index, char_count: PInteger): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFLink_CloseWebLinks // Release resources used by weblink feature. // Parameters: // link_page - Handle returned by FPDFLink_LoadWebLinks. // Return Value: // None. // var FPDFLink_CloseWebLinks: procedure(link_page: FPDF_PAGELINK); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // *** _FPDF_SEARCH_EX_H *** // Get the character index in |text_page| internal character list. // // text_page - a text page information structure. // nTextIndex - index of the text returned from FPDFText_GetText(). // // Returns the index of the character in internal character list. -1 for error. var FPDFText_GetCharIndexFromTextIndex: function(text_page: FPDF_TEXTPAGE; nTextIndex: Integer): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the text index in |text_page| internal character list. // // text_page - a text page information structure. // nCharIndex - index of the character in internal character list. // // Returns the index of the text returned from FPDFText_GetText(). -1 for error. var FPDFText_GetTextIndexFromCharIndex: function(text_page: FPDF_TEXTPAGE; nCharIndex: Integer): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // *** _FPDF_PROGRESSIVE_H_ *** const //Flags for progressive process status. FPDF_RENDER_READER = 0; FPDF_RENDER_TOBECOUNTINUED = 1; FPDF_RENDER_DONE = 2; FPDF_RENDER_FAILED = 3; // IFPDF_RENDERINFO interface. type PIFSDK_PAUSE = ^IFSDK_PAUSE; IFSDK_PAUSE = record // Version number of the interface. Currently must be 1. version: Integer; // Method: NeedToPauseNow // Check if we need to pause a progressive process now. // Interface Version: // 1 // Implementation Required: // yes // Parameters: // pThis - Pointer to the interface structure itself // Return Value: // Non-zero for pause now, 0 for continue. NeedToPauseNow: function(pThis: PIFSDK_PAUSE): FPDF_BOOL; cdecl; // A user defined data pointer, used by user's application. Can be NULL. user: Pointer; end; PIFSDKPause = ^TIFSDKPause; TIFSDKPause = IFSDK_PAUSE; // Experimental API. // Function: FPDF_RenderPageBitmapWithColorScheme_Start // Start to render page contents to a device independent bitmap // progressively with a specified color scheme for the content. // Parameters: // bitmap - Handle to the device independent bitmap (as the // output buffer). Bitmap handle can be created by // FPDFBitmap_Create function. // page - Handle to the page as returned by FPDF_LoadPage // function. // start_x - Left pixel position of the display area in the // bitmap coordinate. // start_y - Top pixel position of the display area in the // bitmap coordinate. // size_x - Horizontal size (in pixels) for displaying the // page. // size_y - Vertical size (in pixels) for displaying the page. // rotate - Page orientation: 0 (normal), 1 (rotated 90 // degrees clockwise), 2 (rotated 180 degrees), // 3 (rotated 90 degrees counter-clockwise). // flags - 0 for normal display, or combination of flags // defined in fpdfview.h. With FPDF_ANNOT flag, it // renders all annotations that does not require // user-interaction, which are all annotations except // widget and popup annotations. // color_scheme - Color scheme to be used in rendering the |page|. // If null, this function will work similar to // FPDF_RenderPageBitmap_Start(). // pause - The IFSDK_PAUSE interface. A callback mechanism // allowing the page rendering process. // Return value: // Rendering Status. See flags for progressive process status for the // details. var FPDF_RenderPageBitmapWithColorScheme_Start: function(bitmap: FPDF_BITMAP; page: FPDF_PAGE; start_x, start_y, size_x, size_y: Integer; rotate: Integer; flags: Integer; const color_scheme: PFPDF_COLORSCHEME; pause: PIFSDK_PAUSE): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_RenderPageBitmap_Start // Start to render page contents to a device independent bitmap // progressively. // Parameters: // bitmap - Handle to the device independent bitmap (as the // output buffer). Bitmap handle can be created by // FPDFBitmap_Create(). // page - Handle to the page, as returned by FPDF_LoadPage(). // start_x - Left pixel position of the display area in the // bitmap coordinates. // start_y - Top pixel position of the display area in the bitmap // coordinates. // size_x - Horizontal size (in pixels) for displaying the page. // size_y - Vertical size (in pixels) for displaying the page. // rotate - Page orientation: 0 (normal), 1 (rotated 90 degrees // clockwise), 2 (rotated 180 degrees), 3 (rotated 90 // degrees counter-clockwise). // flags - 0 for normal display, or combination of flags // defined in fpdfview.h. With FPDF_ANNOT flag, it // renders all annotations that does not require // user-interaction, which are all annotations except // widget and popup annotations. // pause - The IFSDK_PAUSE interface.A callback mechanism // allowing the page rendering process // Return value: // Rendering Status. See flags for progressive process status for the // details. var FPDF_RenderPageBitmap_Start: function(bitmap: FPDF_BITMAP; page: FPDF_PAGE; start_x, start_y, size_x, size_y: Integer; rotate: Integer; flags: Integer; pause: PIFSDK_PAUSE): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_RenderPage_Continue // Continue rendering a PDF page. // Parameters: // page - Handle to the page, as returned by FPDF_LoadPage(). // pause - The IFSDK_PAUSE interface (a callback mechanism // allowing the page rendering process to be paused // before it's finished). This can be NULL if you // don't want to pause. // Return value: // The rendering status. See flags for progressive process status for // the details. var FPDF_RenderPage_Continue: function(page: FPDF_PAGE; pause: PIFSDK_PAUSE): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_RenderPage_Close // Release the resource allocate during page rendering. Need to be // called after finishing rendering or // cancel the rendering. // Parameters: // page - Handle to the page, as returned by FPDF_LoadPage(). // Return value: // None. var FPDF_RenderPage_Close: procedure(page: FPDF_PAGE); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // *** _FPDF_SIGNATURE_H_ *** // Experimental API. // Function: FPDF_GetSignatureCount // Get total number of signatures in the document. // Parameters: // document - Handle to document. Returned by FPDF_LoadDocument(). // Return value: // Total number of signatures in the document on success, -1 on error. var FPDF_GetSignatureCount: function(document: FPDF_DOCUMENT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_GetSignatureObject // Get the Nth signature of the document. // Parameters: // document - Handle to document. Returned by FPDF_LoadDocument(). // index - Index into the array of signatures of the document. // Return value: // Returns the handle to the signature, or NULL on failure. The caller // does not take ownership of the returned FPDF_SIGNATURE. Instead, it // remains valid until FPDF_CloseDocument() is called for the document. var FPDF_GetSignatureObject: function(document: FPDF_DOCUMENT; index: Integer): FPDF_SIGNATURE; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDFSignatureObj_GetContents // Get the contents of a signature object. // Parameters: // signature - Handle to the signature object. Returned by // FPDF_GetSignatureObject(). // buffer - The address of a buffer that receives the contents. // length - The size, in bytes, of |buffer|. // Return value: // Returns the number of bytes in the contents on success, 0 on error. // // For public-key signatures, |buffer| is either a DER-encoded PKCS#1 binary or // a DER-encoded PKCS#7 binary. If |length| is less than the returned length, or // |buffer| is NULL, |buffer| will not be modified. var FPDFSignatureObj_GetContents: function(signature: FPDF_SIGNATURE; buffer: Pointer; length: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDFSignatureObj_GetByteRange // Get the byte range of a signature object. // Parameters: // signature - Handle to the signature object. Returned by // FPDF_GetSignatureObject(). // buffer - The address of a buffer that receives the // byte range. // length - The size, in ints, of |buffer|. // Return value: // Returns the number of ints in the byte range on // success, 0 on error. // // |buffer| is an array of pairs of integers (starting byte offset, // length in bytes) that describes the exact byte range for the digest // calculation. If |length| is less than the returned length, or // |buffer| is NULL, |buffer| will not be modified. var FPDFSignatureObj_GetByteRange: function(signature: FPDF_SIGNATURE; buffer: PInteger; length: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDFSignatureObj_GetSubFilter // Get the encoding of the value of a signature object. // Parameters: // signature - Handle to the signature object. Returned by // FPDF_GetSignatureObject(). // buffer - The address of a buffer that receives the encoding. // length - The size, in bytes, of |buffer|. // Return value: // Returns the number of bytes in the encoding name (including the // trailing NUL character) on success, 0 on error. // // The |buffer| is always encoded in 7-bit ASCII. If |length| is less than the // returned length, or |buffer| is NULL, |buffer| will not be modified. var FPDFSignatureObj_GetSubFilter: function(signature: FPDF_SIGNATURE; buffer: PAnsiChar; length: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDFSignatureObj_GetReason // Get the reason (comment) of the signature object. // Parameters: // signature - Handle to the signature object. Returned by // FPDF_GetSignatureObject(). // buffer - The address of a buffer that receives the reason. // length - The size, in bytes, of |buffer|. // Return value: // Returns the number of bytes in the reason on success, 0 on error. // // Regardless of the platform, the |buffer| is always in UTF-16LE encoding. The // string is terminated by a UTF16 NUL character. If |length| is less than the // returned length, or |buffer| is NULL, |buffer| will not be modified. var FPDFSignatureObj_GetReason: function(signature: FPDF_SIGNATURE; buffer: Pointer; length: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDFSignatureObj_GetTime // Get the time of signing of a signature object. // Parameters: // signature - Handle to the signature object. Returned by // FPDF_GetSignatureObject(). // buffer - The address of a buffer that receives the time. // length - The size, in bytes, of |buffer|. // Return value: // Returns the number of bytes in the encoding name (including the // trailing NUL character) on success, 0 on error. // // The |buffer| is always encoded in 7-bit ASCII. If |length| is less than the // returned length, or |buffer| is NULL, |buffer| will not be modified. // // The format of time is expected to be D:YYYYMMDDHHMMSS+XX'YY', i.e. it's // percision is seconds, with timezone information. This value should be used // only when the time of signing is not available in the (PKCS#7 binary) // signature. var FPDFSignatureObj_GetTime: function(signature: FPDF_SIGNATURE; buffer: PAnsiChar; length: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDFSignatureObj_GetDocMDPPermission // Get the DocMDP permission of a signature object. // Parameters: // signature - Handle to the signature object. Returned by // FPDF_GetSignatureObject(). // Return value: // Returns the permission (1, 2 or 3) on success, 0 on error. var FPDFSignatureObj_GetDocMDPPermission: function(signature: FPDF_SIGNATURE): UInt32; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // *** _FPDF_DOC_H_ *** const PDFACTION_UNSUPPORTED = 0; // Unsupported action type. PDFACTION_GOTO = 1; // Go to a destination within current document. PDFACTION_REMOTEGOTO = 2; // Go to a destination within another document. PDFACTION_URI = 3; // Universal Resource Identifier, including web pages and // other Internet based resources. PDFACTION_LAUNCH = 4; // Launch an application or open a file. PDFACTION_EMBEDDEDGOTO = 5; // Go to a destination in an embedded file. // View destination fit types. See pdfmark reference v9, page 48. PDFDEST_VIEW_UNKNOWN_MODE = 0; PDFDEST_VIEW_XYZ = 1; PDFDEST_VIEW_FIT = 2; PDFDEST_VIEW_FITH = 3; PDFDEST_VIEW_FITV = 4; PDFDEST_VIEW_FITR = 5; PDFDEST_VIEW_FITB = 6; PDFDEST_VIEW_FITBH = 7; PDFDEST_VIEW_FITBV = 8; // The file identifier entry type. See section 14.4 "File Identifiers" of the // ISO 32000-1:2008 spec. type FPDF_FILEIDTYPE = ( FILEIDTYPE_PERMANENT = 0, FILEIDTYPE_CHANGING = 1 ); // Get the first child of |bookmark|, or the first top-level bookmark item. // // document - handle to the document. // bookmark - handle to the current bookmark. Pass NULL for the first top // level item. // // Returns a handle to the first child of |bookmark| or the first top-level // bookmark item. NULL if no child or top-level bookmark found. // Note that another name for the bookmarks is the document outline, as // described in ISO 32000-1:2008, section 12.3.3. var FPDFBookmark_GetFirstChild: function(document: FPDF_DOCUMENT; bookmark: FPDF_BOOKMARK): FPDF_BOOKMARK; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the next sibling of |bookmark|. // // document - handle to the document. // bookmark - handle to the current bookmark. // // Returns a handle to the next sibling of |bookmark|, or NULL if this is the // last bookmark at this level. // // Note that the caller is responsible for handling circular bookmark // references, as may arise from malformed documents. var FPDFBookmark_GetNextSibling: function(document: FPDF_DOCUMENT; bookmark: FPDF_BOOKMARK): FPDF_BOOKMARK; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the title of |bookmark|. // // bookmark - handle to the bookmark. // buffer - buffer for the title. May be NULL. // buflen - the length of the buffer in bytes. May be 0. // // Returns the number of bytes in the title, including the terminating NUL // character. The number of bytes is returned regardless of the |buffer| and // |buflen| parameters. // // Regardless of the platform, the |buffer| is always in UTF-16LE encoding. The // string is terminated by a UTF16 NUL character. If |buflen| is less than the // required length, or |buffer| is NULL, |buffer| will not be modified. var FPDFBookmark_GetTitle: function(bookmark: FPDF_BOOKMARK; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the number of chlidren of |bookmark|. // // bookmark - handle to the bookmark. // // Returns a signed integer that represents the number of sub-items the given // bookmark has. If the value is positive, child items shall be shown by default // (open state). If the value is negative, child items shall be hidden by // default (closed state). Please refer to PDF 32000-1:2008, Table 153. // Returns 0 if the bookmark has no children or is invalid. var FPDFBookmark_GetCount: function(bookmark: FPDF_BOOKMARK): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Find the bookmark with |title| in |document|. // // document - handle to the document. // title - the UTF-16LE encoded Unicode title for which to search. // // Returns the handle to the bookmark, or NULL if |title| can't be found. // // FPDFBookmark_Find() will always return the first bookmark found even if // multiple bookmarks have the same |title|. var FPDFBookmark_Find: function(document: FPDF_DOCUMENT; title: FPDF_WIDESTRING): FPDF_BOOKMARK; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the destination associated with |bookmark|. // // document - handle to the document. // bookmark - handle to the bookmark. // // Returns the handle to the destination data, or NULL if no destination is // associated with |bookmark|. var FPDFBookmark_GetDest: function(document: FPDF_DOCUMENT; bookmark: FPDF_BOOKMARK): FPDF_DEST; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the action associated with |bookmark|. // // bookmark - handle to the bookmark. // // Returns the handle to the action data, or NULL if no action is associated // with |bookmark|. // If this function returns a valid handle, it is valid as long as |bookmark| is // valid. // If this function returns NULL, FPDFBookmark_GetDest() should be called to get // the |bookmark| destination data. var FPDFBookmark_GetAction: function(bookmark: FPDF_BOOKMARK): FPDF_ACTION; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the type of |action|. // // action - handle to the action. // // Returns one of: // PDFACTION_UNSUPPORTED // PDFACTION_GOTO // PDFACTION_REMOTEGOTO // PDFACTION_URI // PDFACTION_LAUNCH var FPDFAction_GetType: function(action: FPDF_ACTION): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the destination of |action|. // // document - handle to the document. // action - handle to the action. |action| must be a |PDFACTION_GOTO| or // |PDFACTION_REMOTEGOTO|. // // Returns a handle to the destination data, or NULL on error, typically // because the arguments were bad or the action was of the wrong type. // // In the case of |PDFACTION_REMOTEGOTO|, you must first call // FPDFAction_GetFilePath(), then load the document at that path, then pass // the document handle from that document as |document| to FPDFAction_GetDest(). var FPDFAction_GetDest: function(document: FPDF_DOCUMENT; action: FPDF_ACTION): FPDF_DEST; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the file path of |action|. // // action - handle to the action. |action| must be a |PDFACTION_LAUNCH| or // |PDFACTION_REMOTEGOTO|. // buffer - a buffer for output the path string. May be NULL. // buflen - the length of the buffer, in bytes. May be 0. // // Returns the number of bytes in the file path, including the trailing NUL // character, or 0 on error, typically because the arguments were bad or the // action was of the wrong type. // // Regardless of the platform, the |buffer| is always in UTF-8 encoding. // If |buflen| is less than the returned length, or |buffer| is NULL, |buffer| // will not be modified. var FPDFAction_GetFilePath: function(action: FPDF_ACTION; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the URI path of |action|. // // document - handle to the document. // action - handle to the action. Must be a |PDFACTION_URI|. // buffer - a buffer for the path string. May be NULL. // buflen - the length of the buffer, in bytes. May be 0. // // Returns the number of bytes in the URI path, including the trailing NUL // character, or 0 on error, typically because the arguments were bad or the // action was of the wrong type. // // The |buffer| may contain badly encoded data. The caller should validate the // output. e.g. Check to see if it is UTF-8. // // If |buflen| is less than the returned length, or |buffer| is NULL, |buffer| // will not be modified. // // Historically, the documentation for this API claimed |buffer| is always // encoded in 7-bit ASCII, but did not actually enforce it. // https://pdfium.googlesource.com/pdfium.git/+/d609e84cee2e14a18333247485af91df48a40592 // added that enforcement, but that did not work well for real world PDFs that // used UTF-8. As of this writing, this API reverted back to its original // behavior prior to commit d609e84cee. var FPDFAction_GetURIPath: function(document: FPDF_DOCUMENT; action: FPDF_ACTION; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the page index of |dest|. // // document - handle to the document. // dest - handle to the destination. // // Returns the 0-based page index containing |dest|. Returns -1 on error. var FPDFDest_GetDestPageIndex: function(document: FPDF_DOCUMENT; dest: FPDF_DEST): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the view (fit type) specified by |dest|. // // dest - handle to the destination. // pNumParams - receives the number of view parameters, which is at most 4. // pParams - buffer to write the view parameters. Must be at least 4 // FS_FLOATs long. // Returns one of the PDFDEST_VIEW_* constants, PDFDEST_VIEW_UNKNOWN_MODE if // |dest| does not specify a view. var FPDFDest_GetView: function(dest: FPDF_DEST; pNumParams: PLongWord; pParams: PFS_FLOAT): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the (x, y, zoom) location of |dest| in the destination page, if the // destination is in [page /XYZ x y zoom] syntax. // // dest - handle to the destination. // hasXVal - out parameter; true if the x value is not null // hasYVal - out parameter; true if the y value is not null // hasZoomVal - out parameter; true if the zoom value is not null // x - out parameter; the x coordinate, in page coordinates. // y - out parameter; the y coordinate, in page coordinates. // zoom - out parameter; the zoom value. // Returns TRUE on successfully reading the /XYZ value. // // Note the [x, y, zoom] values are only set if the corresponding hasXVal, // hasYVal or hasZoomVal flags are true. var FPDFDest_GetLocationInPage: function(dest: FPDF_DEST; var hasXVal, hasYVal, hasZoomVal: FPDF_BOOL; var x, y, zoom: FS_FLOAT): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Find a link at point (|x|,|y|) on |page|. // // page - handle to the document page. // x - the x coordinate, in the page coordinate system. // y - the y coordinate, in the page coordinate system. // // Returns a handle to the link, or NULL if no link found at the given point. // // You can convert coordinates from screen coordinates to page coordinates using // FPDF_DeviceToPage(). var FPDFLink_GetLinkAtPoint: function(page: FPDF_PAGE; x, y: Double): FPDF_LINK; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Find the Z-order of link at point (|x|,|y|) on |page|. // // page - handle to the document page. // x - the x coordinate, in the page coordinate system. // y - the y coordinate, in the page coordinate system. // // Returns the Z-order of the link, or -1 if no link found at the given point. // Larger Z-order numbers are closer to the front. // // You can convert coordinates from screen coordinates to page coordinates using // FPDF_DeviceToPage(). var FPDFLink_GetLinkZOrderAtPoint: function(page: FPDF_PAGE; x, y: Double): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get destination info for |link|. // // document - handle to the document. // link - handle to the link. // // Returns a handle to the destination, or NULL if there is no destination // associated with the link. In this case, you should call FPDFLink_GetAction() // to retrieve the action associated with |link|. var FPDFLink_GetDest: function(document: FPDF_DOCUMENT; link: FPDF_LINK): FPDF_DEST; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get action info for |link|. // // link - handle to the link. // // Returns a handle to the action associated to |link|, or NULL if no action. // If this function returns a valid handle, it is valid as long as |link| is // valid. var FPDFLink_GetAction: function(link: FPDF_LINK): FPDF_ACTION; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Enumerates all the link annotations in |page|. // // page - handle to the page. // start_pos - the start position, should initially be 0 and is updated with // the next start position on return. // link_annot - the link handle for |startPos|. // // Returns TRUE on success. var FPDFLink_Enumerate: function(page: FPDF_PAGE; var start_pos: Integer; link_annot: PFPDF_LINK): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Gets FPDF_ANNOTATION object for |link_annot|. // // page - handle to the page in which FPDF_LINK object is present. // link_annot - handle to link annotation. // // Returns FPDF_ANNOTATION from the FPDF_LINK and NULL on failure, // if the input link annot or page is NULL. var FPDFLink_GetAnnot: function(page: FPDF_PAGE; link_annot: FPDF_LINK): FPDF_ANNOTATION; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the rectangle for |link_annot|. // // link_annot - handle to the link annotation. // rect - the annotation rectangle. // // Returns true on success. var FPDFLink_GetAnnotRect: function(link_annot: FPDF_LINK; rect: PFS_RECTF): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the count of quadrilateral points to the |link_annot|. // // link_annot - handle to the link annotation. // // Returns the count of quadrilateral points. var FPDFLink_CountQuadPoints: function(link_annot: FPDF_LINK): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the quadrilateral points for the specified |quad_index| in |link_annot|. // // link_annot - handle to the link annotation. // quad_index - the specified quad point index. // quad_points - receives the quadrilateral points. // // Returns true on success. var FPDFLink_GetQuadPoints: function(link_annot: FPDF_LINK; quad_index: Integer; quad_points: PFS_QUADPOINTSF): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Gets an additional-action from |page|. // // page - handle to the page, as returned by FPDF_LoadPage(). // aa_type - the type of the page object's addtional-action, defined // in public/fpdf_formfill.h // // Returns the handle to the action data, or NULL if there is no // additional-action of type |aa_type|. // If this function returns a valid handle, it is valid as long as |page| is // valid. var FPDF_GetPageAAction: function(page: FPDF_PAGE; aa_type: Integer): FPDF_ACTION; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the file identifer defined in the trailer of |document|. // // document - handle to the document. // id_type - the file identifier type to retrieve. // buffer - a buffer for the file identifier. May be NULL. // buflen - the length of the buffer, in bytes. May be 0. // // Returns the number of bytes in the file identifier, including the NUL // terminator. // // The |buffer| is always a byte string. The |buffer| is followed by a NUL // terminator. If |buflen| is less than the returned length, or |buffer| is // NULL, |buffer| will not be modified. var FPDF_GetFileIdentifier: function(document: FPDF_DOCUMENT; id_type: FPDF_FILEIDTYPE; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get meta-data |tag| content from |document|. // // document - handle to the document. // tag - the tag to retrieve. The tag can be one of: // Title, Author, Subject, Keywords, Creator, Producer, // CreationDate, or ModDate. // For detailed explanations of these tags and their respective // values, please refer to PDF Reference 1.6, section 10.2.1, // 'Document Information Dictionary'. // buffer - a buffer for the tag. May be NULL. // buflen - the length of the buffer, in bytes. May be 0. // // Returns the number of bytes in the tag, including trailing zeros. // // The |buffer| is always encoded in UTF-16LE. The |buffer| is followed by two // bytes of zeros indicating the end of the string. If |buflen| is less than // the returned length, or |buffer| is NULL, |buffer| will not be modified. // // For linearized files, FPDFAvail_IsFormAvail must be called before this, and // it must have returned PDF_FORM_AVAIL or PDF_FORM_NOTEXIST. Before that, there // is no guarantee the metadata has been loaded. var FPDF_GetMetaText: function(doc: FPDF_DOCUMENT; tag: FPDF_BYTESTRING; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the page label for |page_index| from |document|. // // document - handle to the document. // page_index - the 0-based index of the page. // buffer - a buffer for the page label. May be NULL. // buflen - the length of the buffer, in bytes. May be 0. // // Returns the number of bytes in the page label, including trailing zeros. // // The |buffer| is always encoded in UTF-16LE. The |buffer| is followed by two // bytes of zeros indicating the end of the string. If |buflen| is less than // the returned length, or |buffer| is NULL, |buffer| will not be modified. var FPDF_GetPageLabel: function(document: FPDF_DOCUMENT; page_index: integer; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // *** _FPDF_SYSFONTINFO_H_ *** const // Character sets for the font FXFONT_ANSI_CHARSET = 0; FXFONT_DEFAULT_CHARSET = 1; FXFONT_SYMBOL_CHARSET = 2; FXFONT_SHIFTJIS_CHARSET = 128; FXFONT_HANGEUL_CHARSET = 129; FXFONT_GB2312_CHARSET = 134; FXFONT_CHINESEBIG5_CHARSET = 136; FXFONT_GREEK_CHARSET = 161; FXFONT_VIETNAMESE_CHARSET = 163; FXFONT_HEBREW_CHARSET = 177; FXFONT_ARABIC_CHARSET = 178; FXFONT_CYRILLIC_CHARSET = 204; FXFONT_THAI_CHARSET = 222; FXFONT_EASTERNEUROPEAN_CHARSET = 238; // Font pitch and family flags FXFONT_FF_FIXEDPITCH = 1; FXFONT_FF_ROMAN = 1 shl 4; FXFONT_FF_SCRIPT = 4 shl 4; // Typical weight values FXFONT_FW_NORMAL = 400; FXFONT_FW_BOLD = 700; // Interface: FPDF_SYSFONTINFO // Interface for getting system font information and font mapping type PFPDF_SYSFONTINFO = ^FPDF_SYSFONTINFO; FPDF_SYSFONTINFO = record // Version number of the interface. Currently must be 1. version: Integer; // Method: Release // Give implementation a chance to release any data after the // interface is no longer used. // Interface Version: // 1 // Implementation Required: // No // Parameters: // pThis - Pointer to the interface structure itself // Return Value: // None // Comments: // Called by PDFium during the final cleanup process. Release: procedure(pThis: PFPDF_SYSFONTINFO); cdecl; // Method: EnumFonts // Enumerate all fonts installed on the system // Interface Version: // 1 // Implementation Required: // No // Parameters: // pThis - Pointer to the interface structure itself // pMapper - An opaque pointer to internal font mapper, used // when calling FPDF_AddInstalledFont(). // Return Value: // None // Comments: // Implementations should call FPDF_AddInstalledFont() function for // each font found. Only TrueType/OpenType and Type1 fonts are // accepted by PDFium. EnumFonts: procedure(pThis: PFPDF_SYSFONTINFO; pMapper: Pointer); cdecl; // Method: MapFont // Use the system font mapper to get a font handle from requested // parameters. // Interface Version: // 1 // Implementation Required: // Required if GetFont method is not implemented. // Parameters: // pThis - Pointer to the interface structure itself // weight - Weight of the requested font. 400 is normal and // 700 is bold. // bItalic - Italic option of the requested font, TRUE or // FALSE. // charset - Character set identifier for the requested font. // See above defined constants. // pitch_family - A combination of flags. See above defined // constants. // face - Typeface name. Currently use system local encoding // only. // bExact - Obsolete: this parameter is now ignored. // Return Value: // An opaque pointer for font handle, or NULL if system mapping is // not supported. // Comments: // If the system supports native font mapper (like Windows), // implementation can implement this method to get a font handle. // Otherwise, PDFium will do the mapping and then call GetFont // method. Only TrueType/OpenType and Type1 fonts are accepted // by PDFium. MapFont: function(pThis: PFPDF_SYSFONTINFO; weight, bItalic, charset, pitch_family: Integer; face: PAnsiChar; bExact: PInteger): Pointer; cdecl; // Method: GetFont // Get a handle to a particular font by its internal ID // Interface Version: // 1 // Implementation Required: // Required if MapFont method is not implemented. // Return Value: // An opaque pointer for font handle. // Parameters: // pThis - Pointer to the interface structure itself // face - Typeface name in system local encoding. // Comments: // If the system mapping not supported, PDFium will do the font // mapping and use this method to get a font handle. GetFont: function(pThis: PFPDF_SYSFONTINFO; face: PAnsiChar): Pointer; cdecl; // Method: GetFontData // Get font data from a font // Interface Version: // 1 // Implementation Required: // Yes // Parameters: // pThis - Pointer to the interface structure itself // hFont - Font handle returned by MapFont or GetFont method // table - TrueType/OpenType table identifier (refer to // TrueType specification), or 0 for the whole file. // buffer - The buffer receiving the font data. Can be NULL if // not provided. // buf_size - Buffer size, can be zero if not provided. // Return Value: // Number of bytes needed, if buffer not provided or not large // enough, or number of bytes written into buffer otherwise. // Comments: // Can read either the full font file, or a particular // TrueType/OpenType table. GetFontData: function(pThis: PFPDF_SYSFONTINFO; hFont: Pointer; table: LongWord; buffer: PWideChar; buf_size: LongWord): LongWord; cdecl; // Method: GetFaceName // Get face name from a font handle // Interface Version: // 1 // Implementation Required: // No // Parameters: // pThis - Pointer to the interface structure itself // hFont - Font handle returned by MapFont or GetFont method // buffer - The buffer receiving the face name. Can be NULL if // not provided // buf_size - Buffer size, can be zero if not provided // Return Value: // Number of bytes needed, if buffer not provided or not large // enough, or number of bytes written into buffer otherwise. GetFaceName: function(pThis: PFPDF_SYSFONTINFO; hFont: Pointer; buffer: PAnsiChar; buf_size: LongWord): LongWord; cdecl; // Method: GetFontCharset // Get character set information for a font handle // Interface Version: // 1 // Implementation Required: // No // Parameters: // pThis - Pointer to the interface structure itself // hFont - Font handle returned by MapFont or GetFont method // Return Value: // Character set identifier. See defined constants above. GetFontCharset: function(pThis: PFPDF_SYSFONTINFO; hFont: Pointer): Integer; cdecl; // Method: DeleteFont // Delete a font handle // Interface Version: // 1 // Implementation Required: // Yes // Parameters: // pThis - Pointer to the interface structure itself // hFont - Font handle returned by MapFont or GetFont method // Return Value: // None DeleteFont: procedure(pThis: PFPDF_SYSFONTINFO; hFont: Pointer); cdecl; end; PFPdfSysFontInfo = ^TFPdfSysFontInfo; TFPdfSysFontInfo = FPDF_SYSFONTINFO; // Struct: FPDF_CharsetFontMap // Provides the name of a font to use for a given charset value. PFPDF_CharsetFontMap = ^FPDF_CharsetFontMap; FPDF_CharsetFontMap = record charset: Integer; // Character Set Enum value, see FXFONT_*_CHARSET above. fontname: PAnsiChar; // Name of default font to use with that charset. end; PFPdfCharsetFontMap = ^TFPdfCharsetFontMap; TFPdfCharsetFontMap = FPDF_CharsetFontMap; // Function: FPDF_GetDefaultTTFMap // Returns a pointer to the default character set to TT Font name map. The // map is an array of FPDF_CharsetFontMap structs, with its end indicated // by a { -1, NULL } entry. // Parameters: // None. // Return Value: // Pointer to the Charset Font Map. // Note: // Once FPDF_GetDefaultTTFMapCount() and FPDF_GetDefaultTTFMapEntry() are no // longer experimental, this API will be marked as deprecated. // See https://crbug.com/348468114 var FPDF_GetDefaultTTFMap: function: PFPDF_CharsetFontMap; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // // Function: FPDF_GetDefaultTTFMapCount // Returns the number of entries in the default character set to TT Font name // map. // Parameters: // None. // Return Value: // The number of entries in the map. var FPDF_GetDefaultTTFMapCount: function(): SIZE_T; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // // Function: FPDF_GetDefaultTTFMapEntry // Returns an entry in the default character set to TT Font name map. // Parameters: // index - The index to the entry in the map to retrieve. // Return Value: // A pointer to the entry, if it is in the map, or NULL if the index is out // of bounds. var FPDF_GetDefaultTTFMapEntry: function(index: SIZE_T): PFPDF_CharsetFontMap; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_AddInstalledFont // Add a system font to the list in PDFium. // Comments: // This function is only called during the system font list building // process. // Parameters: // mapper - Opaque pointer to Foxit font mapper // face - The font face name // charset - Font character set. See above defined constants. // Return Value: // None. var FPDF_AddInstalledFont: procedure(mapper: Pointer; face: PAnsiChar; charset: Integer); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_SetSystemFontInfo // Set the system font info interface into PDFium // Parameters: // pFontInfo - Pointer to a FPDF_SYSFONTINFO structure // Return Value: // None // Comments: // Platform support implementation should implement required methods of // FFDF_SYSFONTINFO interface, then call this function during PDFium // initialization process. // // Call this with NULL to tell PDFium to stop using a previously set // |FPDF_SYSFONTINFO|. var FPDF_SetSystemFontInfo: procedure(pFontInfo: PFPDF_SYSFONTINFO); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_GetDefaultSystemFontInfo // Get default system font info interface for current platform // Parameters: // None // Return Value: // Pointer to a FPDF_SYSFONTINFO structure describing the default // interface, or NULL if the platform doesn't have a default interface. // Application should call FPDF_FreeDefaultSystemFontInfo to free the // returned pointer. // Comments: // For some platforms, PDFium implements a default version of system // font info interface. The default implementation can be passed to // FPDF_SetSystemFontInfo(). var FPDF_GetDefaultSystemFontInfo: function(): FPDF_SYSFONTINFO; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_FreeDefaultSystemFontInfo // Free a default system font info interface // Parameters: // pFontInfo - Pointer to a FPDF_SYSFONTINFO structure // Return Value: // None // Comments: // This function should be called on the output from // FPDF_GetDefaultSystemFontInfo() once it is no longer needed. var FPDF_FreeDefaultSystemFontInfo: procedure(pFontInfo: PFPDF_SYSFONTINFO); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // *** _FPDF_EXT_H_ *** const //flags for type of unsupport object. FPDF_UNSP_DOC_XFAFORM = 1; // Unsupported XFA form. FPDF_UNSP_DOC_PORTABLECOLLECTION = 2; // Unsupported portable collection. FPDF_UNSP_DOC_ATTACHMENT = 3; // Unsupported attachment. FPDF_UNSP_DOC_SECURITY = 4; // Unsupported security. FPDF_UNSP_DOC_SHAREDREVIEW = 5; // Unsupported shared review. FPDF_UNSP_DOC_SHAREDFORM_ACROBAT = 6; // Unsupported shared form, acrobat. FPDF_UNSP_DOC_SHAREDFORM_FILESYSTEM = 7; // Unsupported shared form, filesystem. FPDF_UNSP_DOC_SHAREDFORM_EMAIL = 8; // Unsupported shared form, email. FPDF_UNSP_ANNOT_3DANNOT = 11; // Unsupported 3D annotation. FPDF_UNSP_ANNOT_MOVIE = 12; // Unsupported movie annotation. FPDF_UNSP_ANNOT_SOUND = 13; // Unsupported sound annotation. FPDF_UNSP_ANNOT_SCREEN_MEDIA = 14; // Unsupported screen media annotation. FPDF_UNSP_ANNOT_SCREEN_RICHMEDIA = 15; // Unsupported screen rich media annotation. FPDF_UNSP_ANNOT_ATTACHMENT = 16; // Unsupported attachment annotation. FPDF_UNSP_ANNOT_SIG = 17; // Unsupported signature annotation. type PUNSUPPORT_INFO = ^UNSUPPORT_INFO; UNSUPPORT_INFO = record // Version number of the interface. Must be 1. version: Integer; // Unsupported object notification function. // Interface Version: 1 // Implementation Required: Yes // // pThis - pointer to the interface structure. // nType - the type of unsupported object. One of the |FPDF_UNSP_*| entries. FSDK_UnSupport_Handler: procedure(pThis: PUNSUPPORT_INFO; nType: Integer); cdecl; end; PUnsupportInfo = ^TUnsupportInfo; TUnsupportInfo = UNSUPPORT_INFO; // Setup an unsupported object handler. // // unsp_info - Pointer to an UNSUPPORT_INFO structure. // // Returns TRUE on success. var FSDK_SetUnSpObjProcessHandler: function(unsp_info: PUNSUPPORT_INFO): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Set replacement function for calls to time(). // // This API is intended to be used only for testing, thus may cause PDFium to // behave poorly in production environments. // // func - Function pointer to alternate implementation of time(), or // NULL to restore to actual time() call itself. type TFPDFTimeFunction = function: TIME_T; cdecl; var FSDK_SetTimeFunction: procedure(func: TFPDFTimeFunction); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Set replacement function for calls to localtime(). // // This API is intended to be used only for testing, thus may cause PDFium to // behave poorly in production environments. // // func - Function pointer to alternate implementation of localtime(), or // NULL to restore to actual localtime() call itself. type PFPDF_struct_tm = ^FPDF_struct_tm; FPDF_struct_tm = record tm_sec: Integer; tm_min: Integer; tm_hour: Integer; tm_mday: Integer; tm_mon: Integer; tm_year: Integer; tm_wday: Integer; tm_yday: Integer; tm_isdst: Integer; end; type TFPDFLocaltimeFunction = function(timer: PTIME_T): PFPDF_struct_tm; cdecl; var FSDK_SetLocaltimeFunction: procedure(func: TFPDFLocaltimeFunction); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; const PAGEMODE_UNKNOWN = -1; // Unknown page mode. PAGEMODE_USENONE = 0; // Document outline, and thumbnails hidden. PAGEMODE_USEOUTLINES = 1; // Document outline visible. PAGEMODE_USETHUMBS = 2; // Thumbnail images visible. PAGEMODE_FULLSCREEN = 3; // Full-screen mode, no menu bar, window controls, or other decorations visible. PAGEMODE_USEOC = 4; // Optional content group panel visible. PAGEMODE_USEATTACHMENTS = 5; // Attachments panel visible. // Get the document's PageMode. // // doc - Handle to document. // // Returns one of the |PAGEMODE_*| flags defined above. // // The page mode defines how the document should be initially displayed. var FPDFDoc_GetPageMode: function(document: FPDF_DOCUMENT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // *** _FPDF_DATAAVAIL_H_ *** const PDF_LINEARIZATION_UNKNOWN = -1; PDF_NOT_LINEARIZED = 0; PDF_LINEARIZED = 1; PDF_DATA_ERROR = -1; PDF_DATA_NOTAVAIL = 0; PDF_DATA_AVAIL = 1; PDF_FORM_ERROR = -1; PDF_FORM_NOTAVAIL = 0; PDF_FORM_AVAIL = 1; PDF_FORM_NOTEXIST = 2; type // Interface for checking whether sections of the file are available. PFX_FILEAVAIL = ^FX_FILEAVAIL; FX_FILEAVAIL = record // Version number of the interface. Must be 1. version: Integer; // Reports if the specified data section is currently available. A section is // available if all bytes in the section are available. // // Interface Version: 1 // Implementation Required: Yes // // pThis - pointer to the interface structure. // offset - the offset of the data section in the file. // size - the size of the data section. // // Returns true if the specified data section at |offset| of |size| // is available. IsDataAvail: function(pThis: PFX_FILEAVAIL; offset, size: SIZE_T): FPDF_BOOL; cdecl; end; PFXFileAvail = ^TFXFileAvail; TFXFileAvail = FX_FILEAVAIL; // Create a document availability provider. // // file_avail - pointer to file availability interface. // file - pointer to a file access interface. // // Returns a handle to the document availability provider, or NULL on error. // // FPDFAvail_Destroy() must be called when done with the availability provider. var FPDFAvail_Create: function(file_avail: PFX_FILEAVAIL; file_: PFPDF_FILEACCESS): FPDF_AVAIL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Destroy the |avail| document availability provider. // // avail - handle to document availability provider to be destroyed. var FPDFAvail_Destroy: procedure(avail: FPDF_AVAIL); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Download hints interface. Used to receive hints for further downloading. type PFX_DOWNLOADHINTS = ^FX_DOWNLOADHINTS; FX_DOWNLOADHINTS = record // Version number of the interface. Must be 1. version: Integer; // Add a section to be downloaded. // // Interface Version: 1 // Implementation Required: Yes // // pThis - pointer to the interface structure. // offset - the offset of the hint reported to be downloaded. // size - the size of the hint reported to be downloaded. // // The |offset| and |size| of the section may not be unique. Part of the // section might be already available. The download manager must deal with // overlapping sections. AddSegment: procedure(pThis: PFX_DOWNLOADHINTS; offset, size: SIZE_T); cdecl; end; PFXDownloadHints = ^TFXDownloadHints; TFXDownloadHints = FX_DOWNLOADHINTS; // Checks if the document is ready for loading, if not, gets download hints. // // avail - handle to document availability provider. // hints - pointer to a download hints interface. // // Returns one of: // PDF_DATA_ERROR: A common error is returned. Data availability unknown. // PDF_DATA_NOTAVAIL: Data not yet available. // PDF_DATA_AVAIL: Data available. // // Applications should call this function whenever new data arrives, and process // all the generated download hints, if any, until the function returns // |PDF_DATA_ERROR| or |PDF_DATA_AVAIL|. // if hints is nullptr, the function just check current document availability. // // Once all data is available, call FPDFAvail_GetDocument() to get a document // handle. var FPDFAvail_IsDocAvail: function(avail: FPDF_AVAIL; hints: PFX_DOWNLOADHINTS): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get document from the availability provider. // // avail - handle to document availability provider. // password - password for decrypting the PDF file. Optional. // // Returns a handle to the document. // // When FPDFAvail_IsDocAvail() returns TRUE, call FPDFAvail_GetDocument() to // retrieve the document handle. // See the comments for FPDF_LoadDocument() regarding the encoding for // |password|. var FPDFAvail_GetDocument: function(avail: FPDF_AVAIL; password: FPDF_BYTESTRING): FPDF_DOCUMENT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the page number for the first available page in a linearized PDF. // // doc - document handle. // // Returns the zero-based index for the first available page. // // For most linearized PDFs, the first available page will be the first page, // however, some PDFs might make another page the first available page. // For non-linearized PDFs, this function will always return zero. var FPDFAvail_GetFirstPageNum: function(doc: FPDF_DOCUMENT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Check if |page_index| is ready for loading, if not, get the // |FX_DOWNLOADHINTS|. // // avail - handle to document availability provider. // page_index - index number of the page. Zero for the first page. // hints - pointer to a download hints interface. Populated if // |page_index| is not available. // // Returns one of: // PDF_DATA_ERROR: A common error is returned. Data availability unknown. // PDF_DATA_NOTAVAIL: Data not yet available. // PDF_DATA_AVAIL: Data available. // // This function can be called only after FPDFAvail_GetDocument() is called. // Applications should call this function whenever new data arrives and process // all the generated download |hints|, if any, until this function returns // |PDF_DATA_ERROR| or |PDF_DATA_AVAIL|. Applications can then perform page // loading. // if hints is nullptr, the function just check current availability of // specified page. var FPDFAvail_IsPageAvail: function(avail: FPDF_AVAIL; page_index: Integer; hints: PFX_DOWNLOADHINTS): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Check if form data is ready for initialization, if not, get the // |FX_DOWNLOADHINTS|. // // avail - handle to document availability provider. // hints - pointer to a download hints interface. Populated if form is not // ready for initialization. // // Returns one of: // PDF_FORM_ERROR: A common eror, in general incorrect parameters. // PDF_FORM_NOTAVAIL: Data not available. // PDF_FORM_AVAIL: Data available. // PDF_FORM_NOTEXIST: No form data. // // This function can be called only after FPDFAvail_GetDocument() is called. // The application should call this function whenever new data arrives and // process all the generated download |hints|, if any, until the function // |PDF_FORM_ERROR|, |PDF_FORM_AVAIL| or |PDF_FORM_NOTEXIST|. // if hints is nullptr, the function just check current form availability. // // Applications can then perform page loading. It is recommend to call // FPDFDOC_InitFormFillEnvironment() when |PDF_FORM_AVAIL| is returned. var FPDFAvail_IsFormAvail: function(avail: FPDF_AVAIL; hints: PFX_DOWNLOADHINTS): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Check whether a document is a linearized PDF. // // avail - handle to document availability provider. // // Returns one of: // PDF_LINEARIZED // PDF_NOT_LINEARIZED // PDF_LINEARIZATION_UNKNOWN // // FPDFAvail_IsLinearized() will return |PDF_LINEARIZED| or |PDF_NOT_LINEARIZED| // when we have 1k of data. If the files size less than 1k, it returns // |PDF_LINEARIZATION_UNKNOWN| as there is insufficient information to determine // if the PDF is linearlized. var FPDFAvail_IsLinearized: function(avail: FPDF_AVAIL): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // *** _FPD_FORMFILL_H *** const // These values are return values for a public API, so should not be changed // other than the count when adding new values. FORMTYPE_NONE = 0; // Document contains no forms FORMTYPE_ACRO_FORM = 1; // Forms are specified using AcroForm spec FORMTYPE_XFA_FULL = 2; // Forms are specified using the entire XFA spec FORMTYPE_XFA_FOREGROUND = 3; // Forms are specified using the XFAF subset of XFA spec FORMTYPE_COUNT = 4; // The number of form types JSPLATFORM_ALERT_BUTTON_OK = 0; // OK button JSPLATFORM_ALERT_BUTTON_OKCANCEL = 1; // OK & Cancel buttons JSPLATFORM_ALERT_BUTTON_YESNO = 2; // Yes & No buttons JSPLATFORM_ALERT_BUTTON_YESNOCANCEL = 3; // Yes, No & Cancel buttons JSPLATFORM_ALERT_BUTTON_DEFAULT = JSPLATFORM_ALERT_BUTTON_OK; JSPLATFORM_ALERT_ICON_ERROR = 0; // Error JSPLATFORM_ALERT_ICON_WARNING = 1; // Warning JSPLATFORM_ALERT_ICON_QUESTION = 2; // Question JSPLATFORM_ALERT_ICON_STATUS = 3; // Status JSPLATFORM_ALERT_ICON_ASTERISK = 4; // Asterisk JSPLATFORM_ALERT_ICON_DEFAULT = JSPLATFORM_ALERT_ICON_ERROR; JSPLATFORM_ALERT_RETURN_OK = 1; // OK JSPLATFORM_ALERT_RETURN_CANCEL = 2; // Cancel JSPLATFORM_ALERT_RETURN_NO = 3; // No JSPLATFORM_ALERT_RETURN_YES = 4; // Yes JSPLATFORM_BEEP_ERROR = 0; // Error JSPLATFORM_BEEP_WARNING = 1; // Warning JSPLATFORM_BEEP_QUESTION = 2; // Question JSPLATFORM_BEEP_STATUS = 3; // Status JSPLATFORM_BEEP_DEFAULT = 4; // Default type PIPDF_JsPlatform = ^IPDF_JsPlatform; IPDF_JsPlatform = record // Version number of the interface. Currently must be 2. version: Integer; // Version 1. // Method: app_alert // Pop up a dialog to show warning or hint. // Interface Version: // 1 // Implementation Required: // yes // Parameters: // pThis - Pointer to the interface structure itself. // Msg - A string containing the message to be displayed. // Title - The title of the dialog. // Type - The type of button group, one of the // JSPLATFORM_ALERT_BUTTON_* values above. // nIcon - The type of the icon, one of the // JSPLATFORM_ALERT_ICON_* above. // Return Value: // Option selected by user in dialogue, one of the // JSPLATFORM_ALERT_RETURN_* values above. app_alert: function(pThis: PIPDF_JsPlatform; Msg, Title: FPDF_WIDESTRING; nType: Integer; Icon: Integer): Integer; cdecl; // Method: app_beep // Causes the system to play a sound. // Interface Version: // 1 // Implementation Required: // yes // Parameters: // pThis - Pointer to the interface structure itself // nType - The sound type, see JSPLATFORM_BEEP_TYPE_* // above. // Return Value: // None app_beep: procedure(pThis: PIPDF_JsPlatform; nType: Integer); cdecl; // Method: app_response // Displays a dialog box containing a question and an entry field for // the user to reply to the question. // Interface Version: // 1 // Implementation Required: // yes // Parameters: // pThis - Pointer to the interface structure itself // Question - The question to be posed to the user. // Title - The title of the dialog box. // Default - A default value for the answer to the question. If // not specified, no default value is presented. // cLabel - A short string to appear in front of and on the // same line as the edit text field. // bPassword - If true, indicates that the user's response should // be shown as asterisks (*) or bullets (?) to mask // the response, which might be sensitive information. // response - A string buffer allocated by PDFium, to receive the // user's response. // length - The length of the buffer in bytes. Currently, it is // always 2048. // Return Value: // Number of bytes the complete user input would actually require, not // including trailing zeros, regardless of the value of the length // parameter or the presence of the response buffer. // Comments: // No matter on what platform, the response buffer should be always // written using UTF-16LE encoding. If a response buffer is // present and the size of the user input exceeds the capacity of the // buffer as specified by the length parameter, only the // first "length" bytes of the user input are to be written to the // buffer. app_response: function(pThis: PIPDF_JsPlatform; Question, Title, Default, cLabel: FPDF_WIDESTRING; bPassword: FPDF_BOOL; response: Pointer; length: Integer): Integer; cdecl; // Method: Doc_getFilePath // Get the file path of the current document. // Interface Version: // 1 // Implementation Required: // yes // Parameters: // pThis - Pointer to the interface structure itself // filePath - The string buffer to receive the file path. Can // be NULL. // length - The length of the buffer, number of bytes. Can // be 0. // Return Value: // Number of bytes the filePath consumes, including trailing zeros. // Comments: // The filePath should always be provided in the local encoding. // The return value always indicated number of bytes required for // the buffer, even when there is no buffer specified, or the buffer // size is less than required. In this case, the buffer will not // be modified. Doc_getFilePath: function(pThis: PIPDF_JsPlatform; filePath: Pointer; length: Integer): Integer; cdecl; // Method: Doc_mail // Mails the data buffer as an attachment to all recipients, with or // without user interaction. // Interface Version: // 1 // Implementation Required: // yes // Parameters: // pThis - Pointer to the interface structure itself // mailData - Pointer to the data buffer to be sent. Can be NULL. // length - The size,in bytes, of the buffer pointed by // mailData parameter. Can be 0. // bUI - If true, the rest of the parameters are used in a // compose-new-message window that is displayed to the // user. If false, the cTo parameter is required and // all others are optional. // To - A semicolon-delimited list of recipients for the // message. // Subject - The subject of the message. The length limit is // 64 KB. // CC - A semicolon-delimited list of CC recipients for // the message. // BCC - A semicolon-delimited list of BCC recipients for // the message. // Msg - The content of the message. The length limit is // 64 KB. // Return Value: // None. // Comments: // If the parameter mailData is NULL or length is 0, the current // document will be mailed as an attachment to all recipients. Doc_mail: procedure(pThis: PIPDF_JsPlatform; mailData: Pointer; length: Integer; bUI: FPDF_BOOL; sTo, subject, CC, BCC, Msg: FPDF_WIDESTRING); cdecl; // Method: Doc_print // Prints all or a specific number of pages of the document. // Interface Version: // 1 // Implementation Required: // yes // Parameters: // pThis - Pointer to the interface structure itself. // bUI - If true, will cause a UI to be presented to the // user to obtain printing information and confirm // the action. // nStart - A 0-based index that defines the start of an // inclusive range of pages. // nEnd - A 0-based index that defines the end of an // inclusive page range. // bSilent - If true, suppresses the cancel dialog box while // the document is printing. The default is false. // bShrinkToFit - If true, the page is shrunk (if necessary) to // fit within the imageable area of the printed page. // bPrintAsImage - If true, print pages as an image. // bReverse - If true, print from nEnd to nStart. // bAnnotations - If true (the default), annotations are // printed. // Return Value: // None. Doc_print: procedure(pThis: PIPDF_JsPlatform; bUI: FPDF_BOOKMARK; nStart, nEnd: Integer; bSilent, bShrinkToFit, bPrintAsImage, bReverse, bAnnotations: FPDF_BOOL); cdecl; // Method: Doc_submitForm // Send the form data to a specified URL. // Interface Version: // 1 // Implementation Required: // yes // Parameters: // pThis - Pointer to the interface structure itself // formData - Pointer to the data buffer to be sent. // length - The size,in bytes, of the buffer pointed by // formData parameter. // URL - The URL to send to. // Return Value: // None. Doc_submitForm: procedure(pThis: PIPDF_JsPlatform; formData: Pointer; length: Integer; URL: FPDF_WIDESTRING); cdecl; // Method: Doc_gotoPage // Jump to a specified page. // Interface Version: // 1 // Implementation Required: // yes // Parameters: // pThis - Pointer to the interface structure itself // nPageNum - The specified page number, zero for the first page. // Return Value: // None. Doc_gotoPage: procedure(pThis: PIPDF_JsPlatform; nPageNum: Integer); cdecl; // Method: Field_browse // Show a file selection dialog, and return the selected file path. // Interface Version: // 1 // Implementation Required: // yes // Parameters: // pThis - Pointer to the interface structure itself. // filePath - Pointer to the data buffer to receive the file // path. Can be NULL. // length - The length of the buffer, in bytes. Can be 0. // Return Value: // Number of bytes the filePath consumes, including trailing zeros. // Comments: // The filePath should always be provided in local encoding. Field_browse: function(pThis: PIPDF_JsPlatform; filePath: Pointer; length: Integer): Integer; cdecl; // Pointer for embedder-specific data. Unused by PDFium, and despite // its name, can be any data the embedder desires, though traditionally // a FPDF_FORMFILLINFO interface. m_pFormfillinfo: Pointer; // Version 2. m_isolate: Pointer; // Unused in v3, retain for compatibility. m_v8EmbedderSlot: DWORD; // Unused in v3, retain for compatibility. // Version 3. // Version 3 moves m_Isolate and m_v8EmbedderSlot to FPDF_LIBRARY_CONFIG. end; PIPDFJsPlatform = ^TIPDFJsPlatform; TIPDFJsPlatform = IPDF_JSPLATFORM; // Flags for Cursor type const FXCT_ARROW = 0; FXCT_NESW = 1; FXCT_NWSE = 2; FXCT_VBEAM = 3; FXCT_HBEAM = 4; FXCT_HAND = 5; // Function signature for the callback function passed to the FFI_SetTimer // method. // Parameters: // idEvent - Identifier of the timer. // Return value: // None. type TFPDFTimerCallback = procedure(idEvent: Integer); cdecl; type // Declares of a struct type to the local system time. {$IFDEF MSWINDOWS} PFPDF_SYSTEMTIME = PSystemTime; FPDF_SYSTEMTIME = TSystemTime; {$ELSE} PFPDF_SYSTEMTIME = ^FPDF_SYSTEMTIME; FPDF_SYSTEMTIME = record wYear: Word; // years since 1900 wMonth: Word; // months since January - [0,11] wDayOfWeek: Word; // days since Sunday - [0,6] wDay: Word; // day of the month - [1,31] wHour: Word; // hours since midnight - [0,23] wMinute: Word; // minutes after the hour - [0,59] wSecond: Word; // seconds after the minute - [0,59] wMilliseconds: Word; // milliseconds after the second - [0,999] end; {$ENDIF MSWINDOWS} PFPDFSystemTime = ^TFPDFSystemTime; TFPDFSystemTime = FPDF_SYSTEMTIME; {$IFDEF PDF_ENABLE_XFA} // XFA const // Pageview event flags FXFA_PAGEVIEWEVENT_POSTADDED = 1; // After a new pageview is added. FXFA_PAGEVIEWEVENT_POSTREMOVED = 3; // After a pageview is removed. // Definitions for Right Context Menu Features Of XFA Fields FXFA_MENU_COPY = 1; FXFA_MENU_CUT = 2; FXFA_MENU_SELECTALL = 4; FXFA_MENU_UNDO = 8; FXFA_MENU_REDO = 16; FXFA_MENU_PASTE = 32; // Definitions for File Type. FXFA_SAVEAS_XML = 1; FXFA_SAVEAS_XDP = 2; {$ENDIF PDF_ENABLE_XFA} type PFPDF_FORMFILLINFO = ^FPDF_FORMFILLINFO; FPDF_FORMFILLINFO = record // Version number of the interface. // Version 1 contains stable interfaces. Version 2 has additional // experimental interfaces. // When PDFium is built without the XFA module, version can be 1 or 2. // With version 1, only stable interfaces are called. With version 2, // additional experimental interfaces are also called. // When PDFium is built with the XFA module, version must be 2. // All the XFA related interfaces are experimental. If PDFium is built with // the XFA module and version 1 then none of the XFA related interfaces // would be called. When PDFium is built with XFA module then the version // must be 2. version: Integer; // Version 1. // Method: Release // Give the implementation a chance to release any resources after the // interface is no longer used. // Interface Version: // 1 // Implementation Required: // No // Comments: // Called by PDFium during the final cleanup process. // Parameters: // pThis - Pointer to the interface structure itself // Return Value: // None Release: procedure(pThis: PFPDF_FORMFILLINFO); cdecl; // Method: FFI_Invalidate // Invalidate the client area within the specified rectangle. // Interface Version: // 1 // Implementation Required: // yes // Parameters: // pThis - Pointer to the interface structure itself. // page - Handle to the page. Returned by FPDF_LoadPage(). // left - Left position of the client area in PDF page // coordinates. // top - Top position of the client area in PDF page // coordinates. // right - Right position of the client area in PDF page // coordinates. // bottom - Bottom position of the client area in PDF page // coordinates. // Return Value: // None. // Comments: // All positions are measured in PDF "user space". // Implementation should call FPDF_RenderPageBitmap() for repainting // the specified page area. FFI_Invalidate: procedure(pThis: PFPDF_FORMFILLINFO; page: FPDF_PAGE; left, top, right, bottom: Double); cdecl; // Method: FFI_OutputSelectedRect // When the user selects text in form fields with the mouse, this // callback function will be invoked with the selected areas. // Interface Version: // 1 // Implementation Required: // No // Parameters: // pThis - Pointer to the interface structure itself. // page - Handle to the page. Returned by FPDF_LoadPage()/ // left - Left position of the client area in PDF page // coordinates. // top - Top position of the client area in PDF page // coordinates. // right - Right position of the client area in PDF page // coordinates. // bottom - Bottom position of the client area in PDF page // coordinates. // Return Value: // None. // Comments: // This callback function is useful for implementing special text // selection effects. An implementation should first record the // returned rectangles, then draw them one by one during the next // painting period. Lastly, it should remove all the recorded // rectangles when finished painting. FFI_OutputSelectedRect: procedure(pThis: PFPDF_FORMFILLINFO; page: FPDF_PAGE; left, top, right, bottom: Double); cdecl; // Method: FFI_SetCursor // Set the Cursor shape. // Interface Version: // 1 // Implementation Required: // yes // Parameters: // pThis - Pointer to the interface structure itself. // nCursorType - Cursor type, see Flags for Cursor type for details. // Return value: // None. FFI_SetCursor: procedure(pThis: PFPDF_FORMFILLINFO; nCursorType: Integer); cdecl; // Method: FFI_SetTimer // This method installs a system timer. An interval value is specified, // and every time that interval elapses, the system must call into the // callback function with the timer ID as returned by this function. // Interface Version: // 1 // Implementation Required: // yes // Parameters: // pThis - Pointer to the interface structure itself. // uElapse - Specifies the time-out value, in milliseconds. // lpTimerFunc - A pointer to the callback function-TimerCallback. // Return value: // The timer identifier of the new timer if the function is successful. // An application passes this value to the FFI_KillTimer method to kill // the timer. Nonzero if it is successful; otherwise, it is zero. FFI_SetTimer: function(pThis: PFPDF_FORMFILLINFO; uElapse: Integer; lpTimerFunc: TFPDFTimerCallback): Integer; cdecl; // Method: FFI_KillTimer // This method uninstalls a system timer, as set by an earlier call to // FFI_SetTimer. // Interface Version: // 1 // Implementation Required: // yes // Parameters: // pThis - Pointer to the interface structure itself. // nTimerID - The timer ID returned by FFI_SetTimer function. // Return value: // None. FFI_KillTimer: procedure(pThis: PFPDF_FORMFILLINFO; nTimerID: Integer); cdecl; // Method: FFI_GetLocalTime // This method receives the current local time on the system. // Interface Version: // 1 // Implementation Required: // yes // Parameters: // pThis - Pointer to the interface structure itself. // Return value: // The local time. See FPDF_SYSTEMTIME above for details. // Note: Unused. FFI_GetLocalTime: function(pThis: PFPDF_FORMFILLINFO): FPDF_SYSTEMTIME; cdecl; // Method: FFI_OnChange // This method will be invoked to notify the implementation when the // value of any FormField on the document had been changed. // Interface Version: // 1 // Implementation Required: // no // Parameters: // pThis - Pointer to the interface structure itself. // Return value: // None. FFI_OnChange: procedure(pThis: PFPDF_FORMFILLINFO); cdecl; // Method: FFI_GetPage // This method receives the page handle associated with a specified // page index. // Interface Version: // 1 // Implementation Required: // yes // Parameters: // pThis - Pointer to the interface structure itself. // document - Handle to document. Returned by FPDF_LoadDocument(). // nPageIndex - Index number of the page. 0 for the first page. // Return value: // Handle to the page, as previously returned to the implementation by // FPDF_LoadPage(). // Comments: // The implementation is expected to keep track of the page handles it // receives from PDFium, and their mappings to page numbers. In some // cases, the document-level JavaScript action may refer to a page // which hadn't been loaded yet. To successfully run the Javascript // action, the implementation needs to load the page. FFI_GetPage: function(pThis: PFPDF_FORMFILLINFO; document: FPDF_DOCUMENT; nPageIndex: Integer): FPDF_PAGE; cdecl; // Method: FFI_GetCurrentPage // This method receives the handle to the current page. // Interface Version: // 1 // Implementation Required: // Yes when V8 support is present, otherwise unused. // Parameters: // pThis - Pointer to the interface structure itself. // document - Handle to document. Returned by FPDF_LoadDocument(). // Return value: // Handle to the page. Returned by FPDF_LoadPage(). // Comments: // PDFium doesn't keep keep track of the "current page" (e.g. the one // that is most visible on screen), so it must ask the embedder for // this information. FFI_GetCurrentPage: function(pThis: PFPDF_FORMFILLINFO; document: FPDF_DOCUMENT): FPDF_PAGE; cdecl; // Method: FFI_GetRotation // This method receives currently rotation of the page view. // Interface Version: // 1 // Implementation Required: // yes // Parameters: // pThis - Pointer to the interface structure itself. // page - Handle to page, as returned by FPDF_LoadPage(). // Return value: // A number to indicate the page rotation in 90 degree increments // in a clockwise direction: // 0 - 0 degrees // 1 - 90 degrees // 2 - 180 degrees // 3 - 270 degrees // Note: Unused. FFI_GetRotation: function(pThis: PFPDF_FORMFILLINFO; page: FPDF_PAGE): Integer; cdecl; // Method: FFI_ExecuteNamedAction // This method will execute a named action. // Interface Version: // 1 // Implementation Required: // yes // Parameters: // pThis - Pointer to the interface structure itself. // namedAction - A byte string which indicates the named action, // terminated by 0. // Return value: // None. // Comments: // See ISO 32000-1:2008, section 12.6.4.11 for descriptions of the // standard named actions, but note that a document may supply any // name of its choosing. FFI_ExecuteNamedAction: procedure(pThis: PFPDF_FORMFILLINFO; namedAction: FPDF_BYTESTRING); cdecl; // Method: FFI_SetTextFieldFocus // Called when a text field is getting or losing focus. // Interface Version: // 1 // Implementation Required: // no // Parameters: // pThis - Pointer to the interface structure itself. // value - The string value of the form field, in UTF-16LE // format. // valueLen - The length of the string value. This is the // number of characters, not bytes. // is_focus - True if the form field is getting focus, false // if the form field is losing focus. // Return value: // None. // Comments: // Only supports text fields and combobox fields. FFI_SetTextFieldFocus: procedure(pThis: PFPDF_FORMFILLINFO; value: FPDF_WIDESTRING; valueLen: FPDF_DWORD; is_focus: FPDF_BOOL); cdecl; // Method: FFI_DoURIAction // Ask the implementation to navigate to a uniform resource identifier. // Interface Version: // 1 // Implementation Required: // No // Parameters: // pThis - Pointer to the interface structure itself. // bsURI - A byte string which indicates the uniform // resource identifier, terminated by 0. // Return value: // None. // Comments: // If the embedder is version 2 or higher and have implementation for // FFI_DoURIActionWithKeyboardModifier, then // FFI_DoURIActionWithKeyboardModifier takes precedence over // FFI_DoURIAction. // See the URI actions description of <> // for more details. FFI_DoURIAction: procedure(pThis: PFPDF_FORMFILLINFO; bsURI: FPDF_WIDESTRING); cdecl; // Method: FFI_DoGoToAction // This action changes the view to a specified destination. // Interface Version: // 1 // Implementation Required: // No // Parameters: // pThis - Pointer to the interface structure itself. // nPageIndex - The index of the PDF page. // zoomMode - The zoom mode for viewing page. See below. // fPosArray - The float array which carries the position info. // sizeofArray - The size of float array. // PDFZoom values: // - XYZ = 1 // - FITPAGE = 2 // - FITHORZ = 3 // - FITVERT = 4 // - FITRECT = 5 // - FITBBOX = 6 // - FITBHORZ = 7 // - FITBVERT = 8 // Return value: // None. // Comments: // See the Destinations description of <> // in 8.2.1 for more details. FFI_DoGoToAction: procedure(pThis: PFPDF_FORMFILLINFO; nPageIndex, zoomMode: Integer; fPosArray: PSingle; sizeofArray: Integer); cdecl; // Pointer to IPDF_JSPLATFORM interface. // Unused if PDFium is built without V8 support. Otherwise, if NULL, then // JavaScript will be prevented from executing while rendering the document. m_pJsPlatform: PIPDF_JSPLATFORM; // Version 2 - Experimental. // Whether the XFA module is disabled when built with the XFA module. // Interface Version: // Ignored if |version| < 2. xfa_disabled: FPDF_BOOL; // Method: FFI_DisplayCaret // This method will show the caret at specified position. // Interface Version: // Ignored if |version| < 2. // Implementation Required: // Required for XFA, otherwise set to NULL. // Parameters: // pThis - Pointer to the interface structure itself. // page - Handle to page. Returned by FPDF_LoadPage(). // left - Left position of the client area in PDF page // coordinates. // top - Top position of the client area in PDF page // coordinates. // right - Right position of the client area in PDF page // coordinates. // bottom - Bottom position of the client area in PDF page // coordinates. // Return value: // None. FFI_DisplayCaret: procedure(pThis: PFPDF_FORMFILLINFO; page: FPDF_PAGE; bVisible: FPDF_BOOL; left, top, right, bottom: Double); cdecl; // Method: FFI_GetCurrentPageIndex // This method will get the current page index. // Interface Version: // Ignored if |version| < 2. // Implementation Required: // Required for XFA, otherwise set to NULL. // Parameters: // pThis - Pointer to the interface structure itself. // document - Handle to document from FPDF_LoadDocument(). // Return value: // The index of current page. FFI_GetCurrentPageIndex: function(pThis: PFPDF_FORMFILLINFO; document: FPDF_DOCUMENT): Integer; cdecl; // Method: FFI_SetCurrentPage // This method will set the current page. // Interface Version: // Ignored if |version| < 2. // Implementation Required: // Required for XFA, otherwise set to NULL. // Parameters: // pThis - Pointer to the interface structure itself. // document - Handle to document from FPDF_LoadDocument(). // iCurPage - The index of the PDF page. // Return value: // None. FFI_SetCurrentPage: procedure(pThis: PFPDF_FORMFILLINFO; document: FPDF_DOCUMENT; iCurPage: Integer); cdecl; // Method: FFI_GotoURL // This method will navigate to the specified URL. // Interface Version: // Ignored if |version| < 2. // Implementation Required: // Required for XFA, otherwise set to NULL. // Parameters: // pThis - Pointer to the interface structure itself. // document - Handle to document from FPDF_LoadDocument(). // wsURL - The string value of the URL, in UTF-16LE format. // Return value: // None. FFI_GotoURL: procedure(pThis: PFPDF_FORMFILLINFO; document: FPDF_DOCUMENT; wsURL: FPDF_WIDESTRING); cdecl; // Method: FFI_GetPageViewRect // This method will get the current page view rectangle. // Interface Version: // Ignored if |version| < 2. // Implementation Required: // Required for XFA, otherwise set to NULL. // Parameters: // pThis - Pointer to the interface structure itself. // page - Handle to page. Returned by FPDF_LoadPage(). // left - The pointer to receive left position of the page // view area in PDF page coordinates. // top - The pointer to receive top position of the page // view area in PDF page coordinates. // right - The pointer to receive right position of the // page view area in PDF page coordinates. // bottom - The pointer to receive bottom position of the // page view area in PDF page coordinates. // Return value: // None. FFI_GetPageViewRect: procedure(pThis: PFPDF_FORMFILLINFO; page: FPDF_PAGE; var left, top, right, bottom: Double); cdecl; // Method: FFI_PageEvent // This method fires when pages have been added to or deleted from // the XFA document. // Interface Version: // Ignored if |version| < 2. // Implementation Required: // Required for XFA, otherwise set to NULL. // Parameters: // pThis - Pointer to the interface structure itself. // page_count - The number of pages to be added or deleted. // event_type - See FXFA_PAGEVIEWEVENT_* above. // Return value: // None. // Comments: // The pages to be added or deleted always start from the last page // of document. This means that if parameter page_count is 2 and // event type is FXFA_PAGEVIEWEVENT_POSTADDED, 2 new pages have been // appended to the tail of document; If page_count is 2 and // event type is FXFA_PAGEVIEWEVENT_POSTREMOVED, the last 2 pages // have been deleted. FFI_PageEvent: procedure(pThis: PFPDF_FORMFILLINFO; page_count: Integer; event_type: FPDF_DWORD); cdecl; // Method: FFI_PopupMenu // This method will track the right context menu for XFA fields. // Interface Version: // Ignored if |version| < 2. // Implementation Required: // Required for XFA, otherwise set to NULL. // Parameters: // pThis - Pointer to the interface structure itself. // page - Handle to page. Returned by FPDF_LoadPage(). // hWidget - Always null, exists for compatibility. // menuFlag - The menu flags. Please refer to macro definition // of FXFA_MENU_XXX and this can be one or a // combination of these macros. // x - X position of the client area in PDF page // coordinates. // y - Y position of the client area in PDF page // coordinates. // Return value: // TRUE indicates success; otherwise false. FFI_PopupMenu: function(pThis: PFPDF_FORMFILLINFO; page: FPDF_PAGE; hWidget: FPDF_WIDGET; menuFlag: Integer; x, y: Single): FPDF_BOOL; cdecl; // Method: FFI_OpenFile // This method will open the specified file with the specified mode. // Interface Version: // Ignored if |version| < 2. // Implementation Required: // Required for XFA, otherwise set to NULL. // Parameters: // pThis - Pointer to the interface structure itself. // fileFlag - The file flag. Please refer to macro definition // of FXFA_SAVEAS_XXX and use one of these macros. // wsURL - The string value of the file URL, in UTF-16LE // format. // mode - The mode for open file, e.g. "rb" or "wb". // Return value: // The handle to FPDF_FILEHANDLER. FFI_OpenFile: function(pThis: PFPDF_FORMFILLINFO; fileFlag: Integer; wsURL: FPDF_WIDESTRING; mode: PAnsiChar): PFPDF_FILEHANDLER; cdecl; // Method: FFI_EmailTo // This method will email the specified file stream to the specified // contact. // Interface Version: // Ignored if |version| < 2. // Implementation Required: // Required for XFA, otherwise set to NULL. // Parameters: // pThis - Pointer to the interface structure itself. // pFileHandler - Handle to the FPDF_FILEHANDLER. // pTo - A semicolon-delimited list of recipients for the // message,in UTF-16LE format. // pSubject - The subject of the message,in UTF-16LE format. // pCC - A semicolon-delimited list of CC recipients for // the message,in UTF-16LE format. // pBcc - A semicolon-delimited list of BCC recipients for // the message,in UTF-16LE format. // pMsg - Pointer to the data buffer to be sent.Can be // NULL,in UTF-16LE format. // Return value: // None. FFI_EmailTo: procedure(pThis: PFPDF_FORMFILLINFO; fileHandler: PFPDF_FILEHANDLER; pTo, pSubject, pCC, pBcc, pMsg: FPDF_WIDESTRING); cdecl; // Method: FFI_UploadTo // This method will upload the specified file stream to the // specified URL. // Interface Version: // Ignored if |version| < 2. // Implementation Required: // Required for XFA, otherwise set to NULL. // Parameters: // pThis - Pointer to the interface structure itself. // pFileHandler - Handle to the FPDF_FILEHANDLER. // fileFlag - The file flag. Please refer to macro definition // of FXFA_SAVEAS_XXX and use one of these macros. // uploadTo - Pointer to the URL path, in UTF-16LE format. // Return value: // None. FFI_UploadTo: procedure(pThis: PFPDF_FORMFILLINFO; fileHandler: PFPDF_FILEHANDLER; fileFlag: Integer; uploadTo: FPDF_WIDESTRING); cdecl; // Method: FFI_GetPlatform // This method will get the current platform. // Interface Version: // Ignored if |version| < 2. // Implementation Required: // Required for XFA, otherwise set to NULL. // Parameters: // pThis - Pointer to the interface structure itself. // platform - Pointer to the data buffer to receive the // platform,in UTF-16LE format. Can be NULL. // length - The length of the buffer in bytes. Can be // 0 to query the required size. // Return value: // The length of the buffer, number of bytes. FFI_GetPlatform: function(pThis: PFPDF_FORMFILLINFO; platform_: Pointer; length: Integer): Integer; cdecl; // Method: FFI_GetLanguage // This method will get the current language. // Interface Version: // Ignored if |version| < 2. // Implementation Required: // Required for XFA, otherwise set to NULL. // Parameters: // pThis - Pointer to the interface structure itself. // language - Pointer to the data buffer to receive the // current language. Can be NULL. // length - The length of the buffer in bytes. Can be // 0 to query the required size. // Return value: // The length of the buffer, number of bytes. FFI_GetLanguage: function(pThis: PFPDF_FORMFILLINFO; language: Pointer; length: Integer): Integer; cdecl; // Method: FFI_DownloadFromURL // This method will download the specified file from the URL. // Interface Version: // Ignored if |version| < 2. // Implementation Required: // Required for XFA, otherwise set to NULL. // Parameters: // pThis - Pointer to the interface structure itself. // URL - The string value of the file URL, in UTF-16LE // format. // Return value: // The handle to FPDF_FILEHANDLER. FFI_DownloadFromURL: function(pThis: PFPDF_FORMFILLINFO; URL: FPDF_WIDESTRING): PFPDF_FILEHANDLER; cdecl; // Method: FFI_PostRequestURL // This method will post the request to the server URL. // Interface Version: // Ignored if |version| < 2. // Implementation Required: // Required for XFA, otherwise set to NULL. // Parameters: // pThis - Pointer to the interface structure itself. // wsURL - The string value of the server URL, in UTF-16LE // format. // wsData - The post data,in UTF-16LE format. // wsContentType - The content type of the request data, in // UTF-16LE format. // wsEncode - The encode type, in UTF-16LE format. // wsHeader - The request header,in UTF-16LE format. // response - Pointer to the FPDF_BSTR to receive the response // data from the server, in UTF-16LE format. // Return value: // TRUE indicates success, otherwise FALSE. FFI_PostRequestURL: function(pThis: PFPDF_FORMFILLINFO; wsURL, wsData, wsContentType, wsEncode, wsHeader: FPDF_WIDESTRING; respone: PFPDF_BSTR): FPDF_BOOL; cdecl; // Method: FFI_PutRequestURL // This method will put the request to the server URL. // Interface Version: // Ignored if |version| < 2. // Implementation Required: // Required for XFA, otherwise set to NULL. // Parameters: // pThis - Pointer to the interface structure itself. // wsURL - The string value of the server URL, in UTF-16LE // format. // wsData - The put data, in UTF-16LE format. // wsEncode - The encode type, in UTR-16LE format. // Return value: // TRUE indicates success, otherwise FALSE. FFI_PutRequestURL: function(pThis: PFPDF_FORMFILLINFO; wsURL, wsData, wsEncode: FPDF_WIDESTRING): FPDF_BOOL; cdecl; // Method: FFI_OnFocusChange // Called when the focused annotation is updated. // Interface Version: // Ignored if |version| < 2. // Implementation Required: // No // Parameters: // param - Pointer to the interface structure itself. // annot - The focused annotation. // page_index - Index number of the page which contains the // focused annotation. 0 for the first page. // Return value: // None. // Comments: // This callback function is useful for implementing any view based // action such as scrolling the annotation rect into view. The // embedder should not copy and store the annot as its scope is // limited to this call only. FFI_OnFocusChange: procedure(param: PFPDF_FORMFILLINFO; annot: FPDF_ANNOTATION; page_index: Integer); cdecl; // Method: FFI_DoURIActionWithKeyboardModifier // Ask the implementation to navigate to a uniform resource identifier // with the specified modifiers. // Interface Version: // Ignored if |version| < 2. // Implementation Required: // No // Parameters: // param - Pointer to the interface structure itself. // uri - A byte string which indicates the uniform // resource identifier, terminated by 0. // modifiers - Keyboard modifier that indicates which of // the virtual keys are down, if any. // Return value: // None. // Comments: // If the embedder who is version 2 and does not implement this API, // then a call will be redirected to FFI_DoURIAction. // See the URI actions description of <> // for more details. FFI_DoURIActionWithKeyboardModifier: procedure(param: PFPDF_FORMFILLINFO; uri: FPDF_BYTESTRING; modifiers: Integer); cdecl; end; PFPDFFormFillInfo = ^TFPDFFormFillInfo; TFPDFFormFillInfo = FPDF_FORMFILLINFO; // Function: FPDFDOC_InitFormFillEnvironment // Initialize form fill environment. // Parameters: // document - Handle to document from FPDF_LoadDocument(). // formInfo - Pointer to a FPDF_FORMFILLINFO structure. // Return Value: // Handle to the form fill module, or NULL on failure. // Comments: // This function should be called before any form fill operation. // The FPDF_FORMFILLINFO passed in via |formInfo| must remain valid until // the returned FPDF_FORMHANDLE is closed. var FPDFDOC_InitFormFillEnvironment: function(document: FPDF_DOCUMENT; formInfo: PFPDF_FORMFILLINFO): FPDF_FORMHANDLE; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFDOC_ExitFormFillEnvironment // Take ownership of |hHandle| and exit form fill environment. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // Return Value: // None. // Comments: // This function is a no-op when |hHandle| is null. var FPDFDOC_ExitFormFillEnvironment: procedure(hHandle: FPDF_FORMHANDLE); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FORM_OnAfterLoadPage // This method is required for implementing all the form related // functions. Should be invoked after user successfully loaded a // PDF page, and FPDFDOC_InitFormFillEnvironment() has been invoked. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // Return Value: // None. var FORM_OnAfterLoadPage: procedure(page: FPDF_PAGE; hHandle: FPDF_FORMHANDLE); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FORM_OnBeforeClosePage // This method is required for implementing all the form related // functions. Should be invoked before user closes the PDF page. // Parameters: // page - Handle to the page, as returned by FPDF_LoadPage(). // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // Return Value: // None. var FORM_OnBeforeClosePage: procedure(page: FPDF_PAGE; hHandle: FPDF_FORMHANDLE); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FORM_DoDocumentJSAction // This method is required for performing document-level JavaScript // actions. It should be invoked after the PDF document has been loaded. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // Return Value: // None. // Comments: // If there is document-level JavaScript action embedded in the // document, this method will execute the JavaScript action. Otherwise, // the method will do nothing. var FORM_DoDocumentJSAction: procedure(hHandle: FPDF_FORMHANDLE); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FORM_DoDocumentOpenAction // This method is required for performing open-action when the document // is opened. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // Return Value: // None. // Comments: // This method will do nothing if there are no open-actions embedded // in the document. var FORM_DoDocumentOpenAction: procedure(hHandle: FPDF_FORMHANDLE); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; const // Additional actions type of document: // WC, before closing document, JavaScript action. // WS, before saving document, JavaScript action. // DS, after saving document, JavaScript action. // WP, before printing document, JavaScript action. // DP, after printing document, JavaScript action. FPDFDOC_AACTION_WC = $10; FPDFDOC_AACTION_WS = $11; FPDFDOC_AACTION_DS = $12; FPDFDOC_AACTION_WP = $13; FPDFDOC_AACTION_DP = $14; // Function: FORM_DoDocumentAAction // This method is required for performing the document's // additional-action. // Parameters: // hHandle - Handle to the form fill module. Returned by // FPDFDOC_InitFormFillEnvironment. // aaType - The type of the additional-actions which defined // above. // Return Value: // None. // Comments: // This method will do nothing if there is no document // additional-action corresponding to the specified |aaType|. var FORM_DoDocumentAAction: procedure(hHandle: FPDF_FORMHANDLE; aaType: Integer); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; const // Additional-action types of page object: // OPEN (/O) -- An action to be performed when the page is opened // CLOSE (/C) -- An action to be performed when the page is closed FPDFPAGE_AACTION_OPEN = 0; FPDFPAGE_AACTION_CLOSE = 1; // Function: FORM_DoPageAAction // This method is required for performing the page object's // additional-action when opened or closed. // Parameters: // page - Handle to the page, as returned by FPDF_LoadPage(). // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // aaType - The type of the page object's additional-actions // which defined above. // Return Value: // None. // Comments: // This method will do nothing if no additional-action corresponding // to the specified |aaType| exists. var FORM_DoPageAAction: procedure(page: FPDF_PAGE; hHandle: FPDF_FORMHANDLE; aaType: Integer); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FORM_OnMouseMove // Call this member function when the mouse cursor moves. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // page - Handle to the page, as returned by FPDF_LoadPage(). // modifier - Indicates whether various virtual keys are down. // page_x - Specifies the x-coordinate of the cursor in PDF user // space. // page_y - Specifies the y-coordinate of the cursor in PDF user // space. // Return Value: // True indicates success; otherwise false. var FORM_OnMouseMove: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE; modifier: Integer; page_x, page_y: Double): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API // Function: FORM_OnMouseWheel // Call this member function when the user scrolls the mouse wheel. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // page - Handle to the page, as returned by FPDF_LoadPage(). // modifier - Indicates whether various virtual keys are down. // page_coord - Specifies the coordinates of the cursor in PDF user // space. // delta_x - Specifies the amount of wheel movement on the x-axis, // in units of platform-agnostic wheel deltas. Negative // values mean left. // delta_y - Specifies the amount of wheel movement on the y-axis, // in units of platform-agnostic wheel deltas. Negative // values mean down. // Return Value: // True indicates success; otherwise false. // Comments: // For |delta_x| and |delta_y|, the caller must normalize // platform-specific wheel deltas. e.g. On Windows, a delta value of 240 // for a WM_MOUSEWHEEL event normalizes to 2, since Windows defines // WHEEL_DELTA as 120. var FORM_OnMouseWheel: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE; modifier: Integer; const page_coord: PFS_POINTF; delta_x, delta_y: Integer): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FORM_OnFocus // This function focuses the form annotation at a given point. If the // annotation at the point already has focus, nothing happens. If there // is no annotation at the point, removes form focus. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // page - Handle to the page, as returned by FPDF_LoadPage(). // modifier - Indicates whether various virtual keys are down. // page_x - Specifies the x-coordinate of the cursor in PDF user // space. // page_y - Specifies the y-coordinate of the cursor in PDF user // space. // Return Value: // True if there is an annotation at the given point and it has focus. var FORM_OnFocus: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE; modifier: Integer; page_x, page_y: Double): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FORM_OnLButtonDown // Call this member function when the user presses the left // mouse button. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // page - Handle to the page, as returned by FPDF_LoadPage(). // modifier - Indicates whether various virtual keys are down. // page_x - Specifies the x-coordinate of the cursor in PDF user // space. // page_y - Specifies the y-coordinate of the cursor in PDF user // space. // Return Value: // True indicates success; otherwise false. var FORM_OnLButtonDown: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE; modifier: Integer; page_x, page_y: Double): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FORM_OnRButtonDown // Same as above, execpt for the right mouse button. // Comments: // At the present time, has no effect except in XFA builds, but is // included for the sake of symmetry. var FORM_OnRButtonDown: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE; modifier: Integer; page_x, page_y: Double): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FORM_OnLButtonUp // Call this member function when the user releases the left // mouse button. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // page - Handle to the page, as returned by FPDF_LoadPage(). // modifier - Indicates whether various virtual keys are down. // page_x - Specifies the x-coordinate of the cursor in device. // page_y - Specifies the y-coordinate of the cursor in device. // Return Value: // True indicates success; otherwise false. var FORM_OnLButtonUp: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE; modifier: Integer; page_x, page_y: Double): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FORM_OnRButtonUp // Same as above, execpt for the right mouse button. // Comments: // At the present time, has no effect except in XFA builds, but is // included for the sake of symmetry. var FORM_OnRButtonUp: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE; modifier: Integer; page_x, page_y: Double): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FORM_OnLButtonDoubleClick // Call this member function when the user double clicks the // left mouse button. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // page - Handle to the page, as returned by FPDF_LoadPage(). // modifier - Indicates whether various virtual keys are down. // page_x - Specifies the x-coordinate of the cursor in PDF user // space. // page_y - Specifies the y-coordinate of the cursor in PDF user // space. // Return Value: // True indicates success; otherwise false. var FORM_OnLButtonDoubleClick: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE; modifier: Integer; page_x, page_y: Double): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FORM_OnKeyDown // Call this member function when a nonsystem key is pressed. // Parameters: // hHandle - Handle to the form fill module, aseturned by // FPDFDOC_InitFormFillEnvironment(). // page - Handle to the page, as returned by FPDF_LoadPage(). // nKeyCode - The virtual-key code of the given key (see // fpdf_fwlevent.h for virtual key codes). // modifier - Mask of key flags (see fpdf_fwlevent.h for key // flag values). // Return Value: // True indicates success; otherwise false. var FORM_OnKeyDown: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE; nKeyCode, modifier: Integer): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FORM_OnKeyUp // Call this member function when a nonsystem key is released. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // page - Handle to the page, as returned by FPDF_LoadPage(). // nKeyCode - The virtual-key code of the given key (see // fpdf_fwlevent.h for virtual key codes). // modifier - Mask of key flags (see fpdf_fwlevent.h for key // flag values). // Return Value: // True indicates success; otherwise false. // Comments: // Currently unimplemented and always returns false. PDFium reserves this // API and may implement it in the future on an as-needed basis. var FORM_OnKeyUp: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE; nKeyCode, modifier: Integer): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FORM_OnChar // Call this member function when a keystroke translates to a // nonsystem character. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // page - Handle to the page, as returned by FPDF_LoadPage(). // nChar - The character code value itself. // modifier - Mask of key flags (see fpdf_fwlevent.h for key // flag values). // Return Value: // True indicates success; otherwise false. var FORM_OnChar: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE; nChar, modifier: Integer): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API // Function: FORM_GetFocusedText // Call this function to obtain the text within the current focused // field, if any. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // page - Handle to the page, as returned by FPDF_LoadPage(). // buffer - Buffer for holding the form text, encoded in // UTF-16LE. If NULL, |buffer| is not modified. // buflen - Length of |buffer| in bytes. If |buflen| is less // than the length of the form text string, |buffer| is // not modified. // Return Value: // Length in bytes for the text in the focused field. var FORM_GetFocusedText: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FORM_GetSelectedText // Call this function to obtain selected text within a form text // field or form combobox text field. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // page - Handle to the page, as returned by FPDF_LoadPage(). // buffer - Buffer for holding the selected text, encoded in // UTF-16LE. If NULL, |buffer| is not modified. // buflen - Length of |buffer| in bytes. If |buflen| is less // than the length of the selected text string, // |buffer| is not modified. // Return Value: // Length in bytes of selected text in form text field or form combobox // text field. var FORM_GetSelectedText: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API // Function: FORM_ReplaceAndKeepSelection // Call this function to replace the selected text in a form // text field or user-editable form combobox text field with another // text string (which can be empty or non-empty). If there is no // selected text, this function will append the replacement text after // the current caret position. After the insertion, the inserted text // will be selected. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // page - Handle to the page, as Returned by FPDF_LoadPage(). // wsText - The text to be inserted, in UTF-16LE format. // Return Value: // None. var FORM_ReplaceAndKeepSelection: procedure(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE; wsText: FPDF_WIDESTRING); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FORM_ReplaceSelection // Call this function to replace the selected text in a form // text field or user-editable form combobox text field with another // text string (which can be empty or non-empty). If there is no // selected text, this function will append the replacement text after // the current caret position. After the insertion, the selection range // will be set to empty. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // page - Handle to the page, as Returned by FPDF_LoadPage(). // wsText - The text to be inserted, in UTF-16LE format. // Return Value: // None. var FORM_ReplaceSelection: procedure(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE; wsText: FPDF_WIDESTRING); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API // Function: FORM_SelectAllText // Call this function to select all the text within the currently focused // form text field or form combobox text field. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // page - Handle to the page, as returned by FPDF_LoadPage(). // Return Value: // Whether the operation succeeded or not. var FORM_SelectAllText: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FORM_CanUndo // Find out if it is possible for the current focused widget in a given // form to perform an undo operation. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // page - Handle to the page, as returned by FPDF_LoadPage(). // Return Value: // True if it is possible to undo. var FORM_CanUndo: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FORM_CanRedo // Find out if it is possible for the current focused widget in a given // form to perform a redo operation. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // page - Handle to the page, as returned by FPDF_LoadPage(). // Return Value: // True if it is possible to redo. var FORM_CanRedo: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FORM_Undo // Make the current focused widget perform an undo operation. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // page - Handle to the page, as returned by FPDF_LoadPage(). // Return Value: // True if the undo operation succeeded. var FORM_Undo: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FORM_Redo // Make the current focused widget perform a redo operation. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // page - Handle to the page, as returned by FPDF_LoadPage(). // Return Value: // True if the redo operation succeeded. var FORM_Redo: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FORM_ForceToKillFocus. // Call this member function to force to kill the focus of the form // field which has focus. If it would kill the focus of a form field, // save the value of form field if was changed by theuser. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // Return Value: // True indicates success; otherwise false. var FORM_ForceToKillFocus: function(hHandle: FPDF_FORMHANDLE): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FORM_GetFocusedAnnot. // Call this member function to get the currently focused annotation. // Parameters: // handle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // page_index - Buffer to hold the index number of the page which // contains the focused annotation. 0 for the first page. // Can't be NULL. // annot - Buffer to hold the focused annotation. Can't be NULL. // Return Value: // On success, return true and write to the out parameters. Otherwise // return false and leave the out parameters unmodified. // Comments: // Not currently supported for XFA forms - will report no focused // annotation. // Must call FPDFPage_CloseAnnot() when the annotation returned in |annot| // by this function is no longer needed. // This will return true and set |page_index| to -1 and |annot| to NULL, // if there is no focused annotation. var FORM_GetFocusedAnnot: function(handle: FPDF_FORMHANDLE; var page_index: Integer; var annot: FPDF_ANNOTATION): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FORM_SetFocusedAnnot. // Call this member function to set the currently focused annotation. // Parameters: // handle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // annot - Handle to an annotation. // Return Value: // True indicates success; otherwise false. // Comments: // |annot| can't be NULL. To kill focus, use FORM_ForceToKillFocus() // instead. var FORM_SetFocusedAnnot: function(handle: FPDF_FORMHANDLE; annot: FPDF_ANNOTATION): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Form Field Types // The names of the defines are stable, but the specific values associated with // them are not, so do not hardcode their values. const FPDF_FORMFIELD_UNKNOWN = 0; // Unknown. FPDF_FORMFIELD_PUSHBUTTON = 1; // push button type. FPDF_FORMFIELD_CHECKBOX = 2; // check box type. FPDF_FORMFIELD_RADIOBUTTON = 3; // radio button type. FPDF_FORMFIELD_COMBOBOX = 4; // combo box type. FPDF_FORMFIELD_LISTBOX = 5; // list box type. FPDF_FORMFIELD_TEXTFIELD = 6; // text field type. FPDF_FORMFIELD_SIGNATURE = 7; // text field type. {$IFDEF PDF_ENABLE_XFA} FPDF_FORMFIELD_XFA = 8; // Generic XFA type. FPDF_FORMFIELD_XFA_CHECKBOX = 9; // XFA check box type. FPDF_FORMFIELD_XFA_COMBOBOX = 10; // XFA combo box type. FPDF_FORMFIELD_XFA_IMAGEFIELD = 11; // XFA image field type. FPDF_FORMFIELD_XFA_LISTBOX = 12; // XFA list box type. FPDF_FORMFIELD_XFA_PUSHBUTTON = 13; // XFA push button type. FPDF_FORMFIELD_XFA_SIGNATURE = 14; // XFA signture field type. FPDF_FORMFIELD_XFA_TEXTFIELD = 15; // XFA text field type. {$ENDIF PDF_ENABLE_XFA} {$IFDEF PDF_ENABLE_XFA} FPDF_FORMFIELD_COUNT = 16; {$ELSE} FPDF_FORMFIELD_COUNT = 8; {$ENDIF PDF_ENABLE_XFA} {$IFDEF PDF_ENABLE_XFA} function IS_XFA_FORMFIELD(type_: Integer): Boolean; inline; {$ENDIF PDF_ENABLE_XFA} // Function: FPDFPage_HasFormFieldAtPoint // Get the form field type by point. // Parameters: // hHandle - Handle to the form fill module. Returned by // FPDFDOC_InitFormFillEnvironment(). // page - Handle to the page. Returned by FPDF_LoadPage(). // page_x - X position in PDF "user space". // page_y - Y position in PDF "user space". // Return Value: // Return the type of the form field; -1 indicates no field. // See field types above. var FPDFPage_HasFormFieldAtPoint: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE; page_x, page_y: Double): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDFPage_FormFieldZOrderAtPoint // Get the form field z-order by point. // Parameters: // hHandle - Handle to the form fill module. Returned by // FPDFDOC_InitFormFillEnvironment(). // page - Handle to the page. Returned by FPDF_LoadPage(). // page_x - X position in PDF "user space". // page_y - Y position in PDF "user space". // Return Value: // Return the z-order of the form field; -1 indicates no field. // Higher numbers are closer to the front. var FPDFPage_FormFieldZOrderAtPoint: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE; page_x, page_y: Double): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_SetFormFieldHighlightColor // Set the highlight color of the specified (or all) form fields // in the document. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // doc - Handle to the document, as returned by // FPDF_LoadDocument(). // fieldType - A 32-bit integer indicating the type of a form // field (defined above). // color - The highlight color of the form field. Constructed by // 0xxxrrggbb. // Return Value: // None. // Comments: // When the parameter fieldType is set to FPDF_FORMFIELD_UNKNOWN, the // highlight color will be applied to all the form fields in the // document. // Please refresh the client window to show the highlight immediately // if necessary. var FPDF_SetFormFieldHighlightColor: procedure(hHandle: FPDF_FORMHANDLE; fieldType: Integer; Color: LongWord); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_SetFormFieldHighlightAlpha // Set the transparency of the form field highlight color in the // document. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // doc - Handle to the document, as returaned by // FPDF_LoadDocument(). // alpha - The transparency of the form field highlight color, // between 0-255. // Return Value: // None. var FPDF_SetFormFieldHighlightAlpha: procedure(hHandle: FPDF_FORMHANDLE; alpha: Byte); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_RemoveFormFieldHighlight // Remove the form field highlight color in the document. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // Return Value: // None. // Comments: // Please refresh the client window to remove the highlight immediately // if necessary. var FPDF_RemoveFormFieldHighlight: procedure(hHandle: FPDF_FORMHANDLE); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_FFLDraw // Render FormFields and popup window on a page to a device independent // bitmap. // Parameters: // hHandle - Handle to the form fill module, as returned by // FPDFDOC_InitFormFillEnvironment(). // bitmap - Handle to the device independent bitmap (as the // output buffer). Bitmap handles can be created by // FPDFBitmap_Create(). // page - Handle to the page, as returned by FPDF_LoadPage(). // start_x - Left pixel position of the display area in the // device coordinates. // start_y - Top pixel position of the display area in the device // coordinates. // size_x - Horizontal size (in pixels) for displaying the page. // size_y - Vertical size (in pixels) for displaying the page. // rotate - Page orientation: 0 (normal), 1 (rotated 90 degrees // clockwise), 2 (rotated 180 degrees), 3 (rotated 90 // degrees counter-clockwise). // flags - 0 for normal display, or combination of flags // defined above. // Return Value: // None. // Comments: // This function is designed to render annotations that are // user-interactive, which are widget annotations (for FormFields) and // popup annotations. // With the FPDF_ANNOT flag, this function will render a popup annotation // when users mouse-hover on a non-widget annotation. Regardless of // FPDF_ANNOT flag, this function will always render widget annotations // for FormFields. // In order to implement the FormFill functions, implementation should // call this function after rendering functions, such as // FPDF_RenderPageBitmap() or FPDF_RenderPageBitmap_Start(), have // finished rendering the page contents. var FPDF_FFLDraw: procedure(hHandle: FPDF_FORMHANDLE; bitmap: FPDF_BITMAP; page: FPDF_PAGE; start_x, start_y, size_x, size_y, rotate, flags: Integer); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; {$IFDEF PDF_USE_SKIA} var FPDF_FFLDrawSkia: procedure(hHandle: FPDF_FORMHANDLE; canvas: FPDF_SKIA_CANVAS; page: FPDF_PAGE; start_x, start_y, size_x, size_y, rotate, flags: Integer); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; {$ENDIF PDF_USE_SKIA} // Experimental API // Function: FPDF_GetFormType // Returns the type of form contained in the PDF document. // Parameters: // document - Handle to document. // Return Value: // Integer value representing one of the FORMTYPE_ values. // Comments: // If |document| is NULL, then the return value is FORMTYPE_NONE. var FPDF_GetFormType: function(document: FPDF_DOCUMENT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API // Function: FORM_SetIndexSelected // Selects/deselects the value at the given |index| of the focused // annotation. // Parameters: // hHandle - Handle to the form fill module. Returned by // FPDFDOC_InitFormFillEnvironment. // page - Handle to the page. Returned by FPDF_LoadPage // index - 0-based index of value to be set as // selected/unselected // selected - true to select, false to deselect // Return Value: // TRUE if the operation succeeded. // FALSE if the operation failed or widget is not a supported type. // Comments: // Intended for use with listbox/combobox widget types. Comboboxes // have at most a single value selected at a time which cannot be // deselected. Deselect on a combobox is a no-op that returns false. // Default implementation is a no-op that will return false for // other types. // Not currently supported for XFA forms - will return false. var FORM_SetIndexSelected: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE; index: Integer; selected: FPDF_BOOL): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API // Function: FORM_IsIndexSelected // Returns whether or not the value at |index| of the focused // annotation is currently selected. // Parameters: // hHandle - Handle to the form fill module. Returned by // FPDFDOC_InitFormFillEnvironment. // page - Handle to the page. Returned by FPDF_LoadPage // index - 0-based Index of value to check // Return Value: // TRUE if value at |index| is currently selected. // FALSE if value at |index| is not selected or widget is not a // supported type. // Comments: // Intended for use with listbox/combobox widget types. Default // implementation is a no-op that will return false for other types. // Not currently supported for XFA forms - will return false. var FORM_IsIndexSelected: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE; index: Integer): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_LoadXFA // If the document consists of XFA fields, call this method to // attempt to load XFA fields. // Parameters: // document - Handle to document from FPDF_LoadDocument(). // Return Value: // TRUE upon success, otherwise FALSE. If XFA support is not built // into PDFium, performs no action and always returns FALSE. var FPDF_LoadXFA: function(document: FPDF_DOCUMENT): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // *** _FPDF_ANNOT_H_ *** const FPDF_ANNOT_UNKNOWN = 0; FPDF_ANNOT_TEXT = 1; FPDF_ANNOT_LINK = 2; FPDF_ANNOT_FREETEXT = 3; FPDF_ANNOT_LINE = 4; FPDF_ANNOT_SQUARE = 5; FPDF_ANNOT_CIRCLE = 6; FPDF_ANNOT_POLYGON = 7; FPDF_ANNOT_POLYLINE = 8; FPDF_ANNOT_HIGHLIGHT = 9; FPDF_ANNOT_UNDERLINE = 10; FPDF_ANNOT_SQUIGGLY = 11; FPDF_ANNOT_STRIKEOUT = 12; FPDF_ANNOT_STAMP = 13; FPDF_ANNOT_CARET = 14; FPDF_ANNOT_INK = 15; FPDF_ANNOT_POPUP = 16; FPDF_ANNOT_FILEATTACHMENT = 17; FPDF_ANNOT_SOUND = 18; FPDF_ANNOT_MOVIE = 19; FPDF_ANNOT_WIDGET = 20; FPDF_ANNOT_SCREEN = 21; FPDF_ANNOT_PRINTERMARK = 22; FPDF_ANNOT_TRAPNET = 23; FPDF_ANNOT_WATERMARK = 24; FPDF_ANNOT_THREED = 25; FPDF_ANNOT_RICHMEDIA = 26; FPDF_ANNOT_XFAWIDGET = 27; FPDF_ANNOT_REDACT = 28; // Refer to PDF Reference (6th edition) table 8.16 for all annotation flags. FPDF_ANNOT_FLAG_NONE = 0; FPDF_ANNOT_FLAG_INVISIBLE = (1 shl 0); FPDF_ANNOT_FLAG_HIDDEN = (1 shl 1); FPDF_ANNOT_FLAG_PRINT = (1 shl 2); FPDF_ANNOT_FLAG_NOZOOM = (1 shl 3); FPDF_ANNOT_FLAG_NOROTATE = (1 shl 4); FPDF_ANNOT_FLAG_NOVIEW = (1 shl 5); FPDF_ANNOT_FLAG_READONLY = (1 shl 6); FPDF_ANNOT_FLAG_LOCKED = (1 shl 7); FPDF_ANNOT_FLAG_TOGGLENOVIEW = (1 shl 8); FPDF_ANNOT_APPEARANCEMODE_NORMAL = 0; FPDF_ANNOT_APPEARANCEMODE_ROLLOVER = 1; FPDF_ANNOT_APPEARANCEMODE_DOWN = 2; FPDF_ANNOT_APPEARANCEMODE_COUNT = 3; // Refer to PDF Reference version 1.7 table 8.70 for field flags common to all // interactive form field types. FPDF_FORMFLAG_NONE = 0; FPDF_FORMFLAG_READONLY = (1 shl 0); FPDF_FORMFLAG_REQUIRED = (1 shl 1); FPDF_FORMFLAG_NOEXPORT = (1 shl 2); // Refer to PDF Reference version 1.7 table 8.77 for field flags specific to // interactive form text fields. FPDF_FORMFLAG_TEXT_MULTILINE = (1 shl 12); FPDF_FORMFLAG_TEXT_PASSWORD = (1 shl 13); // Refer to PDF Reference version 1.7 table 8.79 for field flags specific to // interactive form choice fields. FPDF_FORMFLAG_CHOICE_COMBO = (1 shl 17); FPDF_FORMFLAG_CHOICE_EDIT = (1 shl 18); FPDF_FORMFLAG_CHOICE_MULTI_SELECT = (1 shl 21); // Additional actions type of form field: // K, on key stroke, JavaScript action. // F, on format, JavaScript action. // V, on validate, JavaScript action. // C, on calculate, JavaScript action. FPDF_ANNOT_AACTION_KEY_STROKE = 12; FPDF_ANNOT_AACTION_FORMAT = 13; FPDF_ANNOT_AACTION_VALIDATE = 14; FPDF_ANNOT_AACTION_CALCULATE = 15; type FPDFANNOT_COLORTYPE = ( FPDFANNOT_COLORTYPE_Color = 0, FPDFANNOT_COLORTYPE_InteriorColor ); // Experimental API. // Check if an annotation subtype is currently supported for creation. // Currently supported subtypes: // - circle // - fileattachment // - freetext // - highlight // - ink // - link // - popup // - square, // - squiggly // - stamp // - strikeout // - text // - underline // // subtype - the subtype to be checked. // // Returns true if this subtype supported. var FPDFAnnot_IsSupportedSubtype: function(subtype: FPDF_ANNOTATION_SUBTYPE): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Create an annotation in |page| of the subtype |subtype|. If the specified // subtype is illegal or unsupported, then a new annotation will not be created. // Must call FPDFPage_CloseAnnot() when the annotation returned by this // function is no longer needed. // // page - handle to a page. // subtype - the subtype of the new annotation. // // Returns a handle to the new annotation object, or NULL on failure. var FPDFPage_CreateAnnot: function(page: FPDF_PAGE; subtype: FPDF_ANNOTATION_SUBTYPE): FPDF_ANNOTATION; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the number of annotations in |page|. // // page - handle to a page. // // Returns the number of annotations in |page|. var FPDFPage_GetAnnotCount: function(page: FPDF_PAGE): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get annotation in |page| at |index|. Must call FPDFPage_CloseAnnot() when the // annotation returned by this function is no longer needed. // // page - handle to a page. // index - the index of the annotation. // // Returns a handle to the annotation object, or NULL on failure. var FPDFPage_GetAnnot: function(page: FPDF_PAGE; index: Integer): FPDF_ANNOTATION; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the index of |annot| in |page|. This is the opposite of // FPDFPage_GetAnnot(). // // page - handle to the page that the annotation is on. // annot - handle to an annotation. // // Returns the index of |annot|, or -1 on failure. var FPDFPage_GetAnnotIndex: function(page: FPDF_PAGE; annot: FPDF_ANNOTATION): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Close an annotation. Must be called when the annotation returned by // FPDFPage_CreateAnnot() or FPDFPage_GetAnnot() is no longer needed. This // function does not remove the annotation from the document. // // annot - handle to an annotation. var FPDFPage_CloseAnnot: procedure(annot: FPDF_ANNOTATION); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Remove the annotation in |page| at |index|. // // page - handle to a page. // index - the index of the annotation. // // Returns true if successful. var FPDFPage_RemoveAnnot: function(page: FPDF_PAGE; index: Integer): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the subtype of an annotation. // // annot - handle to an annotation. // // Returns the annotation subtype. var FPDFAnnot_GetSubtype: function(annot: FPDF_ANNOTATION): FPDF_ANNOTATION_SUBTYPE; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Check if an annotation subtype is currently supported for object extraction, // update, and removal. // Currently supported subtypes: ink and stamp. // // subtype - the subtype to be checked. // // Returns true if this subtype supported. var FPDFAnnot_IsObjectSupportedSubtype: function(subtype: FPDF_ANNOTATION_SUBTYPE): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Update |obj| in |annot|. |obj| must be in |annot| already and must have // been retrieved by FPDFAnnot_GetObject(). Currently, only ink and stamp // annotations are supported by this API. Also note that only path, image, and // text objects have APIs for modification; see FPDFPath_*(), FPDFText_*(), and // FPDFImageObj_*(). // // annot - handle to an annotation. // obj - handle to the object that |annot| needs to update. // // Return true if successful. var FPDFAnnot_UpdateObject: function(annot: FPDF_ANNOTATION; obj: FPDF_PAGEOBJECT): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Add a new InkStroke, represented by an array of points, to the InkList of // |annot|. The API creates an InkList if one doesn't already exist in |annot|. // This API works only for ink annotations. Please refer to ISO 32000-1:2008 // spec, section 12.5.6.13. // // annot - handle to an annotation. // points - pointer to a FS_POINTF array representing input points. // point_count - number of elements in |points| array. This should not exceed // the maximum value that can be represented by an int32_t). // // Returns the 0-based index at which the new InkStroke is added in the InkList // of the |annot|. Returns -1 on failure. var FPDFAnnot_AddInkStroke: function(annot: FPDF_ANNOTATION; const points: PFS_POINTF; point_count: SIZE_T): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Removes an InkList in |annot|. // This API works only for ink annotations. // // annot - handle to an annotation. // // Return true on successful removal of /InkList entry from context of the // non-null ink |annot|. Returns false on failure. var FPDFAnnot_RemoveInkList: function(annot: FPDF_ANNOTATION): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Add |obj| to |annot|. |obj| must have been created by // FPDFPageObj_CreateNew{Path|Rect}() or FPDFPageObj_New{Text|Image}Obj(), and // will be owned by |annot|. Note that an |obj| cannot belong to more than one // |annot|. Currently, only ink and stamp annotations are supported by this API. // Also note that only path, image, and text objects have APIs for creation. // // annot - handle to an annotation. // obj - handle to the object that is to be added to |annot|. // // Return true if successful. var FPDFAnnot_AppendObject: function(annot: FPDF_ANNOTATION; obj: FPDF_PAGEOBJECT): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the total number of objects in |annot|, including path objects, text // objects, external objects, image objects, and shading objects. // // annot - handle to an annotation. // // Returns the number of objects in |annot|. var FPDFAnnot_GetObjectCount: function(annot: FPDF_ANNOTATION): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the object in |annot| at |index|. // // annot - handle to an annotation. // index - the index of the object. // // Return a handle to the object, or NULL on failure. var FPDFAnnot_GetObject: function(annot: FPDF_ANNOTATION; index: Integer): FPDF_PAGEOBJECT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Remove the object in |annot| at |index|. // // annot - handle to an annotation. // index - the index of the object to be removed. // // Return true if successful. var FPDFAnnot_RemoveObject: function(annot: FPDF_ANNOTATION; index: Integer): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Set the color of an annotation. Fails when called on annotations with // appearance streams already defined; instead use // FPDFPath_Set{Stroke|Fill}Color(). // // annot - handle to an annotation. // type - type of the color to be set. // R, G, B - buffer to hold the RGB value of the color. Ranges from 0 to 255. // A - buffer to hold the opacity. Ranges from 0 to 255. // // Returns true if successful. var FPDFAnnot_SetColor: function(annot: FPDF_ANNOTATION; type_: FPDFANNOT_COLORTYPE; R, G, B, A: Cardinal): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the color of an annotation. If no color is specified, default to yellow // for highlight annotation, black for all else. Fails when called on // annotations with appearance streams already defined; instead use // FPDFPath_Get{Stroke|Fill}Color(). // // annot - handle to an annotation. // type - type of the color requested. // R, G, B - buffer to hold the RGB value of the color. Ranges from 0 to 255. // A - buffer to hold the opacity. Ranges from 0 to 255. // // Returns true if successful. var FPDFAnnot_GetColor: function(annot: FPDF_ANNOTATION; type_: FPDFANNOT_COLORTYPE; var R, G, B, A: Cardinal): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Check if the annotation is of a type that has attachment points // (i.e. quadpoints). Quadpoints are the vertices of the rectangle that // encompasses the texts affected by the annotation. They provide the // coordinates in the page where the annotation is attached. Only text markup // annotations (i.e. highlight, strikeout, squiggly, and underline) and link // annotations have quadpoints. // // annot - handle to an annotation. // // Returns true if the annotation is of a type that has quadpoints, false // otherwise. var FPDFAnnot_HasAttachmentPoints: function(annot: FPDF_ANNOTATION): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Replace the attachment points (i.e. quadpoints) set of an annotation at // |quad_index|. This index needs to be within the result of // FPDFAnnot_CountAttachmentPoints(). // If the annotation's appearance stream is defined and this annotation is of a // type with quadpoints, then update the bounding box too if the new quadpoints // define a bigger one. // // annot - handle to an annotation. // quad_index - index of the set of quadpoints. // quad_points - the quadpoints to be set. // // Returns true if successful. var FPDFAnnot_SetAttachmentPoints: function(annot: FPDF_ANNOTATION; quad_index: SIZE_T; quad_points: PFS_QUADPOINTSF): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Append to the list of attachment points (i.e. quadpoints) of an annotation. // If the annotation's appearance stream is defined and this annotation is of a // type with quadpoints, then update the bounding box too if the new quadpoints // define a bigger one. // // annot - handle to an annotation. // quad_points - the quadpoints to be set. // // Returns true if successful. var FPDFAnnot_AppendAttachmentPoints: function(annot: FPDF_ANNOTATION; quad_points: PFS_QUADPOINTSF): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the number of sets of quadpoints of an annotation. // // annot - handle to an annotation. // // Returns the number of sets of quadpoints, or 0 on failure. var FPDFAnnot_CountAttachmentPoints: function(annot: FPDF_ANNOTATION): SIZE_T; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the attachment points (i.e. quadpoints) of an annotation. // // annot - handle to an annotation. // quad_index - index of the set of quadpoints. // quad_points - receives the quadpoints; must not be NULL. // // Returns true if successful. var FPDFAnnot_GetAttachmentPoints: function(annot: FPDF_ANNOTATION; quad_index: SIZE_T; quad_points: PFS_QUADPOINTSF): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Set the annotation rectangle defining the location of the annotation. If the // annotation's appearance stream is defined and this annotation is of a type // without quadpoints, then update the bounding box too if the new rectangle // defines a bigger one. // // annot - handle to an annotation. // rect - the annotation rectangle to be set. // // Returns true if successful. var FPDFAnnot_SetRect: function(annot: FPDF_ANNOTATION; rect: PFS_RECTF): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the annotation rectangle defining the location of the annotation. // // annot - handle to an annotation. // rect - receives the rectangle; must not be NULL. // // Returns true if successful. var FPDFAnnot_GetRect: function(annot: FPDF_ANNOTATION; rect: PFS_RECTF): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the vertices of a polygon or polyline annotation. |buffer| is an array of // points of the annotation. If |length| is less than the returned length, or // |annot| or |buffer| is NULL, |buffer| will not be modified. // // annot - handle to an annotation, as returned by e.g. FPDFPage_GetAnnot() // buffer - buffer for holding the points. // length - length of the buffer in points. // // Returns the number of points if the annotation is of type polygon or // polyline, 0 otherwise. var FPDFAnnot_GetVertices: function(annot: FPDF_ANNOTATION; buffer: PFS_POINTF; length: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the number of paths in the ink list of an ink annotation. // // annot - handle to an annotation, as returned by e.g. FPDFPage_GetAnnot() // // Returns the number of paths in the ink list if the annotation is of type ink, // 0 otherwise. var FPDFAnnot_GetInkListCount: function(annot: FPDF_ANNOTATION): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get a path in the ink list of an ink annotation. |buffer| is an array of // points of the path. If |length| is less than the returned length, or |annot| // or |buffer| is NULL, |buffer| will not be modified. // // annot - handle to an annotation, as returned by e.g. FPDFPage_GetAnnot() // path_index - index of the path // buffer - buffer for holding the points. // length - length of the buffer in points. // // Returns the number of points of the path if the annotation is of type ink, 0 // otherwise. var FPDFAnnot_GetInkListPath: function(annot: FPDF_ANNOTATION; path_index: LongWord; buffer: PFS_POINTF; length: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the starting and ending coordinates of a line annotation. // // annot - handle to an annotation, as returned by e.g. FPDFPage_GetAnnot() // start - starting point // end - ending point // // Returns true if the annotation is of type line, |start| and |end| are not // NULL, false otherwise. var FPDFAnnot_GetLine: function(annot: FPDF_ANNOTATION; start, end_: PFS_POINTF): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Set the characteristics of the annotation's border (rounded rectangle). // // annot - handle to an annotation // horizontal_radius - horizontal corner radius, in default user space units // vertical_radius - vertical corner radius, in default user space units // border_width - border width, in default user space units // // Returns true if setting the border for |annot| succeeds, false otherwise. // // If |annot| contains an appearance stream that overrides the border values, // then the appearance stream will be removed on success. var FPDFAnnot_SetBorder: function(annot: FPDF_ANNOTATION; horizontal_radius, vertical_radius, border_width: Single): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the characteristics of the annotation's border (rounded rectangle). // // annot - handle to an annotation // horizontal_radius - horizontal corner radius, in default user space units // vertical_radius - vertical corner radius, in default user space units // border_width - border width, in default user space units // // Returns true if |horizontal_radius|, |vertical_radius| and |border_width| are // not NULL, false otherwise. var FPDFAnnot_GetBorder: function(annot: FPDF_ANNOTATION; var horizontal_radius, vertical_radius, border_width: Single): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the JavaScript of an event of the annotation's additional actions. // |buffer| is only modified if |buflen| is large enough to hold the whole // JavaScript string. If |buflen| is smaller, the total size of the JavaScript // is still returned, but nothing is copied. If there is no JavaScript for // |event| in |annot|, an empty string is written to |buf| and 2 is returned, // denoting the size of the null terminator in the buffer. On other errors, // nothing is written to |buffer| and 0 is returned. // // hHandle - handle to the form fill module, returned by // FPDFDOC_InitFormFillEnvironment(). // annot - handle to an interactive form annotation. // event - event type, one of the FPDF_ANNOT_AACTION_* values. // buffer - buffer for holding the value string, encoded in UTF-16LE. // buflen - length of the buffer in bytes. // // Returns the length of the string value in bytes, including the 2-byte // null terminator. var FPDFAnnot_GetFormAdditionalActionJavaScript: function(hHandle: FPDF_FORMHANDLE; annot: FPDF_ANNOTATION; event: Integer; buffer: PFPDF_WCHAR; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Check if |annot|'s dictionary has |key| as a key. // // annot - handle to an annotation. // key - the key to look for, encoded in UTF-8. // // Returns true if |key| exists. var FPDFAnnot_HasKey: function(annot: FPDF_ANNOTATION; key: FPDF_BYTESTRING): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the type of the value corresponding to |key| in |annot|'s dictionary. // // annot - handle to an annotation. // key - the key to look for, encoded in UTF-8. // // Returns the type of the dictionary value. var FPDFAnnot_GetValueType: function(annot: FPDF_ANNOTATION; key: FPDF_BYTESTRING): FPDF_OBJECT_TYPE; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Set the string value corresponding to |key| in |annot|'s dictionary, // overwriting the existing value if any. The value type would be // FPDF_OBJECT_STRING after this function call succeeds. // // annot - handle to an annotation. // key - the key to the dictionary entry to be set, encoded in UTF-8. // value - the string value to be set, encoded in UTF-16LE. // // Returns true if successful. var FPDFAnnot_SetStringValue: function(annot: FPDF_ANNOTATION; key: FPDF_BYTESTRING; value: FPDF_WIDESTRING): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the string value corresponding to |key| in |annot|'s dictionary. |buffer| // is only modified if |buflen| is longer than the length of contents. Note that // if |key| does not exist in the dictionary or if |key|'s corresponding value // in the dictionary is not a string (i.e. the value is not of type // FPDF_OBJECT_STRING or FPDF_OBJECT_NAME), then an empty string would be copied // to |buffer| and the return value would be 2. On other errors, nothing would // be added to |buffer| and the return value would be 0. // // annot - handle to an annotation. // key - the key to the requested dictionary entry, encoded in UTF-8. // buffer - buffer for holding the value string, encoded in UTF-16LE. // buflen - length of the buffer in bytes. // // Returns the length of the string value in bytes. var FPDFAnnot_GetStringValue: function(annot: FPDF_ANNOTATION; key: FPDF_BYTESTRING; buffer: PFPDF_WCHAR; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the float value corresponding to |key| in |annot|'s dictionary. Writes // value to |value| and returns True if |key| exists in the dictionary and // |key|'s corresponding value is a number (FPDF_OBJECT_NUMBER), False // otherwise. // // annot - handle to an annotation. // key - the key to the requested dictionary entry, encoded in UTF-8. // value - receives the value, must not be NULL. // // Returns True if value found, False otherwise. var FPDFAnnot_GetNumberValue: function(annot: FPDF_ANNOTATION; key: FPDF_BYTESTRING; value: PSingle): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Set the AP (appearance string) in |annot|'s dictionary for a given // |appearanceMode|. // // annot - handle to an annotation. // appearanceMode - the appearance mode (normal, rollover or down) for which // to get the AP. // value - the string value to be set, encoded in UTF-16LE. If // nullptr is passed, the AP is cleared for that mode. If the // mode is Normal, APs for all modes are cleared. // // Returns true if successful. var FPDFAnnot_SetAP: function(annot: FPDF_ANNOTATION; appearanceMode: FPDF_ANNOT_APPEARANCEMODE; value: FPDF_WIDESTRING): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the AP (appearance string) from |annot|'s dictionary for a given // |appearanceMode|. // |buffer| is only modified if |buflen| is large enough to hold the whole AP // string. If |buflen| is smaller, the total size of the AP is still returned, // but nothing is copied. // If there is no appearance stream for |annot| in |appearanceMode|, an empty // string is written to |buf| and 2 is returned. // On other errors, nothing is written to |buffer| and 0 is returned. // // annot - handle to an annotation. // appearanceMode - the appearance mode (normal, rollover or down) for which // to get the AP. // buffer - buffer for holding the value string, encoded in UTF-16LE. // buflen - length of the buffer in bytes. // // Returns the length of the string value in bytes. var FPDFAnnot_GetAP: function(annot: FPDF_ANNOTATION; appearanceMode: FPDF_ANNOT_APPEARANCEMODE; buffer: PFPDF_WCHAR; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the annotation corresponding to |key| in |annot|'s dictionary. Common // keys for linking annotations include "IRT" and "Popup". Must call // FPDFPage_CloseAnnot() when the annotation returned by this function is no // longer needed. // // annot - handle to an annotation. // key - the key to the requested dictionary entry, encoded in UTF-8. // // Returns a handle to the linked annotation object, or NULL on failure. var FPDFAnnot_GetLinkedAnnot: function(annot: FPDF_ANNOTATION; key: FPDF_BYTESTRING): FPDF_ANNOTATION; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the annotation flags of |annot|. // // annot - handle to an annotation. // // Returns the annotation flags. var FPDFAnnot_GetFlags: function(annot: FPDF_ANNOTATION): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Set the |annot|'s flags to be of the value |flags|. // // annot - handle to an annotation. // flags - the flag values to be set. // // Returns true if successful. var FPDFAnnot_SetFlags: function(annot: FPDF_ANNOTATION; flags: Integer): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the annotation flags of |annot|. // // hHandle - handle to the form fill module, returned by // FPDFDOC_InitFormFillEnvironment(). // annot - handle to an interactive form annotation. // // Returns the annotation flags specific to interactive forms. var FPDFAnnot_GetFormFieldFlags: function(hHandle: FPDF_FORMHANDLE; annot: FPDF_ANNOTATION): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Retrieves an interactive form annotation whose rectangle contains a given // point on a page. Must call FPDFPage_CloseAnnot() when the annotation returned // is no longer needed. // // // hHandle - handle to the form fill module, returned by // FPDFDOC_InitFormFillEnvironment(). // page - handle to the page, returned by FPDF_LoadPage function. // point - position in PDF "user space". // // Returns the interactive form annotation whose rectangle contains the given // coordinates on the page. If there is no such annotation, return NULL. var FPDFAnnot_GetFormFieldAtPoint: function(hHandle: FPDF_FORMHANDLE; page: FPDF_PAGE; const point: PFS_POINTF): FPDF_ANNOTATION; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Gets the name of |annot|, which is an interactive form annotation. // |buffer| is only modified if |buflen| is longer than the length of contents. // In case of error, nothing will be added to |buffer| and the return value will // be 0. Note that return value of empty string is 2 for "\0\0". // // hHandle - handle to the form fill module, returned by // FPDFDOC_InitFormFillEnvironment(). // annot - handle to an interactive form annotation. // buffer - buffer for holding the name string, encoded in UTF-16LE. // buflen - length of the buffer in bytes. // // Returns the length of the string value in bytes. var FPDFAnnot_GetFormFieldName: function(hHandle: FPDF_FORMHANDLE; annot: FPDF_ANNOTATION; buffer: PFPDF_WCHAR; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Gets the alternate name of |annot|, which is an interactive form annotation. // |buffer| is only modified if |buflen| is longer than the length of contents. // In case of error, nothing will be added to |buffer| and the return value will // be 0. Note that return value of empty string is 2 for "\0\0". // // hHandle - handle to the form fill module, returned by // FPDFDOC_InitFormFillEnvironment(). // annot - handle to an interactive form annotation. // buffer - buffer for holding the alternate name string, encoded in // UTF-16LE. // buflen - length of the buffer in bytes. // // Returns the length of the string value in bytes. var FPDFAnnot_GetFormFieldAlternateName: function(hHandle: FPDF_FORMHANDLE; annot: FPDF_ANNOTATION; buffer: PFPDF_WCHAR; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Gets the form field type of |annot|, which is an interactive form annotation. // // hHandle - handle to the form fill module, returned by // FPDFDOC_InitFormFillEnvironment(). // annot - handle to an interactive form annotation. // // Returns the type of the form field (one of the FPDF_FORMFIELD_* values) on // success. Returns -1 on error. // See field types in fpdf_formfill.h. var FPDFAnnot_GetFormFieldType: function(hHandle: FPDF_FORMHANDLE; annot: FPDF_ANNOTATION): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Gets the value of |annot|, which is an interactive form annotation. // |buffer| is only modified if |buflen| is longer than the length of contents. // In case of error, nothing will be added to |buffer| and the return value will // be 0. Note that return value of empty string is 2 for "\0\0". // // hHandle - handle to the form fill module, returned by // FPDFDOC_InitFormFillEnvironment(). // annot - handle to an interactive form annotation. // buffer - buffer for holding the value string, encoded in UTF-16LE. // buflen - length of the buffer in bytes. // // Returns the length of the string value in bytes. var FPDFAnnot_GetFormFieldValue: function(hHandle: FPDF_FORMHANDLE; annot: FPDF_ANNOTATION; buffer: PFPDF_WCHAR; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the number of options in the |annot|'s "Opt" dictionary. Intended for // use with listbox and combobox widget annotations. // // hHandle - handle to the form fill module, returned by // FPDFDOC_InitFormFillEnvironment. // annot - handle to an annotation. // // Returns the number of options in "Opt" dictionary on success. Return value // will be -1 if annotation does not have an "Opt" dictionary or other error. var FPDFAnnot_GetOptionCount: function(hHandle: FPDF_FORMHANDLE; annot: FPDF_ANNOTATION): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the string value for the label of the option at |index| in |annot|'s // "Opt" dictionary. Intended for use with listbox and combobox widget // annotations. |buffer| is only modified if |buflen| is longer than the length // of contents. If index is out of range or in case of other error, nothing // will be added to |buffer| and the return value will be 0. Note that // return value of empty string is 2 for "\0\0". // // hHandle - handle to the form fill module, returned by // FPDFDOC_InitFormFillEnvironment. // annot - handle to an annotation. // index - numeric index of the option in the "Opt" array // buffer - buffer for holding the value string, encoded in UTF-16LE. // buflen - length of the buffer in bytes. // // Returns the length of the string value in bytes. // If |annot| does not have an "Opt" array, |index| is out of range or if any // other error occurs, returns 0. var FPDFAnnot_GetOptionLabel: function(hHandle: FPDF_FORMHANDLE; annot: FPDF_ANNOTATION; index: Integer; buffer: PFPDF_WCHAR; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Determine whether or not the option at |index| in |annot|'s "Opt" dictionary // is selected. Intended for use with listbox and combobox widget annotations. // // handle - handle to the form fill module, returned by // FPDFDOC_InitFormFillEnvironment. // annot - handle to an annotation. // index - numeric index of the option in the "Opt" array. // // Returns true if the option at |index| in |annot|'s "Opt" dictionary is // selected, false otherwise. var FPDFAnnot_IsOptionSelected: function(handle: FPDF_FORMHANDLE; annot: FPDF_ANNOTATION; index: Integer): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the float value of the font size for an |annot| with variable text. // If 0, the font is to be auto-sized: its size is computed as a function of // the height of the annotation rectangle. // // hHandle - handle to the form fill module, returned by // FPDFDOC_InitFormFillEnvironment. // annot - handle to an annotation. // value - Required. Float which will be set to font size on success. // // Returns true if the font size was set in |value|, false on error or if // |value| not provided. var FPDFAnnot_GetFontSize: function(hHandle: FPDF_FORMHANDLE; annot: FPDF_ANNOTATION; var value: Single): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get the RGB value of the font color for an |annot| with variable text. // // hHandle - handle to the form fill module, returned by // FPDFDOC_InitFormFillEnvironment. // annot - handle to an annotation. // R, G, B - buffer to hold the RGB value of the color. Ranges from 0 to 255. // // Returns true if the font color was set, false on error or if the font // color was not provided. var FPDFAnnot_GetFontColor: function(hHandle: FPDF_FORMHANDLE; annot: FPDF_ANNOTATION; var R, G, B: Cardinal): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Determine if |annot| is a form widget that is checked. Intended for use with // checkbox and radio button widgets. // // hHandle - handle to the form fill module, returned by // FPDFDOC_InitFormFillEnvironment. // annot - handle to an annotation. // // Returns true if |annot| is a form widget and is checked, false otherwise. var FPDFAnnot_IsChecked: function(hHandle: FPDF_FORMHANDLE; annot: FPDF_ANNOTATION): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Set the list of focusable annotation subtypes. Annotations of subtype // FPDF_ANNOT_WIDGET are by default focusable. New subtypes set using this API // will override the existing subtypes. // // hHandle - handle to the form fill module, returned by // FPDFDOC_InitFormFillEnvironment. // subtypes - list of annotation subtype which can be tabbed over. // count - total number of annotation subtype in list. // Returns true if list of annotation subtype is set successfully, false // otherwise. var FPDFAnnot_SetFocusableSubtypes: function(hHandle: FPDF_FORMHANDLE; const subtypes: PFPDF_ANNOTATION_SUBTYPE; count: SIZE_T): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the count of focusable annotation subtypes as set by host // for a |hHandle|. // // hHandle - handle to the form fill module, returned by // FPDFDOC_InitFormFillEnvironment. // Returns the count of focusable annotation subtypes or -1 on error. // Note : Annotations of type FPDF_ANNOT_WIDGET are by default focusable. var FPDFAnnot_GetFocusableSubtypesCount: function(hHandle: FPDF_FORMHANDLE): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the list of focusable annotation subtype as set by host. // // hHandle - handle to the form fill module, returned by // FPDFDOC_InitFormFillEnvironment. // subtypes - receives the list of annotation subtype which can be tabbed // over. Caller must have allocated |subtypes| more than or // equal to the count obtained from // FPDFAnnot_GetFocusableSubtypesCount() API. // count - size of |subtypes|. // Returns true on success and set list of annotation subtype to |subtypes|, // false otherwise. // Note : Annotations of type FPDF_ANNOT_WIDGET are by default focusable. var FPDFAnnot_GetFocusableSubtypes: function(hHandle: FPDF_FORMHANDLE; subtypes: PFPDF_ANNOTATION_SUBTYPE; count: SIZE_T): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Gets FPDF_LINK object for |annot|. Intended to use for link annotations. // // annot - handle to an annotation. // // Returns FPDF_LINK from the FPDF_ANNOTATION and NULL on failure, // if the input annot is NULL or input annot's subtype is not link. var FPDFAnnot_GetLink: function(annot: FPDF_ANNOTATION): FPDF_LINK; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Gets the count of annotations in the |annot|'s control group. // A group of interactive form annotations is collectively called a form // control group. Here, |annot|, an interactive form annotation, should be // either a radio button or a checkbox. // // hHandle - handle to the form fill module, returned by // FPDFDOC_InitFormFillEnvironment. // annot - handle to an annotation. // // Returns number of controls in its control group or -1 on error. var FPDFAnnot_GetFormControlCount: function(hHandle: FPDF_FORMHANDLE; annot: FPDF_ANNOTATION): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Gets the index of |annot| in |annot|'s control group. // A group of interactive form annotations is collectively called a form // control group. Here, |annot|, an interactive form annotation, should be // either a radio button or a checkbox. // // hHandle - handle to the form fill module, returned by // FPDFDOC_InitFormFillEnvironment. // annot - handle to an annotation. // // Returns index of a given |annot| in its control group or -1 on error. var FPDFAnnot_GetFormControlIndex: function(hHandle: FPDF_FORMHANDLE; annot: FPDF_ANNOTATION): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Gets the export value of |annot| which is an interactive form annotation. // Intended for use with radio button and checkbox widget annotations. // |buffer| is only modified if |buflen| is longer than the length of contents. // In case of error, nothing will be added to |buffer| and the return value // will be 0. Note that return value of empty string is 2 for "\0\0". // // hHandle - handle to the form fill module, returned by // FPDFDOC_InitFormFillEnvironment(). // annot - handle to an interactive form annotation. // buffer - buffer for holding the value string, encoded in UTF-16LE. // buflen - length of the buffer in bytes. // // Returns the length of the string value in bytes. var FPDFAnnot_GetFormFieldExportValue: function(hHandle: FPDF_FORMHANDLE; annot: FPDF_ANNOTATION; buffer: PFPDF_WCHAR; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Add a URI action to |annot|, overwriting the existing action, if any. // // annot - handle to a link annotation. // uri - the URI to be set, encoded in 7-bit ASCII. // // Returns true if successful. var FPDFAnnot_SetURI: function(annot: FPDF_ANNOTATION; uri: PAnsiChar): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the attachment from |annot|. // // annot - handle to a file annotation. // // Returns the handle to the attachment object, or NULL on failure. var FPDFAnnot_GetFileAttachment: function(annot: FPDF_ANNOTATION): FPDF_ATTACHMENT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Add an embedded file with |name| to |annot|. // // annot - handle to a file annotation. // name - name of the new attachment. // // Returns a handle to the new attachment object, or NULL on failure. var FPDFAnnot_AddFileAttachment: function(annot: FPDF_ANNOTATION; name: FPDF_WIDESTRING): FPDF_ATTACHMENT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // *** _FPDF_CATALOG_H_ *** // Experimental API. // // Determine if |document| represents a tagged PDF. // // For the definition of tagged PDF, See (see 10.7 "Tagged PDF" in PDF // Reference 1.7). // // document - handle to a document. // // Returns |true| iff |document| is a tagged PDF. var FPDFCatalog_IsTagged: function(document: FPDF_DOCUMENT): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // *** _FPDF_ATTACHMENT_H_ *** // Experimental API. // Get the number of embedded files in |document|. // // document - handle to a document. // // Returns the number of embedded files in |document|. var FPDFDoc_GetAttachmentCount: function(document: FPDF_DOCUMENT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Add an embedded file with |name| in |document|. If |name| is empty, or if // |name| is the name of a existing embedded file in |document|, or if // |document|'s embedded file name tree is too deep (i.e. |document| has too // many embedded files already), then a new attachment will not be added. // // document - handle to a document. // name - name of the new attachment. // // Returns a handle to the new attachment object, or NULL on failure. var FPDFDoc_AddAttachment: function(document: FPDF_DOCUMENT; name: FPDF_WIDESTRING): FPDF_ATTACHMENT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the embedded attachment at |index| in |document|. Note that the returned // attachment handle is only valid while |document| is open. // // document - handle to a document. // index - the index of the requested embedded file. // // Returns the handle to the attachment object, or NULL on failure. var FPDFDoc_GetAttachment: function(document: FPDF_DOCUMENT; index: Integer): FPDF_ATTACHMENT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Delete the embedded attachment at |index| in |document|. Note that this does // not remove the attachment data from the PDF file; it simply removes the // file's entry in the embedded files name tree so that it does not appear in // the attachment list. This behavior may change in the future. // // document - handle to a document. // index - the index of the embedded file to be deleted. // // Returns true if successful. var FPDFDoc_DeleteAttachment: function(document: FPDF_DOCUMENT; index: Integer): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the name of the |attachment| file. |buffer| is only modified if |buflen| // is longer than the length of the file name. On errors, |buffer| is unmodified // and the returned length is 0. // // attachment - handle to an attachment. // buffer - buffer for holding the file name, encoded in UTF-16LE. // buflen - length of the buffer in bytes. // // Returns the length of the file name in bytes. var FPDFAttachment_GetName: function(attachment: FPDF_ATTACHMENT; buffer: PFPDF_WCHAR; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Check if the params dictionary of |attachment| has |key| as a key. // // attachment - handle to an attachment. // key - the key to look for, encoded in UTF-8. // // Returns true if |key| exists. var FPDFAttachment_HasKey: function(attachment: FPDF_ATTACHMENT; key: FPDF_BYTESTRING): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the type of the value corresponding to |key| in the params dictionary of // the embedded |attachment|. // // attachment - handle to an attachment. // key - the key to look for, encoded in UTF-8. // // Returns the type of the dictionary value. var FPDFAttachment_GetValueType: function(attachment: FPDF_ATTACHMENT; key: FPDF_BYTESTRING): FPDF_OBJECT_TYPE; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Set the string value corresponding to |key| in the params dictionary of the // embedded file |attachment|, overwriting the existing value if any. The value // type should be FPDF_OBJECT_STRING after this function call succeeds. // // attachment - handle to an attachment. // key - the key to the dictionary entry, encoded in UTF-8. // value - the string value to be set, encoded in UTF-16LE. // // Returns true if successful. var FPDFAttachment_SetStringValue: function(attachment: FPDF_ATTACHMENT; key: FPDF_BYTESTRING; value: FPDF_WIDESTRING): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the string value corresponding to |key| in the params dictionary of the // embedded file |attachment|. |buffer| is only modified if |buflen| is longer // than the length of the string value. Note that if |key| does not exist in the // dictionary or if |key|'s corresponding value in the dictionary is not a // string (i.e. the value is not of type FPDF_OBJECT_STRING or // FPDF_OBJECT_NAME), then an empty string would be copied to |buffer| and the // return value would be 2. On other errors, nothing would be added to |buffer| // and the return value would be 0. // // attachment - handle to an attachment. // key - the key to the requested string value, encoded in UTF-8. // buffer - buffer for holding the string value encoded in UTF-16LE. // buflen - length of the buffer in bytes. // // Returns the length of the dictionary value string in bytes. var FPDFAttachment_GetStringValue: function(attachment: FPDF_ATTACHMENT; key: FPDF_BYTESTRING; buffer: PFPDF_WCHAR; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Set the file data of |attachment|, overwriting the existing file data if any. // The creation date and checksum will be updated, while all other dictionary // entries will be deleted. Note that only contents with |len| smaller than // INT_MAX is supported. // // attachment - handle to an attachment. // contents - buffer holding the file data to write to |attachment|. // len - length of file data in bytes. // // Returns true if successful. var FPDFAttachment_SetFile: function(attachment: FPDF_ATTACHMENT; document: FPDF_DOCUMENT; contents: Pointer; len: LongWord): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the file data of |attachment|. // When the attachment file data is readable, true is returned, and |out_buflen| // is updated to indicate the file data size. |buffer| is only modified if // |buflen| is non-null and long enough to contain the entire file data. Callers // must check both the return value and the input |buflen| is no less than the // returned |out_buflen| before using the data. // // Otherwise, when the attachment file data is unreadable or when |out_buflen| // is null, false is returned and |buffer| and |out_buflen| remain unmodified. // // attachment - handle to an attachment. // buffer - buffer for holding the file data from |attachment|. // buflen - length of the buffer in bytes. // out_buflen - pointer to the variable that will receive the minimum buffer // size to contain the file data of |attachment|. // // Returns true on success, false otherwise. var FPDFAttachment_GetFile: function(attachment: FPDF_ATTACHMENT; buffer: Pointer; buflen: LongWord; var out_buflen: LongWord): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // *** _FPDF_FWLEVENT_H_ *** // Key flags. type FWL_EVENTFLAG = Integer; const FWL_EVENTFLAG_ShiftKey = 1 shl 0; FWL_EVENTFLAG_ControlKey = 1 shl 1; FWL_EVENTFLAG_AltKey = 1 shl 2; FWL_EVENTFLAG_MetaKey = 1 shl 3; FWL_EVENTFLAG_KeyPad = 1 shl 4; FWL_EVENTFLAG_AutoRepeat = 1 shl 5; FWL_EVENTFLAG_LeftButtonDown = 1 shl 6; FWL_EVENTFLAG_MiddleButtonDown = 1 shl 7; FWL_EVENTFLAG_RightButtonDown = 1 shl 8; type FWL_VKEYCODE = Integer; // note: FWL_VKEY_* equals Windows.VK_* // *** _FPDF_TRANSFORMPAGE_H_ *** // Set "MediaBox" entry to the page dictionary. // // page - Handle to a page. // left - The left of the rectangle. // bottom - The bottom of the rectangle. // right - The right of the rectangle. // top - The top of the rectangle. var FPDFPage_SetMediaBox: procedure(page: FPDF_PAGE; left, bottom, right, top: Single); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Set "CropBox" entry to the page dictionary. // // page - Handle to a page. // left - The left of the rectangle. // bottom - The bottom of the rectangle. // right - The right of the rectangle. // top - The top of the rectangle. var FPDFPage_SetCropBox: procedure(page: FPDF_PAGE; left, bottom, right, top: Single); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Set "BleedBox" entry to the page dictionary. // // page - Handle to a page. // left - The left of the rectangle. // bottom - The bottom of the rectangle. // right - The right of the rectangle. // top - The top of the rectangle. var FPDFPage_SetBleedBox: procedure(page: FPDF_PAGE; left, bottom, right, top: Single); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Set "TrimBox" entry to the page dictionary. // // page - Handle to a page. // left - The left of the rectangle. // bottom - The bottom of the rectangle. // right - The right of the rectangle. // top - The top of the rectangle. var FPDFPage_SetTrimBox: procedure(page: FPDF_PAGE; left, bottom, right, top: Single); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Set "ArtBox" entry to the page dictionary. // // page - Handle to a page. // left - The left of the rectangle. // bottom - The bottom of the rectangle. // right - The right of the rectangle. // top - The top of the rectangle. var FPDFPage_SetArtBox: procedure(page: FPDF_PAGE; left, bottom, right, top: Single); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get "MediaBox" entry from the page dictionary. // // page - Handle to a page. // left - Pointer to a float value receiving the left of the rectangle. // bottom - Pointer to a float value receiving the bottom of the rectangle. // right - Pointer to a float value receiving the right of the rectangle. // top - Pointer to a float value receiving the top of the rectangle. // // On success, return true and write to the out parameters. Otherwise return // false and leave the out parameters unmodified. var FPDFPage_GetMediaBox: procedure(page: FPDF_PAGE; var left, bottom, right, top: Single); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get "CropBox" entry from the page dictionary. // // page - Handle to a page. // left - Pointer to a float value receiving the left of the rectangle. // bottom - Pointer to a float value receiving the bottom of the rectangle. // right - Pointer to a float value receiving the right of the rectangle. // top - Pointer to a float value receiving the top of the rectangle. // // On success, return true and write to the out parameters. Otherwise return // false and leave the out parameters unmodified. var FPDFPage_GetCropBox: procedure(page: FPDF_PAGE; var left, bottom, right, top: Single); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get "BleedBox" entry from the page dictionary. // // page - Handle to a page. // left - Pointer to a float value receiving the left of the rectangle. // bottom - Pointer to a float value receiving the bottom of the rectangle. // right - Pointer to a float value receiving the right of the rectangle. // top - Pointer to a float value receiving the top of the rectangle. // // On success, return true and write to the out parameters. Otherwise return // false and leave the out parameters unmodified. var FPDFPage_GetBleedBox: procedure(page: FPDF_PAGE; var left, bottom, right, top: Single); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get "TrimBox" entry from the page dictionary. // // page - Handle to a page. // left - Pointer to a float value receiving the left of the rectangle. // bottom - Pointer to a float value receiving the bottom of the rectangle. // right - Pointer to a float value receiving the right of the rectangle. // top - Pointer to a float value receiving the top of the rectangle. // // On success, return true and write to the out parameters. Otherwise return // false and leave the out parameters unmodified. var FPDFPage_GetTrimBox: procedure(page: FPDF_PAGE; var left, bottom, right, top: Single); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Get "ArtBox" entry from the page dictionary. // // page - Handle to a page. // left - Pointer to a float value receiving the left of the rectangle. // bottom - Pointer to a float value receiving the bottom of the rectangle. // right - Pointer to a float value receiving the right of the rectangle. // top - Pointer to a float value receiving the top of the rectangle. // // On success, return true and write to the out parameters. Otherwise return // false and leave the out parameters unmodified. var FPDFPage_GetArtBox: procedure(page: FPDF_PAGE; var left, bottom, right, top: Single); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Apply transforms to |page|. // // If |matrix| is provided it will be applied to transform the page. // If |clipRect| is provided it will be used to clip the resulting page. // If neither |matrix| or |clipRect| are provided this method returns |false|. // Returns |true| if transforms are applied. // // This function will transform the whole page, and would take effect to all the // objects in the page. // // page - Page handle. // matrix - Transform matrix. // clipRect - Clipping rectangle. var FPDFPage_TransFormWithClip: function(page: FPDF_PAGE; matrix: PFS_MATRIX; clipRect: PFS_RECTF): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Transform (scale, rotate, shear, move) the clip path of page object. // page_object - Handle to a page object. Returned by // FPDFPageObj_NewImageObj(). // // a - The coefficient "a" of the matrix. // b - The coefficient "b" of the matrix. // c - The coefficient "c" of the matrix. // d - The coefficient "d" of the matrix. // e - The coefficient "e" of the matrix. // f - The coefficient "f" of the matrix. var FPDFPageObj_TransformClipPath: procedure(page_object: FPDF_PAGEOBJECT; a, b, c, d, e, f: Double); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the clip path of the page object. // // page object - Handle to a page object. Returned by e.g. // FPDFPage_GetObject(). // // Returns the handle to the clip path, or NULL on failure. The caller does not // take ownership of the returned FPDF_CLIPPATH. Instead, it remains valid until // FPDF_ClosePage() is called for the page containing |page_object|. var FPDFPageObj_GetClipPath: function(page_object: FPDF_PAGEOBJECT): FPDF_CLIPPATH; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get number of paths inside |clip_path|. // // clip_path - handle to a clip_path. // // Returns the number of objects in |clip_path| or -1 on failure. var FPDFClipPath_CountPaths: function(clip_path: FPDF_CLIPPATH): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get number of segments inside one path of |clip_path|. // // clip_path - handle to a clip_path. // path_index - index into the array of paths of the clip path. // // Returns the number of segments or -1 on failure. var FPDFClipPath_CountPathSegments: function(clip_path: FPDF_CLIPPATH; path_index: Integer): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get segment in one specific path of |clip_path| at index. // // clip_path - handle to a clip_path. // path_index - the index of a path. // segment_index - the index of a segment. // // Returns the handle to the segment, or NULL on failure. The caller does not // take ownership of the returned FPDF_PATHSEGMENT. Instead, it remains valid // until FPDF_ClosePage() is called for the page containing |clip_path|. var FPDFClipPath_GetPathSegment: function(clip_path: FPDF_CLIPPATH; path_index, segment_index: Integer): FPDF_PATHSEGMENT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Create a new clip path, with a rectangle inserted. // // Caller takes ownership of the returned FPDF_CLIPPATH. It should be freed with // FPDF_DestroyClipPath(). // // left - The left of the clip box. // bottom - The bottom of the clip box. // right - The right of the clip box. // top - The top of the clip box. var FPDF_CreateClipPath: function(page_object: FPDF_PAGEOBJECT; left, bottom, right, top: Single): FPDF_CLIPPATH; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Destroy the clip path. // // clipPath - A handle to the clip path. It will be invalid after this call. var FPDF_DestroyClipPath: procedure(clipPath: FPDF_CLIPPATH); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Clip the page content, the page content that outside the clipping region // become invisible. // // A clip path will be inserted before the page content stream or content array. // In this way, the page content will be clipped by this clip path. // // page - A page handle. // clipPath - A handle to the clip path. (Does not take ownership.) var FPDFPage_InsertClipPath: procedure(page: FPDF_PAGE; clipPath: FPDF_CLIPPATH); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // *** _FPDF_STRUCTTREE_H_ *** // Function: FPDF_StructTree_GetForPage // Get the structure tree for a page. // Parameters: // page - Handle to the page, as returned by FPDF_LoadPage(). // Return value: // A handle to the structure tree or NULL on error. The caller owns the // returned handle and must use FPDF_StructTree_Close() to release it. // The handle should be released before |page| gets released. var FPDF_StructTree_GetForPage: function(page: FPDF_PAGE): FPDF_STRUCTTREE; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_StructTree_Close // Release a resource allocated by FPDF_StructTree_GetForPage(). // Parameters: // struct_tree - Handle to the structure tree, as returned by // FPDF_StructTree_LoadPage(). // Return value: // None. var FPDF_StructTree_Close: procedure(struct_tree: FPDF_STRUCTTREE); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_StructTree_CountChildren // Count the number of children for the structure tree. // Parameters: // struct_tree - Handle to the structure tree, as returned by // FPDF_StructTree_LoadPage(). // Return value: // The number of children, or -1 on error. var FPDF_StructTree_CountChildren: function(struct_tree: FPDF_STRUCTTREE): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_StructTree_GetChildAtIndex // Get a child in the structure tree. // Parameters: // struct_tree - Handle to the structure tree, as returned by // FPDF_StructTree_LoadPage(). // index - The index for the child, 0-based. // Return value: // The child at the n-th index or NULL on error. The caller does not // own the handle. The handle remains valid as long as |struct_tree| // remains valid. // Comments: // The |index| must be less than the FPDF_StructTree_CountChildren() // return value. var FPDF_StructTree_GetChildAtIndex: function(struct_tree: FPDF_STRUCTTREE; index: Integer): FPDF_STRUCTELEMENT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_StructElement_GetAltText // Get the alt text for a given element. // Parameters: // struct_element - Handle to the struct element. // buffer - A buffer for output the alt text. May be NULL. // buflen - The length of the buffer, in bytes. May be 0. // Return value: // The number of bytes in the alt text, including the terminating NUL // character. The number of bytes is returned regardless of the // |buffer| and |buflen| parameters. // Comments: // Regardless of the platform, the |buffer| is always in UTF-16LE // encoding. The string is terminated by a UTF16 NUL character. If // |buflen| is less than the required length, or |buffer| is NULL, // |buffer| will not be modified. var FPDF_StructElement_GetAltText: function(struct_element: FPDF_STRUCTELEMENT; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_StructElement_GetActualText // Get the actual text for a given element. // Parameters: // struct_element - Handle to the struct element. // buffer - A buffer for output the actual text. May be NULL. // buflen - The length of the buffer, in bytes. May be 0. // Return value: // The number of bytes in the actual text, including the terminating // NUL character. The number of bytes is returned regardless of the // |buffer| and |buflen| parameters. // Comments: // Regardless of the platform, the |buffer| is always in UTF-16LE // encoding. The string is terminated by a UTF16 NUL character. If // |buflen| is less than the required length, or |buffer| is NULL, // |buffer| will not be modified. var FPDF_StructElement_GetActualText: function(struct_element: FPDF_STRUCTELEMENT; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_StructElement_GetID // Get the ID for a given element. // Parameters: // struct_element - Handle to the struct element. // buffer - A buffer for output the ID string. May be NULL. // buflen - The length of the buffer, in bytes. May be 0. // Return value: // The number of bytes in the ID string, including the terminating NUL // character. The number of bytes is returned regardless of the // |buffer| and |buflen| parameters. // Comments: // Regardless of the platform, the |buffer| is always in UTF-16LE // encoding. The string is terminated by a UTF16 NUL character. If // |buflen| is less than the required length, or |buffer| is NULL, // |buffer| will not be modified. var FPDF_StructElement_GetID: function(struct_element: FPDF_STRUCTELEMENT; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_StructElement_GetLang // Get the case-insensitive IETF BCP 47 language code for an element. // Parameters: // struct_element - Handle to the struct element. // buffer - A buffer for output the lang string. May be NULL. // buflen - The length of the buffer, in bytes. May be 0. // Return value: // The number of bytes in the ID string, including the terminating NUL // character. The number of bytes is returned regardless of the // |buffer| and |buflen| parameters. // Comments: // Regardless of the platform, the |buffer| is always in UTF-16LE // encoding. The string is terminated by a UTF16 NUL character. If // |buflen| is less than the required length, or |buffer| is NULL, // |buffer| will not be modified. var FPDF_StructElement_GetLang: function(struct_element: FPDF_STRUCTELEMENT; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_StructElement_GetStringAttribute // Get a struct element attribute of type "name" or "string". // Parameters: // struct_element - Handle to the struct element. // attr_name - The name of the attribute to retrieve. // buffer - A buffer for output. May be NULL. // buflen - The length of the buffer, in bytes. May be 0. // Return value: // The number of bytes in the attribute value, including the // terminating NUL character. The number of bytes is returned // regardless of the |buffer| and |buflen| parameters. // Comments: // Regardless of the platform, the |buffer| is always in UTF-16LE // encoding. The string is terminated by a UTF16 NUL character. If // |buflen| is less than the required length, or |buffer| is NULL, // |buffer| will not be modified. var FPDF_StructElement_GetStringAttribute: function(struct_element: FPDF_STRUCTELEMENT; attr_name: FPDF_BYTESTRING; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_StructElement_GetMarkedContentID // Get the marked content ID for a given element. // Parameters: // struct_element - Handle to the struct element. // Return value: // The marked content ID of the element. If no ID exists, returns // -1. // Comments: // FPDF_StructElement_GetMarkedContentIdAtIndex() may be able to // extract more marked content IDs out of |struct_element|. This API // may be deprecated in the future. var FPDF_StructElement_GetMarkedContentID: function(struct_element: FPDF_STRUCTELEMENT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_StructElement_GetType // Get the type (/S) for a given element. // Parameters: // struct_element - Handle to the struct element. // buffer - A buffer for output. May be NULL. // buflen - The length of the buffer, in bytes. May be 0. // Return value: // The number of bytes in the type, including the terminating NUL // character. The number of bytes is returned regardless of the // |buffer| and |buflen| parameters. // Comments: // Regardless of the platform, the |buffer| is always in UTF-16LE // encoding. The string is terminated by a UTF16 NUL character. If // |buflen| is less than the required length, or |buffer| is NULL, // |buffer| will not be modified. var FPDF_StructElement_GetType: function(struct_element: FPDF_STRUCTELEMENT; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_StructElement_GetObjType // Get the object type (/Type) for a given element. // Parameters: // struct_element - Handle to the struct element. // buffer - A buffer for output. May be NULL. // buflen - The length of the buffer, in bytes. May be 0. // Return value: // The number of bytes in the object type, including the terminating // NUL character. The number of bytes is returned regardless of the // |buffer| and |buflen| parameters. // Comments: // Regardless of the platform, the |buffer| is always in UTF-16LE // encoding. The string is terminated by a UTF16 NUL character. If // |buflen| is less than the required length, or |buffer| is NULL, // |buffer| will not be modified. var FPDF_StructElement_GetObjType: function(struct_element: FPDF_STRUCTELEMENT; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_StructElement_GetTitle // Get the title (/T) for a given element. // Parameters: // struct_element - Handle to the struct element. // buffer - A buffer for output. May be NULL. // buflen - The length of the buffer, in bytes. May be 0. // Return value: // The number of bytes in the title, including the terminating NUL // character. The number of bytes is returned regardless of the // |buffer| and |buflen| parameters. // Comments: // Regardless of the platform, the |buffer| is always in UTF-16LE // encoding. The string is terminated by a UTF16 NUL character. If // |buflen| is less than the required length, or |buffer| is NULL, // |buffer| will not be modified. var FPDF_StructElement_GetTitle: function(struct_element: FPDF_STRUCTELEMENT; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_StructElement_CountChildren // Count the number of children for the structure element. // Parameters: // struct_element - Handle to the struct element. // Return value: // The number of children, or -1 on error. var FPDF_StructElement_CountChildren: function(struct_element: FPDF_STRUCTELEMENT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_StructElement_GetChildAtIndex // Get a child in the structure element. // Parameters: // struct_element - Handle to the struct element. // index - The index for the child, 0-based. // Return value: // The child at the n-th index or NULL on error. // Comments: // If the child exists but is not an element, then this function will // return NULL. This will also return NULL for out of bounds indices. // The |index| must be less than the FPDF_StructElement_CountChildren() // return value. var FPDF_StructElement_GetChildAtIndex: function(struct_element: FPDF_STRUCTELEMENT; index: Integer): FPDF_STRUCTELEMENT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_StructElement_GetChildMarkedContentID // Get the child's content id // Parameters: // struct_element - Handle to the struct element. // index - The index for the child, 0-based. // Return value: // The marked content ID of the child. If no ID exists, returns -1. // Comments: // If the child exists but is not a stream or object, then this // function will return -1. This will also return -1 for out of bounds // indices. Compared to FPDF_StructElement_GetMarkedContentIdAtIndex, // it is scoped to the current page. // The |index| must be less than the FPDF_StructElement_CountChildren() // return value. var FPDF_StructElement_GetChildMarkedContentID: function(struct_element: FPDF_STRUCTELEMENT; index: Integer): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_StructElement_GetParent // Get the parent of the structure element. // Parameters: // struct_element - Handle to the struct element. // Return value: // The parent structure element or NULL on error. // Comments: // If structure element is StructTreeRoot, then this function will // return NULL. var FPDF_StructElement_GetParent: function(struct_element: FPDF_STRUCTELEMENT): FPDF_STRUCTELEMENT; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Function: FPDF_StructElement_GetAttributeCount // Count the number of attributes for the structure element. // Parameters: // struct_element - Handle to the struct element. // Return value: // The number of attributes, or -1 on error. var FPDF_StructElement_GetAttributeCount: function(struct_element: FPDF_STRUCTELEMENT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_StructElement_GetAttributeAtIndex // Get an attribute object in the structure element. // Parameters: // struct_element - Handle to the struct element. // index - The index for the attribute object, 0-based. // Return value: // The attribute object at the n-th index or NULL on error. // Comments: // If the attribute object exists but is not a dict, then this // function will return NULL. This will also return NULL for out of // bounds indices. The caller does not own the handle. The handle // remains valid as long as |struct_element| remains valid. // The |index| must be less than the // FPDF_StructElement_GetAttributeCount() return value. var FPDF_StructElement_GetAttributeAtIndex: function(struct_element: FPDF_STRUCTELEMENT; index: Integer): FPDF_STRUCTELEMENT_ATTR; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_StructElement_Attr_GetCount // Count the number of attributes in a structure element attribute map. // Parameters: // struct_attribute - Handle to the struct element attribute. // Return value: // The number of attributes, or -1 on error. var FPDF_StructElement_Attr_GetCount: function(struct_attribute: FPDF_STRUCTELEMENT_ATTR): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_StructElement_Attr_GetName // Get the name of an attribute in a structure element attribute map. // Parameters: // struct_attribute - Handle to the struct element attribute. // index - The index of attribute in the map. // buffer - A buffer for output. May be NULL. This is only // modified if |buflen| is longer than the length // of the key. Optional, pass null to just // retrieve the size of the buffer needed. // buflen - The length of the buffer. // out_buflen - A pointer to variable that will receive the // minimum buffer size to contain the key. Not // filled if FALSE is returned. // Return value: // TRUE if the operation was successful, FALSE otherwise. var FPDF_StructElement_Attr_GetName: function(struct_attribute: FPDF_STRUCTELEMENT_ATTR; index: Integer; buffer: Pointer; buflen: LongWord; var out_buflen: LongWord): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_StructElement_Attr_GetValue // Get a handle to a value for an attribute in a structure element // attribute map. // Parameters: // struct_attribute - Handle to the struct element attribute. // name - The attribute name. // Return value: // Returns a handle to the value associated with the input, if any. // Returns NULL on failure. The caller does not own the handle. // The handle remains valid as long as |struct_attribute| remains // valid. var FPDF_StructElement_Attr_GetValue: function(struct_attribute: FPDF_STRUCTELEMENT_ATTR; name: FPDF_BYTESTRING): FPDF_STRUCTELEMENT_ATTR_VALUE; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_StructElement_Attr_GetType // Get the type of an attribute in a structure element attribute map. // Parameters: // value - Handle to the value. // Return value: // Returns the type of the value, or FPDF_OBJECT_UNKNOWN in case of // failure. Note that this will never return FPDF_OBJECT_REFERENCE, as // references are always dereferenced. var FPDF_StructElement_Attr_GetType: function(struct_attribute: FPDF_STRUCTELEMENT_ATTR_VALUE): FPDF_OBJECT_TYPE; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_StructElement_Attr_GetBooleanValue // Get the value of a boolean attribute in an attribute map as // FPDF_BOOL. FPDF_StructElement_Attr_GetType() should have returned // FPDF_OBJECT_BOOLEAN for this property. // Parameters: // value - Handle to the value. // out_value - A pointer to variable that will receive the value. Not // filled if false is returned. // Return value: // Returns TRUE if the attribute maps to a boolean value, FALSE // otherwise. var FPDF_StructElement_Attr_GetBooleanValue: function(value: FPDF_STRUCTELEMENT_ATTR_VALUE; var out_value: FPDF_BOOL): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_StructElement_Attr_GetNumberValue // Get the value of a number attribute in an attribute map as float. // FPDF_StructElement_Attr_GetType() should have returned // FPDF_OBJECT_NUMBER for this property. // Parameters: // value - Handle to the value. // out_value - A pointer to variable that will receive the value. Not // filled if false is returned. // Return value: // Returns TRUE if the attribute maps to a number value, FALSE // otherwise. var FPDF_StructElement_Attr_GetNumberValue: function(value: FPDF_STRUCTELEMENT_ATTR_VALUE; var out_value: Single): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_StructElement_Attr_GetStringValue // Get the value of a string attribute in an attribute map as string. // FPDF_StructElement_Attr_GetType() should have returned // FPDF_OBJECT_STRING or FPDF_OBJECT_NAME for this property. // Parameters: // value - Handle to the value. // buffer - A buffer for holding the returned key in UTF-16LE. // This is only modified if |buflen| is longer than the // length of the key. Optional, pass null to just // retrieve the size of the buffer needed. // buflen - The length of the buffer. // out_buflen - A pointer to variable that will receive the minimum // buffer size to contain the key. Not filled if FALSE is // returned. // Return value: // Returns TRUE if the attribute maps to a string value, FALSE // otherwise. var FPDF_StructElement_Attr_GetStringValue: function(value: FPDF_STRUCTELEMENT_ATTR; buffer: Pointer; buflen: LongWord; var out_buflen: LongWord): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_StructElement_Attr_GetBlobValue // Get the value of a blob attribute in an attribute map as string. // Parameters: // value - Handle to the value. // buffer - A buffer for holding the returned value. This is only // modified if |buflen| is at least as long as the length // of the value. Optional, pass null to just retrieve the // size of the buffer needed. // buflen - The length of the buffer. // out_buflen - A pointer to variable that will receive the minimum // buffer size to contain the key. Not filled if FALSE is // returned. // Return value: // Returns TRUE if the attribute maps to a string value, FALSE // otherwise. var FPDF_StructElement_Attr_GetBlobValue: function(value: FPDF_STRUCTELEMENT_ATTR; buffer: Pointer; buflen: LongWord; var out_buflen: LongWord): FPDF_BOOL; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_StructElement_Attr_CountChildren // Count the number of children values in an attribute. // Parameters: // value - Handle to the value. // Return value: // The number of children, or -1 on error. var FPDF_StructElement_Attr_CountChildren: function(value: FPDF_STRUCTELEMENT_ATTR_VALUE): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_StructElement_Attr_GetChildAtIndex // Get a child from an attribute. // Parameters: // value - Handle to the value. // index - The index for the child, 0-based. // Return value: // The child at the n-th index or NULL on error. // Comments: // The |index| must be less than the // FPDF_StructElement_Attr_CountChildren() return value. var FPDF_StructElement_Attr_GetChildAtIndex: function(value: FPDF_STRUCTELEMENT_ATTR_VALUE; index: Integer): FPDF_STRUCTELEMENT_ATTR_VALUE; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_StructElement_GetMarkedContentIdCount // Get the count of marked content ids for a given element. // Parameters: // struct_element - Handle to the struct element. // Return value: // The count of marked content ids or -1 if none exists. var FPDF_StructElement_GetMarkedContentIdCount: function(struct_element: FPDF_STRUCTELEMENT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Function: FPDF_StructElement_GetMarkedContentIdAtIndex // Get the marked content id at a given index for a given element. // Parameters: // struct_element - Handle to the struct element. // index - The index of the marked content id, 0-based. // Return value: // The marked content ID of the element. If no ID exists, returns // -1. // Comments: // The |index| must be less than the // FPDF_StructElement_GetMarkedContentIdCount() return value. // This will likely supersede FPDF_StructElement_GetMarkedContentID(). var FPDF_StructElement_GetMarkedContentIdAtIndex: function(struct_element: FPDF_STRUCTELEMENT; index: Integer): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // *** _FPDF_LIBS_H_ *** {$IFDEF PDF_ENABLE_V8} // Function: FPDF_InitEmbeddedLibraries // Initialize embedded libraries (v8, iuctl) included in pdfium // Parameters: // resourcePath - a path to v8 resources (snapshot_blob.bin, icudtl.dat, ...) // Return value: // None. // Comments: // This function must be called before calling FPDF_InitLibrary() // if v8 suppport is enabled var FPDF_InitEmbeddedLibraries: procedure(const resourcePath: PAnsiChar); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; {$ENDIF PDF_ENABLE_V8} // *** _FPDF_JAVASCRIPT_H_ *** // Experimental API. // Get the number of JavaScript actions in |document|. // // document - handle to a document. // // Returns the number of JavaScript actions in |document| or -1 on error. var FPDFDoc_GetJavaScriptActionCount: function(document: FPDF_DOCUMENT): Integer; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the JavaScript action at |index| in |document|. // // document - handle to a document. // index - the index of the requested JavaScript action. // // Returns the handle to the JavaScript action, or NULL on failure. // Caller owns the returned handle and must close it with // FPDFDoc_CloseJavaScriptAction(). var FPDFDoc_GetJavaScriptAction: function(document: FPDF_DOCUMENT; index: Integer): FPDF_JAVASCRIPT_ACTION; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Close a loaded FPDF_JAVASCRIPT_ACTION object. // javascript - Handle to a JavaScript action. var FPDFDoc_CloseJavaScriptAction: procedure(javascript: FPDF_JAVASCRIPT_ACTION); {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the name from the |javascript| handle. |buffer| is only modified if // |buflen| is longer than the length of the name. On errors, |buffer| is // unmodified and the returned length is 0. // // javascript - handle to an JavaScript action. // buffer - buffer for holding the name, encoded in UTF-16LE. // buflen - length of the buffer in bytes. // // Returns the length of the JavaScript action name in bytes. var FPDFJavaScriptAction_GetName: function(javascript: FPDF_JAVASCRIPT_ACTION; buffer: PFPDF_WCHAR; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Get the script from the |javascript| handle. |buffer| is only modified if // |buflen| is longer than the length of the script. On errors, |buffer| is // unmodified and the returned length is 0. // // javascript - handle to an JavaScript action. // buffer - buffer for holding the name, encoded in UTF-16LE. // buflen - length of the buffer in bytes. // // Returns the length of the JavaScript action name in bytes. var FPDFJavaScriptAction_GetScript: function(javascript: FPDF_JAVASCRIPT_ACTION; buffer: PFPDF_WCHAR; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // *** _FPDF_THUMBNAIL_H_ *** // Experimental API. // Gets the decoded data from the thumbnail of |page| if it exists. // This only modifies |buffer| if |buflen| less than or equal to the // size of the decoded data. Returns the size of the decoded // data or 0 if thumbnail DNE. Optional, pass null to just retrieve // the size of the buffer needed. // // page - handle to a page. // buffer - buffer for holding the decoded image data. // buflen - length of the buffer in bytes. var FPDFPage_GetDecodedThumbnailData: function(page: FPDF_PAGE; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Gets the raw data from the thumbnail of |page| if it exists. // This only modifies |buffer| if |buflen| is less than or equal to // the size of the raw data. Returns the size of the raw data or 0 // if thumbnail DNE. Optional, pass null to just retrieve the size // of the buffer needed. // // page - handle to a page. // buffer - buffer for holding the raw image data. // buflen - length of the buffer in bytes. var FPDFPage_GetRawThumbnailData: function(page: FPDF_PAGE; buffer: Pointer; buflen: LongWord): LongWord; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // Experimental API. // Returns the thumbnail of |page| as a FPDF_BITMAP. Returns a nullptr // if unable to access the thumbnail's stream. // // page - handle to a page. var FPDFPage_GetThumbnailAsBitmap: function(page: FPDF_PAGE): FPDF_BITMAP; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; // *********************************************************************** procedure InitPDFium(const DllPath: string = '' {$IFDEF PDF_ENABLE_V8}; const ResPath: string = ''{$ENDIF}); procedure InitPDFiumEx(const DllFileName: string{$IFDEF PDF_ENABLE_V8}; const ResPath: string{$ENDIF}); implementation uses {$IFDEF CPUX64} Math, {$ENDIF CPUX64} SysUtils; resourcestring RsFailedToLoadProc = 'Symbol "%s" was not found in pdfium.dll'; RsPdfiumNotLoaded = 'pdfium.dll is not loaded'; RsFunctionNotSupported = 'PDFium function is not supported'; function FPDF_ARGB(a, r, g, b: Byte): DWORD; inline; begin Result := DWORD(b) or (DWORD(g) shl 8) or (DWORD(r) shl 16) or (DWORD(a) shl 24); end; function FPDF_GetBValue(argb: DWORD): Byte; inline; begin Result := Byte(argb); end; function FPDF_GetGValue(argb: DWORD): Byte; inline; begin Result := Byte(argb shr 8); end; function FPDF_GetRValue(argb: DWORD): Byte; inline; begin Result := Byte(argb shr 16); end; function FPDF_GetAValue(argb: DWORD): Byte; inline; begin Result := Byte(argb shr 24); end; {$IFDEF PDF_ENABLE_XFA} function IS_XFA_FORMFIELD(type_: Integer): Boolean; inline; begin case type_ of FPDF_FORMFIELD_XFA, FPDF_FORMFIELD_XFA_CHECKBOX, FPDF_FORMFIELD_XFA_COMBOBOX, FPDF_FORMFIELD_XFA_IMAGEFIELD, FPDF_FORMFIELD_XFA_LISTBOX, FPDF_FORMFIELD_XFA_PUSHBUTTON, FPDF_FORMFIELD_XFA_SIGNATURE, FPDF_FORMFIELD_XFA_TEXTFIELD: Result := True; else Result := False; end; end; {$ENDIF PDF_ENABLE_XFA} type TImportFuncRec = record P: PPointer; {$IF defined(FPC) and not defined(MSWINDOWS)} N: AnsiString; // The "dynlibs" unit's GetProcAddress uses an AnsiString instead of PAnsiChar {$ELSE} N: PAnsiChar; {$IFEND} Quirk: Boolean; // True: if the symbol can't be found, no exception is raised. If both Quirk // and Optional are True and the symbol can't be found, it will be mapped // to FunctionNotSupported. // (used if the symbol's name has changed and both DLL versions should be supported) Optional: Boolean; // True: If the symbol can't be found, it is set to nil. // (used for optional exported features like V8 and XFA) end; const {$IFDEF FPC} {$WARN 3175 off : Some fields coming before "$1" were not initialized} {$WARN 3177 off : Some fields coming after "$1" were not initialized} {$ENDIF FPC} ImportFuncs: array[0..438 {$IFDEF MSWINDOWS } + 2 {$ENDIF} {$IFDEF PDF_USE_SKIA } + 2 {$ENDIF} {$IFDEF PDF_ENABLE_V8 } + 3 {$ENDIF} {$IFDEF PDF_ENABLE_XFA} + 3 {$ENDIF} ] of TImportFuncRec = ( // *** _FPDFVIEW_H_ *** (P: @@FPDF_InitLibraryWithConfig; N: 'FPDF_InitLibraryWithConfig'), (P: @@FPDF_InitLibrary; N: 'FPDF_InitLibrary'), (P: @@FPDF_DestroyLibrary; N: 'FPDF_DestroyLibrary'), (P: @@FPDF_SetSandBoxPolicy; N: 'FPDF_SetSandBoxPolicy'), {$IFDEF MSWINDOWS} (P: @@FPDF_SetPrintMode; N: 'FPDF_SetPrintMode'), {$ENDIF MSWINDOWS} (P: @@FPDF_LoadDocument; N: 'FPDF_LoadDocument'), (P: @@FPDF_LoadMemDocument; N: 'FPDF_LoadMemDocument'), (P: @@FPDF_LoadMemDocument64; N: 'FPDF_LoadMemDocument64'), (P: @@FPDF_LoadCustomDocument; N: 'FPDF_LoadCustomDocument'), (P: @@FPDF_GetFileVersion; N: 'FPDF_GetFileVersion'), (P: @@FPDF_GetLastError; N: 'FPDF_GetLastError'), (P: @@FPDF_DocumentHasValidCrossReferenceTable; N: 'FPDF_DocumentHasValidCrossReferenceTable'), (P: @@FPDF_GetTrailerEnds; N: 'FPDF_GetTrailerEnds'), (P: @@FPDF_GetDocPermissions; N: 'FPDF_GetDocPermissions'), (P: @@FPDF_GetDocUserPermissions; N: 'FPDF_GetDocUserPermissions'), (P: @@FPDF_GetSecurityHandlerRevision; N: 'FPDF_GetSecurityHandlerRevision'), (P: @@FPDF_GetPageCount; N: 'FPDF_GetPageCount'), (P: @@FPDF_LoadPage; N: 'FPDF_LoadPage'), (P: @@FPDF_GetPageWidthF; N: 'FPDF_GetPageWidthF'), (P: @@FPDF_GetPageWidth; N: 'FPDF_GetPageWidth'), (P: @@FPDF_GetPageHeightF; N: 'FPDF_GetPageHeightF'), (P: @@FPDF_GetPageHeight; N: 'FPDF_GetPageHeight'), (P: @@FPDF_GetPageBoundingBox; N: 'FPDF_GetPageBoundingBox'), (P: @@FPDF_GetPageSizeByIndexF; N: 'FPDF_GetPageSizeByIndexF'), (P: @@FPDF_GetPageSizeByIndex; N: 'FPDF_GetPageSizeByIndex'), {$IFDEF MSWINDOWS} (P: @@FPDF_RenderPage; N: 'FPDF_RenderPage'), {$ENDIF MSWINDOWS} (P: @@FPDF_RenderPageBitmap; N: 'FPDF_RenderPageBitmap'), (P: @@FPDF_RenderPageBitmapWithMatrix; N: 'FPDF_RenderPageBitmapWithMatrix'), {$IFDEF PDF_USE_SKIA} (P: @@FPDF_RenderPageSkia; N: 'FPDF_RenderPageSkia'; Quirk: True; Optional: True), {$ENDIF PDF_USE_SKIA} (P: @@FPDF_ClosePage; N: 'FPDF_ClosePage'), (P: @@FPDF_CloseDocument; N: 'FPDF_CloseDocument'), (P: @@FPDF_DeviceToPage; N: 'FPDF_DeviceToPage'), (P: @@FPDF_PageToDevice; N: 'FPDF_PageToDevice'), (P: @@FPDFBitmap_Create; N: 'FPDFBitmap_Create'), (P: @@FPDFBitmap_CreateEx; N: 'FPDFBitmap_CreateEx'), (P: @@FPDFBitmap_GetFormat; N: 'FPDFBitmap_GetFormat'), (P: @@FPDFBitmap_FillRect; N: 'FPDFBitmap_FillRect'), (P: @@FPDFBitmap_GetBuffer; N: 'FPDFBitmap_GetBuffer'), (P: @@FPDFBitmap_GetWidth; N: 'FPDFBitmap_GetWidth'), (P: @@FPDFBitmap_GetHeight; N: 'FPDFBitmap_GetHeight'), (P: @@FPDFBitmap_GetStride; N: 'FPDFBitmap_GetStride'), (P: @@FPDFBitmap_Destroy; N: 'FPDFBitmap_Destroy'), (P: @@FPDF_VIEWERREF_GetPrintScaling; N: 'FPDF_VIEWERREF_GetPrintScaling'), (P: @@FPDF_VIEWERREF_GetNumCopies; N: 'FPDF_VIEWERREF_GetNumCopies'), (P: @@FPDF_VIEWERREF_GetPrintPageRange; N: 'FPDF_VIEWERREF_GetPrintPageRange'), (P: @@FPDF_VIEWERREF_GetPrintPageRangeCount; N: 'FPDF_VIEWERREF_GetPrintPageRangeCount'), (P: @@FPDF_VIEWERREF_GetPrintPageRangeElement; N: 'FPDF_VIEWERREF_GetPrintPageRangeElement'), (P: @@FPDF_VIEWERREF_GetDuplex; N: 'FPDF_VIEWERREF_GetDuplex'), (P: @@FPDF_VIEWERREF_GetName; N: 'FPDF_VIEWERREF_GetName'), (P: @@FPDF_CountNamedDests; N: 'FPDF_CountNamedDests'), (P: @@FPDF_GetNamedDestByName; N: 'FPDF_GetNamedDestByName'), (P: @@FPDF_GetNamedDest; N: 'FPDF_GetNamedDest'), (P: @@FPDF_GetXFAPacketCount; N: 'FPDF_GetXFAPacketCount'), (P: @@FPDF_GetXFAPacketName; N: 'FPDF_GetXFAPacketName'), (P: @@FPDF_GetXFAPacketContent; N: 'FPDF_GetXFAPacketContent'), {$IFDEF PDF_ENABLE_V8} (P: @@FPDF_GetRecommendedV8Flags; N: 'FPDF_GetRecommendedV8Flags'; Quirk: True; Optional: True), (P: @@FPDF_GetArrayBufferAllocatorSharedInstance; N: 'FPDF_GetArrayBufferAllocatorSharedInstance'; Quirk: True; Optional: True), {$ENDIF PDF_ENABLE_V8} {$IFDEF PDF_ENABLE_XFA} (P: @@FPDF_BStr_Init; N: 'FPDF_BStr_Init'; Quirk: True; Optional: True), (P: @@FPDF_BStr_Set; N: 'FPDF_BStr_Set'; Quirk: True; Optional: True), (P: @@FPDF_BStr_Clear; N: 'FPDF_BStr_Clear'; Quirk: True; Optional: True), {$ENDIF PDF_ENABLE_XFA} // *** _FPDF_EDIT_H_ *** (P: @@FPDF_CreateNewDocument; N: 'FPDF_CreateNewDocument'), (P: @@FPDFPage_New; N: 'FPDFPage_New'), (P: @@FPDFPage_Delete; N: 'FPDFPage_Delete'), (P: @@FPDF_MovePages; N: 'FPDF_MovePages'), (P: @@FPDFPage_GetRotation; N: 'FPDFPage_GetRotation'), (P: @@FPDFPage_SetRotation; N: 'FPDFPage_SetRotation'), (P: @@FPDFPage_InsertObject; N: 'FPDFPage_InsertObject'), (P: @@FPDFPage_RemoveObject; N: 'FPDFPage_RemoveObject'), (P: @@FPDFPage_CountObjects; N: 'FPDFPage_CountObjects'), (P: @@FPDFPage_GetObject; N: 'FPDFPage_GetObject'), (P: @@FPDFPage_HasTransparency; N: 'FPDFPage_HasTransparency'), (P: @@FPDFPage_GenerateContent; N: 'FPDFPage_GenerateContent'), (P: @@FPDFPageObj_Destroy; N: 'FPDFPageObj_Destroy'), (P: @@FPDFPageObj_HasTransparency; N: 'FPDFPageObj_HasTransparency'), (P: @@FPDFPageObj_GetType; N: 'FPDFPageObj_GetType'), (P: @@FPDFPageObj_Transform; N: 'FPDFPageObj_Transform'), (P: @@FPDFPageObj_TransformF; N: 'FPDFPageObj_TransformF'), (P: @@FPDFPageObj_GetMatrix; N: 'FPDFPageObj_GetMatrix'), (P: @@FPDFPageObj_SetMatrix; N: 'FPDFPageObj_SetMatrix'), (P: @@FPDFPage_TransformAnnots; N: 'FPDFPage_TransformAnnots'), (P: @@FPDFPageObj_NewImageObj; N: 'FPDFPageObj_NewImageObj'), (P: @@FPDFPageObj_GetMarkedContentID; N: 'FPDFPageObj_GetMarkedContentID'), (P: @@FPDFPageObj_CountMarks; N: 'FPDFPageObj_CountMarks'), (P: @@FPDFPageObj_GetMark; N: 'FPDFPageObj_GetMark'), (P: @@FPDFPageObj_AddMark; N: 'FPDFPageObj_AddMark'), (P: @@FPDFPageObj_RemoveMark; N: 'FPDFPageObj_RemoveMark'), (P: @@FPDFPageObjMark_GetName; N: 'FPDFPageObjMark_GetName'), (P: @@FPDFPageObjMark_CountParams; N: 'FPDFPageObjMark_CountParams'), (P: @@FPDFPageObjMark_GetParamKey; N: 'FPDFPageObjMark_GetParamKey'), (P: @@FPDFPageObjMark_GetParamValueType; N: 'FPDFPageObjMark_GetParamValueType'), (P: @@FPDFPageObjMark_GetParamIntValue; N: 'FPDFPageObjMark_GetParamIntValue'), (P: @@FPDFPageObjMark_GetParamStringValue; N: 'FPDFPageObjMark_GetParamStringValue'), (P: @@FPDFPageObjMark_GetParamBlobValue; N: 'FPDFPageObjMark_GetParamBlobValue'), (P: @@FPDFPageObjMark_SetIntParam; N: 'FPDFPageObjMark_SetIntParam'), (P: @@FPDFPageObjMark_SetStringParam; N: 'FPDFPageObjMark_SetStringParam'), (P: @@FPDFPageObjMark_SetBlobParam; N: 'FPDFPageObjMark_SetBlobParam'), (P: @@FPDFPageObjMark_RemoveParam; N: 'FPDFPageObjMark_RemoveParam'), (P: @@FPDFImageObj_LoadJpegFile; N: 'FPDFImageObj_LoadJpegFile'), (P: @@FPDFImageObj_LoadJpegFileInline; N: 'FPDFImageObj_LoadJpegFileInline'), (P: @@FPDFImageObj_SetMatrix; N: 'FPDFImageObj_SetMatrix'), (P: @@FPDFImageObj_SetBitmap; N: 'FPDFImageObj_SetBitmap'), (P: @@FPDFImageObj_GetBitmap; N: 'FPDFImageObj_GetBitmap'), (P: @@FPDFImageObj_GetRenderedBitmap; N: 'FPDFImageObj_GetRenderedBitmap'), (P: @@FPDFImageObj_GetImageDataDecoded; N: 'FPDFImageObj_GetImageDataDecoded'), (P: @@FPDFImageObj_GetImageDataRaw; N: 'FPDFImageObj_GetImageDataRaw'), (P: @@FPDFImageObj_GetImageFilterCount; N: 'FPDFImageObj_GetImageFilterCount'), (P: @@FPDFImageObj_GetImageFilter; N: 'FPDFImageObj_GetImageFilter'), (P: @@FPDFImageObj_GetImageMetadata; N: 'FPDFImageObj_GetImageMetadata'), (P: @@FPDFImageObj_GetImagePixelSize; N: 'FPDFImageObj_GetImagePixelSize'), (P: @@FPDFPageObj_CreateNewPath; N: 'FPDFPageObj_CreateNewPath'), (P: @@FPDFPageObj_CreateNewRect; N: 'FPDFPageObj_CreateNewRect'), (P: @@FPDFPageObj_GetBounds; N: 'FPDFPageObj_GetBounds'), (P: @@FPDFPageObj_GetRotatedBounds; N: 'FPDFPageObj_GetRotatedBounds'), (P: @@FPDFPageObj_SetBlendMode; N: 'FPDFPageObj_SetBlendMode'), (P: @@FPDFPageObj_SetStrokeColor; N: 'FPDFPageObj_SetStrokeColor'), (P: @@FPDFPageObj_GetStrokeColor; N: 'FPDFPageObj_GetStrokeColor'), (P: @@FPDFPageObj_SetStrokeWidth; N: 'FPDFPageObj_SetStrokeWidth'), (P: @@FPDFPageObj_GetStrokeWidth; N: 'FPDFPageObj_GetStrokeWidth'), (P: @@FPDFPageObj_GetLineJoin; N: 'FPDFPageObj_GetLineJoin'), (P: @@FPDFPageObj_SetLineJoin; N: 'FPDFPageObj_SetLineJoin'), (P: @@FPDFPageObj_GetLineCap; N: 'FPDFPageObj_GetLineCap'), (P: @@FPDFPageObj_SetLineCap; N: 'FPDFPageObj_SetLineCap'), (P: @@FPDFPageObj_SetFillColor; N: 'FPDFPageObj_SetFillColor'), (P: @@FPDFPageObj_GetFillColor; N: 'FPDFPageObj_GetFillColor'), (P: @@FPDFPageObj_GetDashPhase; N: 'FPDFPageObj_GetDashPhase'), (P: @@FPDFPageObj_SetDashPhase; N: 'FPDFPageObj_SetDashPhase'), (P: @@FPDFPageObj_GetDashCount; N: 'FPDFPageObj_GetDashCount'), (P: @@FPDFPageObj_GetDashArray; N: 'FPDFPageObj_GetDashArray'), (P: @@FPDFPageObj_SetDashArray; N: 'FPDFPageObj_SetDashArray'), (P: @@FPDFPath_CountSegments; N: 'FPDFPath_CountSegments'), (P: @@FPDFPath_GetPathSegment; N: 'FPDFPath_GetPathSegment'), (P: @@FPDFPathSegment_GetPoint; N: 'FPDFPathSegment_GetPoint'), (P: @@FPDFPathSegment_GetType; N: 'FPDFPathSegment_GetType'), (P: @@FPDFPathSegment_GetClose; N: 'FPDFPathSegment_GetClose'), (P: @@FPDFPath_MoveTo; N: 'FPDFPath_MoveTo'), (P: @@FPDFPath_LineTo; N: 'FPDFPath_LineTo'), (P: @@FPDFPath_BezierTo; N: 'FPDFPath_BezierTo'), (P: @@FPDFPath_Close; N: 'FPDFPath_Close'), (P: @@FPDFPath_SetDrawMode; N: 'FPDFPath_SetDrawMode'), (P: @@FPDFPath_GetDrawMode; N: 'FPDFPath_GetDrawMode'), (P: @@FPDFPageObj_NewTextObj; N: 'FPDFPageObj_NewTextObj'), (P: @@FPDFText_SetText; N: 'FPDFText_SetText'), (P: @@FPDFText_SetCharcodes; N: 'FPDFText_SetCharcodes'), (P: @@FPDFText_LoadFont; N: 'FPDFText_LoadFont'), (P: @@FPDFText_LoadStandardFont; N: 'FPDFText_LoadStandardFont'), (P: @@FPDFText_LoadCidType2Font; N: 'FPDFText_LoadCidType2Font'), (P: @@FPDFTextObj_GetFontSize; N: 'FPDFTextObj_GetFontSize'), (P: @@FPDFFont_Close; N: 'FPDFFont_Close'), (P: @@FPDFPageObj_CreateTextObj; N: 'FPDFPageObj_CreateTextObj'), (P: @@FPDFTextObj_GetTextRenderMode; N: 'FPDFTextObj_GetTextRenderMode'), (P: @@FPDFTextObj_SetTextRenderMode; N: 'FPDFTextObj_SetTextRenderMode'), (P: @@FPDFTextObj_GetText; N: 'FPDFTextObj_GetText'), (P: @@FPDFTextObj_GetRenderedBitmap; N: 'FPDFTextObj_GetRenderedBitmap'), (P: @@FPDFTextObj_GetFont; N: 'FPDFTextObj_GetFont'), (P: @@FPDFFont_GetFamilyName; N: 'FPDFFont_GetFamilyName'), (P: @@FPDFFont_GetFontData; N: 'FPDFFont_GetFontData'), (P: @@FPDFFont_GetIsEmbedded; N: 'FPDFFont_GetIsEmbedded'), (P: @@FPDFFont_GetFlags; N: 'FPDFFont_GetFlags'), (P: @@FPDFFont_GetWeight; N: 'FPDFFont_GetWeight'), (P: @@FPDFFont_GetItalicAngle; N: 'FPDFFont_GetItalicAngle'), (P: @@FPDFFont_GetAscent; N: 'FPDFFont_GetAscent'), (P: @@FPDFFont_GetDescent; N: 'FPDFFont_GetDescent'), (P: @@FPDFFont_GetGlyphWidth; N: 'FPDFFont_GetGlyphWidth'), (P: @@FPDFFont_GetGlyphPath; N: 'FPDFFont_GetGlyphPath'), (P: @@FPDFGlyphPath_CountGlyphSegments; N: 'FPDFGlyphPath_CountGlyphSegments'), (P: @@FPDFGlyphPath_GetGlyphPathSegment; N: 'FPDFGlyphPath_GetGlyphPathSegment'), (P: @@FPDFFormObj_CountObjects; N: 'FPDFFormObj_CountObjects'), (P: @@FPDFFormObj_GetObject; N: 'FPDFFormObj_GetObject'), // *** _FPDF_PPO_H_ *** (P: @@FPDF_ImportPagesByIndex; N: 'FPDF_ImportPagesByIndex'), (P: @@FPDF_ImportPages; N: 'FPDF_ImportPages'), (P: @@FPDF_ImportNPagesToOne; N: 'FPDF_ImportNPagesToOne'), (P: @@FPDF_NewXObjectFromPage; N: 'FPDF_NewXObjectFromPage'), (P: @@FPDF_CloseXObject; N: 'FPDF_CloseXObject'), (P: @@FPDF_NewFormObjectFromXObject; N: 'FPDF_NewFormObjectFromXObject'), (P: @@FPDF_CopyViewerPreferences; N: 'FPDF_CopyViewerPreferences'), // *** _FPDF_SAVE_H_ *** (P: @@FPDF_SaveAsCopy; N: 'FPDF_SaveAsCopy'), (P: @@FPDF_SaveWithVersion; N: 'FPDF_SaveWithVersion'), // *** _FPDFTEXT_H_ *** (P: @@FPDFText_LoadPage; N: 'FPDFText_LoadPage'), (P: @@FPDFText_ClosePage; N: 'FPDFText_ClosePage'), (P: @@FPDFText_CountChars; N: 'FPDFText_CountChars'), (P: @@FPDFText_GetUnicode; N: 'FPDFText_GetUnicode'), (P: @@FPDFText_GetTextObject; N: 'FPDFText_GetTextObject'), (P: @@FPDFText_IsGenerated; N: 'FPDFText_IsGenerated'), (P: @@FPDFText_IsHyphen; N: 'FPDFText_IsHyphen'), (P: @@FPDFText_HasUnicodeMapError; N: 'FPDFText_HasUnicodeMapError'), (P: @@FPDFText_GetFontSize; N: 'FPDFText_GetFontSize'), (P: @@FPDFText_GetFontInfo; N: 'FPDFText_GetFontInfo'), (P: @@FPDFText_GetFontWeight; N: 'FPDFText_GetFontWeight'), (P: @@FPDFText_GetFillColor; N: 'FPDFText_GetFillColor'), (P: @@FPDFText_GetStrokeColor; N: 'FPDFText_GetStrokeColor'), (P: @@FPDFText_GetCharAngle; N: 'FPDFText_GetCharAngle'), (P: @@FPDFText_GetCharBox; N: 'FPDFText_GetCharBox'), (P: @@FPDFText_GetLooseCharBox; N: 'FPDFText_GetLooseCharBox'), (P: @@FPDFText_GetMatrix; N: 'FPDFText_GetMatrix'), (P: @@FPDFText_GetCharOrigin; N: 'FPDFText_GetCharOrigin'), (P: @@FPDFText_GetCharIndexAtPos; N: 'FPDFText_GetCharIndexAtPos'), (P: @@FPDFText_GetText; N: 'FPDFText_GetText'), (P: @@FPDFText_CountRects; N: 'FPDFText_CountRects'), (P: @@FPDFText_GetRect; N: 'FPDFText_GetRect'), (P: @@FPDFText_GetBoundedText; N: 'FPDFText_GetBoundedText'), (P: @@FPDFText_FindStart; N: 'FPDFText_FindStart'), (P: @@FPDFText_FindNext; N: 'FPDFText_FindNext'), (P: @@FPDFText_FindPrev; N: 'FPDFText_FindPrev'), (P: @@FPDFText_GetSchResultIndex; N: 'FPDFText_GetSchResultIndex'), (P: @@FPDFText_GetSchCount; N: 'FPDFText_GetSchCount'), (P: @@FPDFText_FindClose; N: 'FPDFText_FindClose'), (P: @@FPDFLink_LoadWebLinks; N: 'FPDFLink_LoadWebLinks'), (P: @@FPDFLink_CountWebLinks; N: 'FPDFLink_CountWebLinks'), (P: @@FPDFLink_GetURL; N: 'FPDFLink_GetURL'), (P: @@FPDFLink_CountRects; N: 'FPDFLink_CountRects'), (P: @@FPDFLink_GetRect; N: 'FPDFLink_GetRect'), (P: @@FPDFLink_GetTextRange; N: 'FPDFLink_GetTextRange'), (P: @@FPDFLink_CloseWebLinks; N: 'FPDFLink_CloseWebLinks'), // *** _FPDF_SEARCHEX_H_ *** (P: @@FPDFText_GetCharIndexFromTextIndex; N: 'FPDFText_GetCharIndexFromTextIndex'), (P: @@FPDFText_GetTextIndexFromCharIndex; N: 'FPDFText_GetTextIndexFromCharIndex'), // *** _FPDF_PROGRESSIVE_H_ *** (P: @@FPDF_RenderPageBitmapWithColorScheme_Start; N: 'FPDF_RenderPageBitmapWithColorScheme_Start'), (P: @@FPDF_RenderPageBitmap_Start; N: 'FPDF_RenderPageBitmap_Start'), (P: @@FPDF_RenderPage_Continue; N: 'FPDF_RenderPage_Continue'), (P: @@FPDF_RenderPage_Close; N: 'FPDF_RenderPage_Close'), // *** _FPDF_SIGNATURE_H_ *** (P: @@FPDF_GetSignatureCount; N: 'FPDF_GetSignatureCount'), (P: @@FPDF_GetSignatureObject; N: 'FPDF_GetSignatureObject'), (P: @@FPDFSignatureObj_GetContents; N: 'FPDFSignatureObj_GetContents'), (P: @@FPDFSignatureObj_GetByteRange; N: 'FPDFSignatureObj_GetByteRange'), (P: @@FPDFSignatureObj_GetSubFilter; N: 'FPDFSignatureObj_GetSubFilter'), (P: @@FPDFSignatureObj_GetReason; N: 'FPDFSignatureObj_GetReason'), (P: @@FPDFSignatureObj_GetTime; N: 'FPDFSignatureObj_GetTime'), (P: @@FPDFSignatureObj_GetDocMDPPermission; N: 'FPDFSignatureObj_GetDocMDPPermission'), // *** _FPDF_FLATTEN_H_ *** (P: @@FPDFPage_Flatten; N: 'FPDFPage_Flatten'), // *** _FPDF_DOC_H_ *** (P: @@FPDFBookmark_GetFirstChild; N: 'FPDFBookmark_GetFirstChild'), (P: @@FPDFBookmark_GetNextSibling; N: 'FPDFBookmark_GetNextSibling'), (P: @@FPDFBookmark_GetTitle; N: 'FPDFBookmark_GetTitle'), (P: @@FPDFBookmark_GetCount; N: 'FPDFBookmark_GetCount'), (P: @@FPDFBookmark_Find; N: 'FPDFBookmark_Find'), (P: @@FPDFBookmark_GetDest; N: 'FPDFBookmark_GetDest'), (P: @@FPDFBookmark_GetAction; N: 'FPDFBookmark_GetAction'), (P: @@FPDFAction_GetDest; N: 'FPDFAction_GetDest'), (P: @@FPDFAction_GetType; N: 'FPDFAction_GetType'), (P: @@FPDFAction_GetFilePath; N: 'FPDFAction_GetFilePath'), (P: @@FPDFAction_GetURIPath; N: 'FPDFAction_GetURIPath'), (P: @@FPDFDest_GetDestPageIndex; N: 'FPDFDest_GetDestPageIndex'), (P: @@FPDFDest_GetView; N: 'FPDFDest_GetView'), (P: @@FPDFDest_GetLocationInPage; N: 'FPDFDest_GetLocationInPage'), (P: @@FPDFLink_GetLinkAtPoint; N: 'FPDFLink_GetLinkAtPoint'), (P: @@FPDFLink_GetLinkZOrderAtPoint; N: 'FPDFLink_GetLinkZOrderAtPoint'), (P: @@FPDFLink_GetDest; N: 'FPDFLink_GetDest'), (P: @@FPDFLink_GetAction; N: 'FPDFLink_GetAction'), (P: @@FPDFLink_Enumerate; N: 'FPDFLink_Enumerate'), (P: @@FPDFLink_GetAnnot; N: 'FPDFLink_GetAnnot'), (P: @@FPDFLink_GetAnnotRect; N: 'FPDFLink_GetAnnotRect'), (P: @@FPDFLink_CountQuadPoints; N: 'FPDFLink_CountQuadPoints'), (P: @@FPDFLink_GetQuadPoints; N: 'FPDFLink_GetQuadPoints'), (P: @@FPDF_GetPageAAction; N: 'FPDF_GetPageAAction'), (P: @@FPDF_GetFileIdentifier; N: 'FPDF_GetFileIdentifier'), (P: @@FPDF_GetMetaText; N: 'FPDF_GetMetaText'), (P: @@FPDF_GetPageLabel; N: 'FPDF_GetPageLabel'), // *** _FPDF_SYSFONTINFO_H_ *** (P: @@FPDF_GetDefaultTTFMap; N: 'FPDF_GetDefaultTTFMap'), (P: @@FPDF_GetDefaultTTFMapCount; N: 'FPDF_GetDefaultTTFMapCount'), (P: @@FPDF_GetDefaultTTFMapEntry; N: 'FPDF_GetDefaultTTFMapEntry'), (P: @@FPDF_AddInstalledFont; N: 'FPDF_AddInstalledFont'), (P: @@FPDF_SetSystemFontInfo; N: 'FPDF_SetSystemFontInfo'), (P: @@FPDF_GetDefaultSystemFontInfo; N: 'FPDF_GetDefaultSystemFontInfo'), (P: @@FPDFDoc_GetPageMode; N: 'FPDFDoc_GetPageMode'), // *** _FPDF_EXT_H_ *** (P: @@FSDK_SetUnSpObjProcessHandler; N: 'FSDK_SetUnSpObjProcessHandler'), (P: @@FSDK_SetTimeFunction; N: 'FSDK_SetTimeFunction'), (P: @@FSDK_SetLocaltimeFunction; N: 'FSDK_SetLocaltimeFunction'), // *** _FPDF_DATAAVAIL_H_ *** (P: @@FPDFAvail_Create; N: 'FPDFAvail_Create'), (P: @@FPDFAvail_Destroy; N: 'FPDFAvail_Destroy'), (P: @@FPDFAvail_IsDocAvail; N: 'FPDFAvail_IsDocAvail'), (P: @@FPDFAvail_GetDocument; N: 'FPDFAvail_GetDocument'), (P: @@FPDFAvail_GetFirstPageNum; N: 'FPDFAvail_GetFirstPageNum'), (P: @@FPDFAvail_IsPageAvail; N: 'FPDFAvail_IsPageAvail'), (P: @@FPDFAvail_IsFormAvail; N: 'FPDFAvail_IsFormAvail'), (P: @@FPDFAvail_IsLinearized; N: 'FPDFAvail_IsLinearized'), // *** _FPD_FORMFILL_H *** (P: @@FPDFDOC_InitFormFillEnvironment; N: 'FPDFDOC_InitFormFillEnvironment'), (P: @@FPDFDOC_ExitFormFillEnvironment; N: 'FPDFDOC_ExitFormFillEnvironment'), (P: @@FORM_OnAfterLoadPage; N: 'FORM_OnAfterLoadPage'), (P: @@FORM_OnBeforeClosePage; N: 'FORM_OnBeforeClosePage'), (P: @@FORM_DoDocumentJSAction; N: 'FORM_DoDocumentJSAction'), (P: @@FORM_DoDocumentOpenAction; N: 'FORM_DoDocumentOpenAction'), (P: @@FORM_DoDocumentAAction; N: 'FORM_DoDocumentAAction'), (P: @@FORM_DoPageAAction; N: 'FORM_DoPageAAction'), (P: @@FORM_OnMouseMove; N: 'FORM_OnMouseMove'), (P: @@FORM_OnMouseWheel; N: 'FORM_OnMouseWheel'), (P: @@FORM_OnFocus; N: 'FORM_OnFocus'), (P: @@FORM_OnLButtonDown; N: 'FORM_OnLButtonDown'), (P: @@FORM_OnRButtonDown; N: 'FORM_OnRButtonDown'), (P: @@FORM_OnLButtonUp; N: 'FORM_OnLButtonUp'), (P: @@FORM_OnRButtonUp; N: 'FORM_OnRButtonUp'), (P: @@FORM_OnLButtonDoubleClick; N: 'FORM_OnLButtonDoubleClick'), (P: @@FORM_OnKeyDown; N: 'FORM_OnKeyDown'), (P: @@FORM_OnKeyUp; N: 'FORM_OnKeyUp'), (P: @@FORM_OnChar; N: 'FORM_OnChar'), (P: @@FORM_GetFocusedText; N: 'FORM_GetFocusedText'), (P: @@FORM_GetSelectedText; N: 'FORM_GetSelectedText'), (P: @@FORM_ReplaceAndKeepSelection; N: 'FORM_ReplaceAndKeepSelection'), (P: @@FORM_ReplaceSelection; N: 'FORM_ReplaceSelection'), (P: @@FORM_SelectAllText; N: 'FORM_SelectAllText'), (P: @@FORM_CanUndo; N: 'FORM_CanUndo'), (P: @@FORM_CanRedo; N: 'FORM_CanRedo'), (P: @@FORM_Undo; N: 'FORM_Undo'), (P: @@FORM_Redo; N: 'FORM_Redo'), (P: @@FORM_ForceToKillFocus; N: 'FORM_ForceToKillFocus'), (P: @@FORM_GetFocusedAnnot; N: 'FORM_GetFocusedAnnot'), (P: @@FORM_SetFocusedAnnot; N: 'FORM_SetFocusedAnnot'), (P: @@FPDFPage_HasFormFieldAtPoint; N: 'FPDFPage_HasFormFieldAtPoint'), (P: @@FPDFPage_FormFieldZOrderAtPoint; N: 'FPDFPage_FormFieldZOrderAtPoint'), (P: @@FPDF_SetFormFieldHighlightColor; N: 'FPDF_SetFormFieldHighlightColor'), (P: @@FPDF_SetFormFieldHighlightAlpha; N: 'FPDF_SetFormFieldHighlightAlpha'), (P: @@FPDF_RemoveFormFieldHighlight; N: 'FPDF_RemoveFormFieldHighlight'), (P: @@FPDF_FFLDraw; N: 'FPDF_FFLDraw'), {$IFDEF PDF_USE_SKIA} (P: @@FPDF_FFLDrawSkia; N: 'FPDF_FFLDrawSkia'; Quirk: True; Optional: True), {$ENDIF PDF_USE_SKIA} (P: @@FPDF_GetFormType; N: 'FPDF_GetFormType'), (P: @@FORM_SetIndexSelected; N: 'FORM_SetIndexSelected'), (P: @@FORM_IsIndexSelected; N: 'FORM_IsIndexSelected'), (P: @@FPDF_LoadXFA; N: 'FPDF_LoadXFA'), // *** _FPDF_CATALOG_H_ *** (P: @@FPDFCatalog_IsTagged; N: 'FPDFCatalog_IsTagged'), // *** _FPDF_ATTACHMENT_H_ *** (P: @@FPDFDoc_GetAttachmentCount; N: 'FPDFDoc_GetAttachmentCount'), (P: @@FPDFDoc_AddAttachment; N: 'FPDFDoc_AddAttachment'), (P: @@FPDFDoc_GetAttachment; N: 'FPDFDoc_GetAttachment'), (P: @@FPDFDoc_DeleteAttachment; N: 'FPDFDoc_DeleteAttachment'), (P: @@FPDFAttachment_GetName; N: 'FPDFAttachment_GetName'), (P: @@FPDFAttachment_HasKey; N: 'FPDFAttachment_HasKey'), (P: @@FPDFAttachment_GetValueType; N: 'FPDFAttachment_GetValueType'), (P: @@FPDFAttachment_SetStringValue; N: 'FPDFAttachment_SetStringValue'), (P: @@FPDFAttachment_GetStringValue; N: 'FPDFAttachment_GetStringValue'), (P: @@FPDFAttachment_SetFile; N: 'FPDFAttachment_SetFile'), (P: @@FPDFAttachment_GetFile; N: 'FPDFAttachment_GetFile'), // *** _FPDF_TRANSFORMPAGE_H_ *** (P: @@FPDFPage_SetMediaBox; N: 'FPDFPage_SetMediaBox'), (P: @@FPDFPage_SetCropBox; N: 'FPDFPage_SetCropBox'), (P: @@FPDFPage_SetBleedBox; N: 'FPDFPage_SetBleedBox'), (P: @@FPDFPage_SetTrimBox; N: 'FPDFPage_SetTrimBox'), (P: @@FPDFPage_SetArtBox; N: 'FPDFPage_SetArtBox'), (P: @@FPDFPage_GetMediaBox; N: 'FPDFPage_GetMediaBox'), (P: @@FPDFPage_GetCropBox; N: 'FPDFPage_GetCropBox'), (P: @@FPDFPage_GetBleedBox; N: 'FPDFPage_GetBleedBox'), (P: @@FPDFPage_GetTrimBox; N: 'FPDFPage_GetTrimBox'), (P: @@FPDFPage_GetArtBox; N: 'FPDFPage_GetArtBox'), (P: @@FPDFPage_TransFormWithClip; N: 'FPDFPage_TransFormWithClip'), (P: @@FPDFPageObj_TransformClipPath; N: 'FPDFPageObj_TransformClipPath'), (P: @@FPDFPageObj_GetClipPath; N: 'FPDFPageObj_GetClipPath'), (P: @@FPDFClipPath_CountPaths; N: 'FPDFClipPath_CountPaths'), (P: @@FPDFClipPath_CountPathSegments; N: 'FPDFClipPath_CountPathSegments'), (P: @@FPDFClipPath_GetPathSegment; N: 'FPDFClipPath_GetPathSegment'), (P: @@FPDF_CreateClipPath; N: 'FPDF_CreateClipPath'), (P: @@FPDF_DestroyClipPath; N: 'FPDF_DestroyClipPath'), (P: @@FPDFPage_InsertClipPath; N: 'FPDFPage_InsertClipPath'), // *** _FPDF_STRUCTTREE_H_ *** (P: @@FPDF_StructTree_GetForPage; N: 'FPDF_StructTree_GetForPage'), (P: @@FPDF_StructTree_Close; N: 'FPDF_StructTree_Close'), (P: @@FPDF_StructTree_CountChildren; N: 'FPDF_StructTree_CountChildren'), (P: @@FPDF_StructTree_GetChildAtIndex; N: 'FPDF_StructTree_GetChildAtIndex'), (P: @@FPDF_StructElement_GetAltText; N: 'FPDF_StructElement_GetAltText'), (P: @@FPDF_StructElement_GetActualText; N: 'FPDF_StructElement_GetActualText'), (P: @@FPDF_StructElement_GetID; N: 'FPDF_StructElement_GetID'), (P: @@FPDF_StructElement_GetLang; N: 'FPDF_StructElement_GetLang'), (P: @@FPDF_StructElement_GetStringAttribute; N: 'FPDF_StructElement_GetStringAttribute'), (P: @@FPDF_StructElement_GetMarkedContentID; N: 'FPDF_StructElement_GetMarkedContentID'), (P: @@FPDF_StructElement_GetType; N: 'FPDF_StructElement_GetType'), (P: @@FPDF_StructElement_GetObjType; N: 'FPDF_StructElement_GetObjType'), (P: @@FPDF_StructElement_GetTitle; N: 'FPDF_StructElement_GetTitle'), (P: @@FPDF_StructElement_CountChildren; N: 'FPDF_StructElement_CountChildren'), (P: @@FPDF_StructElement_GetChildAtIndex; N: 'FPDF_StructElement_GetChildAtIndex'), (P: @@FPDF_StructElement_GetChildMarkedContentID; N: 'FPDF_StructElement_GetChildMarkedContentID'), (P: @@FPDF_StructElement_GetParent; N: 'FPDF_StructElement_GetParent'), (P: @@FPDF_StructElement_GetAttributeCount; N: 'FPDF_StructElement_GetAttributeCount'), (P: @@FPDF_StructElement_GetAttributeAtIndex; N: 'FPDF_StructElement_GetAttributeAtIndex'), (P: @@FPDF_StructElement_Attr_GetCount; N: 'FPDF_StructElement_Attr_GetCount'), (P: @@FPDF_StructElement_Attr_GetName; N: 'FPDF_StructElement_Attr_GetName'), (P: @@FPDF_StructElement_Attr_GetType; N: 'FPDF_StructElement_Attr_GetType'), (P: @@FPDF_StructElement_Attr_GetBooleanValue; N: 'FPDF_StructElement_Attr_GetBooleanValue'), (P: @@FPDF_StructElement_Attr_GetNumberValue; N: 'FPDF_StructElement_Attr_GetNumberValue'), (P: @@FPDF_StructElement_Attr_GetStringValue; N: 'FPDF_StructElement_Attr_GetStringValue'), (P: @@FPDF_StructElement_Attr_GetBlobValue; N: 'FPDF_StructElement_Attr_GetBlobValue'), (P: @@FPDF_StructElement_Attr_CountChildren; N: 'FPDF_StructElement_Attr_CountChildren'), (P: @@FPDF_StructElement_Attr_GetChildAtIndex; N: 'FPDF_StructElement_Attr_GetChildAtIndex'), (P: @@FPDF_StructElement_GetMarkedContentIdCount; N: 'FPDF_StructElement_GetMarkedContentIdCount'), (P: @@FPDF_StructElement_GetMarkedContentIdAtIndex; N: 'FPDF_StructElement_GetMarkedContentIdAtIndex'), (P: @@FPDFAnnot_IsSupportedSubtype; N: 'FPDFAnnot_IsSupportedSubtype'), (P: @@FPDFPage_CreateAnnot; N: 'FPDFPage_CreateAnnot'), (P: @@FPDFPage_GetAnnotCount; N: 'FPDFPage_GetAnnotCount'), (P: @@FPDFPage_GetAnnot; N: 'FPDFPage_GetAnnot'), (P: @@FPDFPage_GetAnnotIndex; N: 'FPDFPage_GetAnnotIndex'), (P: @@FPDFPage_CloseAnnot; N: 'FPDFPage_CloseAnnot'), (P: @@FPDFPage_RemoveAnnot; N: 'FPDFPage_RemoveAnnot'), (P: @@FPDFAnnot_GetSubtype; N: 'FPDFAnnot_GetSubtype'), (P: @@FPDFAnnot_IsObjectSupportedSubtype; N: 'FPDFAnnot_IsObjectSupportedSubtype'), (P: @@FPDFAnnot_UpdateObject; N: 'FPDFAnnot_UpdateObject'), (P: @@FPDFAnnot_AddInkStroke; N: 'FPDFAnnot_AddInkStroke'), (P: @@FPDFAnnot_RemoveInkList; N: 'FPDFAnnot_RemoveInkList'), (P: @@FPDFAnnot_AppendObject; N: 'FPDFAnnot_AppendObject'), (P: @@FPDFAnnot_GetObjectCount; N: 'FPDFAnnot_GetObjectCount'), (P: @@FPDFAnnot_GetObject; N: 'FPDFAnnot_GetObject'), (P: @@FPDFAnnot_RemoveObject; N: 'FPDFAnnot_RemoveObject'), (P: @@FPDFAnnot_SetColor; N: 'FPDFAnnot_SetColor'), (P: @@FPDFAnnot_GetColor; N: 'FPDFAnnot_GetColor'), (P: @@FPDFAnnot_HasAttachmentPoints; N: 'FPDFAnnot_HasAttachmentPoints'), (P: @@FPDFAnnot_SetAttachmentPoints; N: 'FPDFAnnot_SetAttachmentPoints'), (P: @@FPDFAnnot_AppendAttachmentPoints; N: 'FPDFAnnot_AppendAttachmentPoints'), (P: @@FPDFAnnot_CountAttachmentPoints; N: 'FPDFAnnot_CountAttachmentPoints'), (P: @@FPDFAnnot_GetAttachmentPoints; N: 'FPDFAnnot_GetAttachmentPoints'), (P: @@FPDFAnnot_SetRect; N: 'FPDFAnnot_SetRect'), (P: @@FPDFAnnot_GetRect; N: 'FPDFAnnot_GetRect'), (P: @@FPDFAnnot_GetVertices; N: 'FPDFAnnot_GetVertices'), (P: @@FPDFAnnot_GetInkListCount; N: 'FPDFAnnot_GetInkListCount'), (P: @@FPDFAnnot_GetInkListPath; N: 'FPDFAnnot_GetInkListPath'), (P: @@FPDFAnnot_GetLine; N: 'FPDFAnnot_GetLine'), (P: @@FPDFAnnot_SetBorder; N: 'FPDFAnnot_SetBorder'), (P: @@FPDFAnnot_GetBorder; N: 'FPDFAnnot_GetBorder'), (P: @@FPDFAnnot_GetFormAdditionalActionJavaScript; N: 'FPDFAnnot_GetFormAdditionalActionJavaScript'), (P: @@FPDFAnnot_HasKey; N: 'FPDFAnnot_HasKey'), (P: @@FPDFAnnot_GetValueType; N: 'FPDFAnnot_GetValueType'), (P: @@FPDFAnnot_SetStringValue; N: 'FPDFAnnot_SetStringValue'), (P: @@FPDFAnnot_GetStringValue; N: 'FPDFAnnot_GetStringValue'), (P: @@FPDFAnnot_GetNumberValue; N: 'FPDFAnnot_GetNumberValue'), (P: @@FPDFAnnot_SetAP; N: 'FPDFAnnot_SetAP'), (P: @@FPDFAnnot_GetAP; N: 'FPDFAnnot_GetAP'), (P: @@FPDFAnnot_GetLinkedAnnot; N: 'FPDFAnnot_GetLinkedAnnot'), (P: @@FPDFAnnot_GetFlags; N: 'FPDFAnnot_GetFlags'), (P: @@FPDFAnnot_SetFlags; N: 'FPDFAnnot_SetFlags'), (P: @@FPDFAnnot_GetFormFieldFlags; N: 'FPDFAnnot_GetFormFieldFlags'), (P: @@FPDFAnnot_GetFormFieldAtPoint; N: 'FPDFAnnot_GetFormFieldAtPoint'), (P: @@FPDFAnnot_GetFormFieldName; N: 'FPDFAnnot_GetFormFieldName'), (P: @@FPDFAnnot_GetFormFieldAlternateName; N: 'FPDFAnnot_GetFormFieldAlternateName'), (P: @@FPDFAnnot_GetFormFieldType; N: 'FPDFAnnot_GetFormFieldType'), (P: @@FPDFAnnot_GetFormFieldValue; N: 'FPDFAnnot_GetFormFieldValue'), (P: @@FPDFAnnot_GetOptionCount; N: 'FPDFAnnot_GetOptionCount'), (P: @@FPDFAnnot_GetOptionLabel; N: 'FPDFAnnot_GetOptionLabel'), (P: @@FPDFAnnot_IsOptionSelected; N: 'FPDFAnnot_IsOptionSelected'), (P: @@FPDFAnnot_GetFontSize; N: 'FPDFAnnot_GetFontSize'), (P: @@FPDFAnnot_GetFontColor; N: 'FPDFAnnot_GetFontColor'), (P: @@FPDFAnnot_IsChecked; N: 'FPDFAnnot_IsChecked'), (P: @@FPDFAnnot_SetFocusableSubtypes; N: 'FPDFAnnot_SetFocusableSubtypes'), (P: @@FPDFAnnot_GetFocusableSubtypesCount; N: 'FPDFAnnot_GetFocusableSubtypesCount'), (P: @@FPDFAnnot_GetFocusableSubtypes; N: 'FPDFAnnot_GetFocusableSubtypes'), (P: @@FPDFAnnot_GetLink; N: 'FPDFAnnot_GetLink'), (P: @@FPDFAnnot_GetFormControlCount; N: 'FPDFAnnot_GetFormControlCount'), (P: @@FPDFAnnot_GetFormControlIndex; N: 'FPDFAnnot_GetFormControlIndex'), (P: @@FPDFAnnot_GetFormFieldExportValue; N: 'FPDFAnnot_GetFormFieldExportValue'), (P: @@FPDFAnnot_SetURI; N: 'FPDFAnnot_SetURI'), (P: @@FPDFAnnot_GetFileAttachment; N: 'FPDFAnnot_GetFileAttachment'), (P: @@FPDFAnnot_AddFileAttachment; N: 'FPDFAnnot_AddFileAttachment'), {$IFDEF PDF_ENABLE_V8} // *** _FPDF_LIBS_H_ *** (P: @@FPDF_InitEmbeddedLibraries; N: 'FPDF_InitEmbeddedLibraries'; Optional: True), {$ENDIF PDF_ENABLE_V8} // *** _FPDF_JAVASCRIPT_H_ *** (P: @@FPDFDoc_GetJavaScriptActionCount; N: 'FPDFDoc_GetJavaScriptActionCount'), (P: @@FPDFDoc_GetJavaScriptAction; N: 'FPDFDoc_GetJavaScriptAction'), (P: @@FPDFDoc_CloseJavaScriptAction; N: 'FPDFDoc_CloseJavaScriptAction'), (P: @@FPDFJavaScriptAction_GetName; N: 'FPDFJavaScriptAction_GetName'), (P: @@FPDFJavaScriptAction_GetScript; N: 'FPDFJavaScriptAction_GetScript'), // *** _FPDF_THUMBNAIL_H_ *** (P: @@FPDFPage_GetDecodedThumbnailData; N: 'FPDFPage_GetDecodedThumbnailData'), (P: @@FPDFPage_GetRawThumbnailData; N: 'FPDFPage_GetRawThumbnailData'), (P: @@FPDFPage_GetThumbnailAsBitmap; N: 'FPDFPage_GetThumbnailAsBitmap') ); {$IFDEF FPC} {$WARN 3175 on : Some fields coming before "$1" were not initialized} {$WARN 3177 on : Some fields coming after "$1" were not initialized} {$ENDIF FPC} const pdfium_dll = 'pdfium.dll'; var PdfiumModule: HMODULE; procedure NotLoaded; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; begin raise Exception.CreateRes(@RsPdfiumNotLoaded); end; procedure FunctionNotSupported; {$IFDEF DLLEXPORT}stdcall{$ELSE}cdecl{$ENDIF}; begin raise Exception.CreateRes(@RsFunctionNotSupported); end; function PDF_USE_XFA: Boolean; begin {$IFDEF PDF_ENABLE_XFA} Result := Assigned(FPDF_BStr_Init) and (@FPDF_BStr_Init <> @NotLoaded) and (@FPDF_BStr_Init <> @FunctionNotSupported); {$ELSE} Result := False; {$ENDIF PDF_ENABLE_XFA} end; function PDF_IsSkiaAvailable: Boolean; begin {$IFDEF PDF_USE_SKIA} Result := Assigned(FPDF_RenderPageSkia) and (@FPDF_RenderPageSkia <> @NotLoaded) and (@FPDF_RenderPageSkia <> @FunctionNotSupported) and Assigned(FPDF_FFLDrawSkia) and (@FPDF_FFLDrawSkia <> @NotLoaded) and (@FPDF_FFLDrawSkia <> @FunctionNotSupported); {$ELSE} Result := False; {$ENDIF PDF_USE_SKIA} end; procedure Init; var I: Integer; begin for I := 0 to Length(ImportFuncs) - 1 do ImportFuncs[I].P^ := @NotLoaded; end; procedure InitPDFium(const DllPath: string{$IFDEF PDF_ENABLE_V8}; const ResPath: string{$ENDIF}); begin if DllPath <> '' then InitPDFiumEx(IncludeTrailingPathDelimiter(DllPath) + pdfium_dll{$IFDEF PDF_ENABLE_V8}, ResPath{$ENDIF}) else InitPDFiumEx(''{$IFDEF PDF_ENABLE_V8}, ResPath{$ENDIF}); end; procedure InitPDFiumEx(const DllFileName: string{$IFDEF PDF_ENABLE_V8}; const ResPath: string{$ENDIF}); var I: Integer; Path: string; LibraryConfig: FPDF_LIBRARY_CONFIG; begin if PdfiumModule <> 0 then Exit; {$IFDEF CPUX64} {$IFDEF FPC} SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide, exOverflow, exUnderflow, exPrecision]); {$ELSE} // Pdfium requires all arithmetic exceptions to be masked in 64bit mode if GetExceptionMask <> exAllArithmeticExceptions then SetExceptionMask(exAllArithmeticExceptions); {$ENDIF FPC} {$ENDIF CPUX64} if DllFileName <> '' then PdfiumModule := SafeLoadLibrary(DllFileName) else PdfiumModule := SafeLoadLibrary(pdfium_dll); if PdfiumModule = 0 then begin {$IF not defined(FPC) and (CompilerVersion >= 24.0)} // XE3+ if DllFileName <> '' then RaiseLastOSError(GetLastError, '.'#10#10 + DllFileName) else RaiseLastOSError(GetLastError, '.'#10#10 + pdfium_dll); {$ELSE} RaiseLastOSError; {$IFEND} end; // Import the pdfium.dll functions for I := 0 to Length(ImportFuncs) - 1 do begin if ImportFuncs[I].P^ = @NotLoaded then begin ImportFuncs[I].P^ := GetProcAddress(PdfiumModule, ImportFuncs[I].N); if ImportFuncs[I].P^ = nil then begin if ImportFuncs[I].Optional then begin if ImportFuncs[I].Quirk then ImportFuncs[I].P^ := @FunctionNotSupported; end else begin ImportFuncs[I].P^ := @NotLoaded; if not ImportFuncs[I].Quirk then begin FreeLibrary(PdfiumModule); PdfiumModule := 0; Init; // reset all functions to @NotLoaded raise Exception.CreateResFmt(@RsFailedToLoadProc, [ImportFuncs[I].N]); end; end; end; end; end; {$IFDEF PDF_ENABLE_V8} // Initialize the V8 engine if available if Assigned(FPDF_InitEmbeddedLibraries) then begin if ResPath <> '' then Path := IncludeTrailingPathDelimiter(ResPath) else if DllFileName <> '' then begin Path := ExtractFileDir(DllFileName); if Path <> '' then Path := IncludeTrailingPathDelimiter(Path); end; if Path = '' then begin // If the DLL was already loaded we can use its path Path := GetModuleName(PdfiumModule); if Path <> '' then Path := IncludeTrailingPathDelimiter(ExtractFilePath(Path)); end; FPDF_InitEmbeddedLibraries(PAnsiChar(AnsiString(Path))); // requires trailing path delimiter end else @FPDF_InitEmbeddedLibraries := @FunctionNotSupported; {$ENDIF PDF_ENABLE_V8} // Initialize the pdfium library {$IFDEF FPC} {$WARN 5057 off : Local variable "$1" does not seem to be initialized} {$ENDIF FPC} FillChar(LibraryConfig, SizeOf(LibraryConfig), 0); {$IFDEF FPC} {$WARN 5057 on} {$ENDIF FPC} LibraryConfig.version := 2; LibraryConfig.m_RendererType := FPDF_RENDERERTYPE_AGG; {if IsSkiaAvailable and SkiaRendererEnabled then LibraryConfig.m_RendererType := FPDF_RENDERERTYPE_SKIA;} FPDF_InitLibraryWithConfig(@LibraryConfig); end; initialization Init; finalization if PdfiumModule <> 0 then begin FPDF_DestroyLibrary; FreeLibrary(PdfiumModule); end; end.