| // FPDFEMB.H - Header file for FPDFEMB SDK |
| // Copyright (c) 2007-2008 Foxit Software Company, All Right Reserved. |
| |
| // Date: 2008-04-07 |
| |
| // Embedded platforms have many different aspects from desktop platforms, |
| // among them, the followings are most important for PDF processing: |
| // |
| // 1. Embedded platforms have only limited memory, and there is no virtual memory. |
| // PDF is a very complicated format, processing PDF may consumes quite |
| // large amount of memory, even for some smaller PDFs. And, in order to |
| // increase the performance of PDF parsing and rendering, cache memory |
| // is often used. For some big PDFs with many pages, the cache may grow |
| // while user browing through pages, eventually, for some PDFs, the memory |
| // on the device may run out. |
| // |
| // FPDFEMB SDK allows graceful out-of-memory (OOM) handling by returning |
| // OOM error code for all functions that may involve memory allocation. |
| // When an application detects OOM situation, it can do one of the followings: |
| // |
| // a) Give user some prompt and quit the application or close the document; |
| // b) Or better, try to recover from the error. Sometimes OOM can be caused |
| // by ever-growing cache. For example, when user browses a 1000-page |
| // document, let's say OOM happen at page #300. In this case, the |
| // application might close the whole document (cache will be gone with |
| // it), reopen the document, then go directly to page #300. It's likely |
| // the process will go through this time. This is called "OOM recovery". |
| // If OOM happens again during a recovery, then, it's not possible to finish |
| // the process, the application must quit of close the document. |
| // |
| // 2. Embedded platforms has only limited computing power. Since some PDFs |
| // can be very complicated and require a lot of processing to be displayed, |
| // it may take a lot of time for the process to finish. This may cause |
| // some problem with user experience, especially for devices like mobile |
| // phones, when an application may need to be put on hold any time. Therefore, |
| // it's important to break lengthy process into small steps which can be |
| // stopped or resumed at any time. We call this kind of process as |
| // "progressive process". |
| // |
| // FPDFEMB SDK allows progressive page parsing and rendering, the most time- |
| // consuming part of PDF processing. |
| // |
| // IMPORTANT: |
| // FPDFEMB module is not intended to run in multi-threaded environment. |
| |
| // Components inside FPDFEMB: |
| // * Library Memory Management |
| // * Document Operations |
| // * Page Basic Operations |
| // * Page Parsing |
| // * Page Rendering |
| // * Coordination Conversion |
| // * Text Search |
| // * Text Information |
| // * Device Independant Bitmap |
| // * Custom Font Handler and CJK Support |
| // * Bookmark Information |
| // * Hyperlink Information |
| // * Graphic Output |
| |
| #ifndef _FPDFEMB_H_ |
| #define _FPDFEMB_H_ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| // Standard return type for many FPDFEMB functions: FPDFERR_SUCCESS for success, otherwise error code |
| typedef int FPDFEMB_RESULT; |
| |
| // Standard boolean type: 0 for false, non-zero for true |
| typedef int FPDFEMB_BOOL; |
| |
| // Unicode character. FPDFEMB uses UTF16LE format for unicode string. |
| typedef unsigned short FPDFEMB_WCHAR; |
| |
| // Error codes |
| #define FPDFERR_SUCCESS 0 |
| #define FPDFERR_MEMORY 1 // Out of memory |
| #define FPDFERR_ERROR 2 // Error of any kind, without specific reason |
| #define FPDFERR_PASSWORD 3 // Incorrect password |
| #define FPDFERR_FORMAT 4 // Not PDF format |
| #define FPDFERR_FILE 5 // File access error |
| #define FPDFERR_PARAM 6 // Parameter error |
| #define FPDFERR_STATUS 7 // Not in correct status |
| #define FPDFERR_TOBECONTINUED 8 // To be continued |
| #define FPDFERR_NOTFOUND 9 // Search result not found |
| |
| /******************************************************************************************** |
| **** |
| **** Library Memory Management |
| **** |
| ********************************************************************************************/ |
| |
| // Structure: FPDFEMB_MEMMGR |
| // Including interfaces implemented by host application, providing memory allocation |
| // facilities. All members are required. |
| // A memory manager structure is required to be valid during the entire period |
| // when an application using FPDFEMB module. |
| // |
| // IMPORTANT NOTE: using of this interface is strongly not recommended, because |
| // FPDFEMB now internally use FPDFEMB_MEMMGR_EX interface, which allows more |
| // advanced memory management. This interface is retained for backward compatibility |
| // only, and maybe discontinued in the future. |
| // |
| struct FPDFEMB_MEMMGR { |
| // Interface: Alloc |
| // Allocate a memory block |
| // Parameters: |
| // pMgr - Pointer to the memory manager. |
| // size - Number of bytes for the memory block. |
| // Return Value: |
| // The pointer to allocated memory block. NULL if no memory available. |
| // Comments: |
| // In order to handle OOM situation, application can use longjmp() inside |
| // implementation of this function. If underlying memory manager fails to |
| // allocate enough memory, then application can use longjmp() to jump to |
| // OOM handling codes. |
| // |
| void* (*Alloc)(struct FPDFEMB_MEMMGR* pMgr, unsigned int size); |
| |
| // Interface: AllocNL |
| // Allocate a memory block, without leaving |
| // Parameters: |
| // pMgr - Pointer to the memory manager. |
| // size - Number of bytes for the memory block. |
| // Return Value: |
| // The pointer to allocated memory block. NULL if no memory available. |
| // Comments: |
| // Implementation MUST return NULL if no memory available, no exception |
| // or longjmp() can be used. |
| // |
| void* (*AllocNL)(struct FPDFEMB_MEMMGR* pMgr, unsigned int size); |
| |
| // Interfce: Realloc |
| // Reallocate a memory block |
| // Parameters: |
| // pMgr - Pointer to the memory manager. |
| // pointer - An existing memory block, or NULL. |
| // new_size - New size (number of bytes) of the memory block. Can be zero. |
| // Return value: |
| // The pointer of reallocated memory block, it could be a new block, or just |
| // the previous block with size modified. |
| // Comments: |
| // If an existing memory block specified, the data in the memory block will |
| // be copied to the new block, if reallocated. |
| // |
| // In order to handle OOM situation, application can use longjmp() inside |
| // implementation of this function. If underlying memory manager fails to |
| // allocate enough memory, then application can use longjmp() to jump to |
| // OOM handling codes. |
| // |
| void* (*Realloc)(struct FPDFEMB_MEMMGR* pMgr, void* pointer, unsigned int new_size); |
| |
| // Interface: Free |
| // Free a memory block |
| // Parameters: |
| // pMgr - Pointer to the memory manager. |
| // pointer - An existing memory block. |
| // Return Value: |
| // None. |
| // |
| void (*Free)(struct FPDFEMB_MEMMGR* pMgr, void* pointer); |
| }; |
| |
| // Function: FPDFEMB_Init |
| // Initialize the FPDFEMB module |
| // Parameters: |
| // mem_mgr - Pointer to memory manager structure |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // Comments: |
| // This function will allocate necessary internal data structure for |
| // the whole module to operate. |
| FPDFEMB_RESULT FPDFEMB_Init(FPDFEMB_MEMMGR* mem_mgr); |
| |
| typedef void (*FPDFEMB_FIXED_OOM_HANDLER)(void* memory, int size); |
| |
| // Function: FPDFEMB_InitFixedMemory |
| // Initialize the FPDFEMB module, providing a fixed memory heap |
| // Parameters: |
| // memory - Pointer to a pre-allocated memory block |
| // size - Number of bytes in the memory block |
| // oom_handler - Pointer to a function which will be called when OOM happens. Can be |
| // NULL if application doesn't want to be notified om OOM. |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // Comments: |
| // In many embedded system, memory usage are predetermined. The application |
| // is assigned with fixed size of available memory, then it can pre-allocate |
| // a memory block with maximum size and pass to this function to initialize |
| // FPDFEMB module. In this case, FPDFEMB won't need any additional memory |
| // allocation. |
| // |
| // In case the pre-allocated memory has run out, the "oom_proc" callback |
| // function will be called to notify the application that an OOM recovery |
| // procedure needs to be performed. |
| // |
| FPDFEMB_RESULT FPDFEMB_InitFixedMemory(void* memory, int size, FPDFEMB_FIXED_OOM_HANDLER oom_handler); |
| |
| // Memory Management Flags |
| #define FPDFEMB_NONLEAVE 1 |
| #define FPDFEMB_MOVABLE 2 |
| #define FPDFEMB_DISCARDABLE 4 |
| |
| // Structure: FPDFEMB_MEMMGR_EX |
| // This is an extended version of memory manager interface, allowing advanced |
| // memory management, including movable and discardable memory blocks. |
| // |
| // Use this interface with FPDFEMB_InitExt function. |
| // |
| struct FPDFEMB_MEMMGR_EX { |
| // Interface: Alloc |
| // Allocate a memory block |
| // Parameters: |
| // pMgr - Pointer to the memory manager. |
| // size - Number of bytes for the memory block. |
| // flags - A combination of flags defined above. |
| // Return Value: |
| // The pointer to allocated memory block. NULL if no memory available. |
| // If FPDFEMB_MOVABLE flag is used, implementation should return a handle |
| // to the memory block, if it supports movable block allocation. |
| // Comments: |
| // The implementation should not do any action if no memory available, |
| // just return NULL. OOM handling can be done in OOM_Handler interface. |
| // |
| void* (*Alloc)(struct FPDFEMB_MEMMGR_EX* pMgr, unsigned int size, int flags); |
| |
| // Interface: OOM_Handler |
| // OOM (out-of-memory) situation handler |
| // Parameters: |
| // pMgr - Pointer to the memory manager. |
| // Return Value: |
| // None. |
| // Comments: |
| // In order to handle OOM situation, application can use longjmp() inside |
| // implementation of this function. |
| // |
| void (*OOM_Handler)(struct FPDFEMB_MEMMGR_EX* pMgr); |
| |
| // Interfce: Realloc |
| // Reallocate a memory block |
| // Parameters: |
| // pMgr - Pointer to the memory manager. |
| // pointer - Pointer to an existing memory block, or handle to a movable |
| // block. Can not be NULL. |
| // new_size - New size (number of bytes) of the memory block. Can not be zero. |
| // Return value: |
| // The pointer of reallocated memory block, it could be a new block, or just |
| // the previous block with size modified. |
| // If FPDFEMB_MOVABLE flag is used, implementation should return a handle |
| // to the memory block, if it supports movable block allocation. |
| // Comments: |
| // If an existing memory block specified, the data in the memory block should |
| // be copied to the new block, if reallocated. |
| // |
| // The implementation should not do any action if no memory available, |
| // just return NULL. OOM handling can be done in OOM_Handler interface. |
| // |
| void* (*Realloc)(struct FPDFEMB_MEMMGR_EX* pMgr, void* pointer, unsigned int new_size, int flags); |
| |
| // Interface: Lock |
| // Lock a movable memory block |
| // Parameters: |
| // pMgr - Pointer to the memory manager. |
| // handle - Handle to movable memory block, returned by Alloc or Realloc. |
| // Return Value: |
| // The pointer of the memory block. NULL if the block was discarded. |
| // Comments: |
| // This interface is optional, if implementation doesn't support movable memory |
| // block, then this interface can be set to NULL. |
| // |
| void* (*Lock)(struct FPDFEMB_MEMMGR_EX* pMgr, void* handle); |
| |
| // Interface: Unlock |
| // Unlock a locked movable memory block |
| // Parameters: |
| // pMgr - Pointer to the memory manager. |
| // handle - Handle to movable memory block, returned by Alloc or Realloc. |
| // Return Value: |
| // None. |
| // Comments: |
| // This interface is optional, if implementation doesn't support movable memory |
| // block, then this interface can be set to NULL. |
| // |
| void (*Unlock)(struct FPDFEMB_MEMMGR_EX* pMgr, void* handle); |
| |
| // Interface: Free |
| // Free a memory block |
| // Parameters: |
| // pMgr - Pointer to the memory manager. |
| // pointer - Pointer to an existing memory block, or handle to a movable block. |
| // Return Value: |
| // None. |
| // |
| void (*Free)(struct FPDFEMB_MEMMGR_EX* pMgr, void* pointer, int flags); |
| |
| void* user; // A user pointer, used by the application |
| }; |
| |
| // Function: FPDFEMB_LoadJbig2Decoder |
| // Function: FPDFEMB_LoadJpeg2000Decoder |
| // Enable JBIG2 or JPEG2000 image decoder |
| // Parameters: |
| // None. |
| // Return Value: |
| // None. |
| // Comments: |
| // If you want to display JBIG2 or JPEG2000 encoded images, you need to call |
| // these functions after FPDFEMB initialized. |
| // |
| // Calling these functions will increase code size by about 200K-400K bytes. |
| // Also JPEG2000 decoder may not be available on some platforms. |
| // |
| void FPDFEMB_LoadJbig2Decoder(); |
| void FPDFEMB_LoadJpeg2000Decoder(); |
| |
| // Function: FPDFEMB_InitEx |
| // Initialize the FPDFEMB module with the extended memory manager |
| // Parameters: |
| // mem_mgr - Pointer to memory manager structure |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // Comments: |
| // This function will allocate necessary internal data structure for |
| // the whole module to operate. |
| FPDFEMB_RESULT FPDFEMB_InitEx(FPDFEMB_MEMMGR_EX* mem_mgr); |
| |
| // Function: FPDFEMB_Exit |
| // Stop using FPDFEMB module and release all resources |
| // Parameters: |
| // None. |
| // Return Value: |
| // None. |
| // Comments: |
| // All loaded documents and pages will become invalid after this call. |
| // |
| // This function is useful for OOM recovery: when your application hits |
| // an OOM situation, calling this function will clear all memory allocated |
| // by FPDFEMB module, then you can call one of the initialization functions, |
| // reopen the document and recovery from OOM. |
| // |
| void FPDFEMB_Exit(); |
| |
| // Function: FPDFEMB_AllocMemory |
| // Allocate memory |
| // Parameters: |
| // size - Number of bytes |
| // Return Value: |
| // The allocated buffer pointer. NULL for out of memory. |
| // |
| void* FPDFEMB_AllocMemory(unsigned int size); |
| |
| // Function: FPDFEMB_FreeMemory |
| // Free allocated memory |
| // Parameters: |
| // pointer - Pointer returned by FPDFEMB_AllocMemory |
| // Return Value: |
| // None. |
| // |
| void FPDFEMB_FreeMemory(void* pointer); |
| |
| // Function: FPDFEMB_FreeCaches |
| // Free all expendable caches used by FPDFEMB in order to save memory |
| // Parameters: |
| // None. |
| // Return Value: |
| // None. |
| // Comments: |
| // When an application memory manager runs out of memory, before an OOM situation |
| // is raised, the application can try this |
| // |
| void FPDFEMB_FreeCaches(); |
| |
| /******************************************************************************************** |
| **** |
| **** Document Operations |
| **** |
| ********************************************************************************************/ |
| |
| // Structure: FPDFEMB_FILE_ACCESS |
| // Describe the way to access a file (readonly). |
| struct FPDFEMB_FILE_ACCESS { |
| // Inteface: GetSize |
| // Get total size of the file |
| // Parameters: |
| // file - Pointer to this file access structure |
| // Return Value: |
| // File size, in bytes. Implementation can return 0 for any error. |
| // |
| unsigned int (*GetSize)(struct FPDFEMB_FILE_ACCESS* file); |
| |
| // Interface: ReadBlock |
| // Read a data block from the file |
| // Parameters: |
| // file - Pointer to this file access structure |
| // buffer - Pointer to a buffer receiving read data |
| // offset - Byte offset for the block, from beginning of the file |
| // size - Number of bytes for the block. |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // |
| FPDFEMB_RESULT (*ReadBlock)(struct FPDFEMB_FILE_ACCESS* file, void* buffer, |
| unsigned int offset, unsigned int size); |
| |
| void* user; // A user pointer, used by the application |
| }; |
| |
| // Structure: FPDFEMB_PAUSE |
| // An interface for pausing a progressive process. |
| struct FPDFEMB_PAUSE { |
| // Interface: NeedPauseNow |
| // Check if we need to pause a progressive proccess now |
| // Parameters: |
| // pause - Pointer to the pause structure |
| // Return Value: |
| // Non-zero for pause now, 0 for continue. |
| // Comments: |
| // Typically implementation of this interface compares the current system tick |
| // with the previous one, if the time elapsed exceeds certain threshold, then |
| // the implementation returns TRUE, indicating a pause is needed. |
| // |
| FPDFEMB_BOOL (*NeedPauseNow)(struct FPDFEMB_PAUSE* pause); |
| |
| void* user; // A user pointer, used by the application |
| }; |
| |
| typedef void* FPDFEMB_DOCUMENT; |
| |
| // Function: FPDFEMB_StartLoadDocument |
| // Start loading a PDF document |
| // Parameters: |
| // file - Pointer to file access structure. |
| // This structure must be kept valid as long as the document is open. |
| // password - Pointer to a zero-terminated byte string, for the password. |
| // Or NULL for no password. |
| // document - Receiving the document handle |
| // pause - A callback mechanism allowing the document loading process |
| // to be paused before it's finished. This can be NULL if you |
| // don't want to pause. |
| // Return Value: |
| // FPDFERR_SUCCESS: document successfully loaded. |
| // FPDFERR_TOBECONTINUED: The document loading can't be finished now. |
| // See comments below. |
| // FPDFERR_PASSWORD: incorrect password. |
| // FPDFERR_FORMAT: not a PDF or corrupted PDF. |
| // FPDFERR_FILE: file access error. |
| // FPDFERR_MEMORY: out of memory. |
| // Comments: |
| // Document loading is a progressive process. It might take a long time to |
| // load a document, especiall when a file is corrupted, FPDFEMB will try to |
| // recover the document contents by scanning the whole file. If "pause" parameter |
| // is provided, this function may return FPDFERR_TOBECONTINUED any time during |
| // the document loading. |
| // |
| // When FPDFERR_TOBECONTINUED is returned, the "document" parameter will |
| // still receive a valid document handle, however, no further operations can |
| // be performed on the document, except the "FPDFEMB_ContineLoadDocument" function |
| // call, which resume the document loading. |
| // |
| FPDFEMB_RESULT FPDFEMB_StartLoadDocument(FPDFEMB_FILE_ACCESS* file, const char* password, |
| FPDFEMB_DOCUMENT* document, FPDFEMB_PAUSE* pause); |
| |
| // Function: FPDFEMB_ContinueLoadDocument |
| // Continue loading a PDF document |
| // Parameters: |
| // document - Document handle returned by FPDFEMB_StartLoadDocument function |
| // pause - A callback mechanism allowing the document loading process |
| // to be paused before it's finished. This can be NULL if you |
| // don't want to pause. |
| // Return Value: |
| // FPDFERR_SUCCESS: document successfully loaded. |
| // FPDFERR_TOBECONTINUED: The document loading can't be finished now. |
| // Further call to this function is needed. |
| // FPDFERR_PASSWORD: incorrect password. |
| // FPDFERR_FORMAT: not a PDF or corrupted PDF. |
| // FPDFERR_FILE: file access error. |
| // FPDFERR_MEMORY: out of memory. |
| // FPDFERR_STATUS: document already loaded. |
| // FPDFERR_PARAM: invalid parameter (like NULL document handle) |
| // |
| FPDFEMB_RESULT FPDFEMB_ContinueLoadDocument(FPDFEMB_DOCUMENT document, FPDFEMB_PAUSE* pause); |
| |
| // Function: FPDFEMB_CloseDocument |
| // Close a PDF document and free all associated resources |
| // Parameters: |
| // document - Document handle |
| // Return Value: |
| // Error code. FPDFERR_SUCCESS for success. |
| // |
| FPDFEMB_RESULT FPDFEMB_CloseDocument(FPDFEMB_DOCUMENT document); |
| |
| // Function: Get page count |
| // Get number of pages in the document |
| // Parameters: |
| // document - Document handle |
| // Return Value: |
| // Number of pages. |
| // |
| int FPDFEMB_GetPageCount(FPDFEMB_DOCUMENT document); |
| |
| // Function: FPDFEMB_SetFileBufferSize |
| // Set size of internal buffer used to read from source file. |
| // Parameters: |
| // size - Number of bytes |
| // Return Value: |
| // None. |
| // Comments: |
| // Currently FPDFEMB uses 512 bytes as default buffer size. The new buffer size |
| // takes effect next time you call FPDFEMB_StartLoadDocument. |
| // |
| void FPDFEMB_SetFileBufferSize(int size); |
| |
| /******************************************************************************************** |
| **** |
| **** Page Basic Operations |
| **** |
| ********************************************************************************************/ |
| |
| typedef void* FPDFEMB_PAGE; |
| |
| // Function: FPDFEMB_LoadPage |
| // Load a page |
| // Parameters: |
| // document - Document handle |
| // index - Page index, starting from zero |
| // page - Receiving the loaded page handler |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // |
| FPDFEMB_RESULT FPDFEMB_LoadPage(FPDFEMB_DOCUMENT document, int index, FPDFEMB_PAGE* page); |
| |
| // Function: FPDFEMB_ClosePage |
| // Close a page and release all related resources |
| // Parameters: |
| // page - Page handle |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // |
| FPDFEMB_RESULT FPDFEMB_ClosePage(FPDFEMB_PAGE page); |
| |
| // Function: FPDFEMB_GetPageSize |
| // Get size of a page |
| // Parameters: |
| // page - Page handle |
| // width - Receiving page width, in hundredth of points |
| // height - Receiving page height, in hundredth of points |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success |
| // |
| FPDFEMB_RESULT FPDFEMB_GetPageSize(FPDFEMB_PAGE page, int* width, int* height); |
| |
| // Structure: FPDFEMB_RECT |
| // Rectangle area in device or page coordination system |
| // |
| struct FPDFEMB_RECT |
| { |
| // For device system, coordinations are measured in pixels; |
| // For page system, coordinations are measured in hundredth of points. |
| int left; |
| int top; |
| int right; |
| int bottom; |
| }; |
| |
| // Function: FPDFEMB_GetPageBBox |
| // Get displayable area (bounding box) of a page |
| // Parameters: |
| // page - Page handle |
| // rect - Pointer to a structure receiving the rectangle |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success |
| // |
| FPDFEMB_RESULT FPDFEMB_GetPageBBox(FPDFEMB_PAGE page, FPDFEMB_RECT* rect); |
| |
| /******************************************************************************************** |
| **** |
| **** Page Parsing |
| **** |
| ********************************************************************************************/ |
| |
| // Function: FPDFEMB_StartParse |
| // Start parsing a page, so it can get rendered or searched |
| // Parameters: |
| // page - Page handle |
| // text_only - flag for parsing texts only (used for searching) |
| // pause - A structure that can pause the parsing process. |
| // Or NULL if you don't want to pause the process. |
| // Return Value: |
| // FPDFERR_SUCCESS: parsing successfully finished; |
| // FPDFERR_TOBECONTINUED: parsing started successfully, but not finished; |
| // FPDFERR_STATUS: page already parsed, or parsing already started. |
| // Other return value: error code. |
| // Comments: |
| // Parsing is a progressive process. This function starts the parsing process, |
| // and may return before parsing is finished, if a pause structure is provided. |
| // |
| // Application should call FPDFEMB_ContinueParse repeatedly to finish the parsing |
| // when return value is FPDFERR_TOBECONTINUED. |
| // |
| // There can be only one parsing procedure active for a page, and if a page |
| // has already been parsed, you can't start a parsing again. |
| // |
| FPDFEMB_RESULT FPDFEMB_StartParse(FPDFEMB_PAGE page, FPDFEMB_BOOL text_only, |
| FPDFEMB_PAUSE* pause); |
| |
| // Function: FPDFEMB_ContinueParse |
| // Continue the page parsing |
| // Parameters: |
| // page - Page handle |
| // pause - A structure that can pause the parsing process. |
| // Or NULL if you don't want to pause the process. |
| // Return Value: |
| // FPDFERR_SUCCESS: parsing successfully finished; |
| // FPDFERR_TOBECONTINUED: parsing performed successfully, but not finished; |
| // FPDFERR_STATUS: page already parsed (or parsing not started). |
| // Other return value: error code. |
| // Comments: |
| // FPDFEMB_StartParse should be called before on the page. |
| // |
| // Application should call FPDFEMB_ContinueParse repeatedly to finish the parsing |
| // when return value is FPDFERR_TOBECONTINUED. |
| // |
| FPDFEMB_RESULT FPDFEMB_ContinueParse(FPDFEMB_PAGE page, FPDFEMB_PAUSE* pause); |
| |
| // Function: FPDFEMB_GetParseProgress |
| // Get an estimated parsing progress in percentage |
| // Parameters: |
| // page - Page handle |
| // Return Value: |
| // An integer between 0 and 100 (inclusive) indicating the parsing progress. |
| // The result is just a rough estimation. |
| // |
| int FPDFEMB_GetParseProgress(FPDFEMB_PAGE page); |
| |
| /******************************************************************************************** |
| **** |
| **** Page Rendering |
| **** |
| ********************************************************************************************/ |
| |
| typedef void* FPDFEMB_BITMAP; |
| |
| // Function: FPDFEMB_StartQuickDraw |
| // Start drawing a quick preview of a page |
| // Parameters: |
| // dib - DIB handle, as the rendering device |
| // page - Page handle. The page has to be parsed first. |
| // start_x - Left pixel position of the display area in the device coordination |
| // start_y - Top pixel position of the display area in the device coordination |
| // 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 - Reserved, must be zero. |
| // pause - Pointer to a structure that can pause the rendering process. |
| // Can be NULL if no pausing is needed. |
| // Return Value: |
| // FPDFERR_SUCCESS: quickdraw successly finished; |
| // FPDFERR_TOBECONTINUED: quickdraw started successfully, but not finished. |
| // FPDFEMB_ContinueQuickDraw needs to be called to finish the quickdraw; |
| // FPDFERR_STATUS: quickdraw already in progress, or page not parsed; |
| // Other return value: error code. |
| // Comments: |
| // It's often useful to present user a quick preview of a page, right after the |
| // page is parsed. This preview renders only a limited set of easy features in the |
| // page, so it'll be rather quick to finish this process. |
| // |
| FPDFEMB_RESULT FPDFEMB_StartQuickDraw(FPDFEMB_BITMAP dib, FPDFEMB_PAGE page, |
| int start_x, int start_y, int size_x, int size_y, int rotate, |
| int flags, FPDFEMB_PAUSE* pause); |
| |
| // Function: FPDFEMB_ContinueQuickDraw |
| // Continue a quick draw processing |
| // Parameters: |
| // page - Page handle. The page has to be parsed first. |
| // pause - Pointer to a structure that can pause the rendering process. |
| // Can be NULL if no pausing is needed. |
| // Return Value: |
| // FPDFERR_SUCCESS: quickdraw successly finished; |
| // FPDFERR_TOBECONTINUED: quickdraw started successfully, but not finished. |
| // more calls to this function needed to finish the quickdraw; |
| // FPDFERR_STATUS: quickdraw not started yet; |
| // Other return value: error code. |
| // |
| FPDFEMB_RESULT FPDFEMB_ContinueQuickDraw(FPDFEMB_PAGE page, FPDFEMB_PAUSE* pause); |
| |
| #define FPDFEMB_ANNOT 0x01 // Set if annotations are to be rendered |
| #define FPDFEMB_LCD_TEXT 0x02 // Set if using text rendering optimized for LCD display |
| #define FPDFEMB_BGR_STRIPE 0x04 // Set if the device is using BGR LCD stripe |
| |
| // Function: FPDFEMB_StartRender |
| // Start rendering of a page. |
| // Parameter: |
| // dib - DIB handle, as the rendering device |
| // page - Page handle. The page has to be parsed first. |
| // start_x - Left pixel position of the display area in the device coordination |
| // start_y - Top pixel position of the display area in the device coordination |
| // 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 |
| // clip - Pointer to clip rectangle (in DIB device coordinations), |
| // or NULL if no clipping needed. |
| // pause - Pointer to a structure that can pause the rendering process. |
| // Can be NULL if no pausing is needed. |
| // Return Value: |
| // FPDFERR_SUCCESS: rendering successfully finished; |
| // FPDFERR_TOBECONTINUED: rendering started successfully, but not finished; |
| // Other return value: error code. |
| // Comments: |
| // Rendering is a progressive process. This function starts the rendering process, |
| // and may return before rendering is finished, if a pause structure is provided. |
| // |
| // Application should call FPDFEMB_ContinueRender repeatedly to finish the rendering |
| // when return value is FPDFERR_TOBECONTINUED. |
| // |
| // There can be only one rendering procedure for a page at any time. And rendering |
| // can be started over and over again for the same page. If a page rendering is already |
| // active, starting another one will cancel the previous rendering. |
| // |
| // Rendering of a page doesn't draw the page background, therefore, you usually need |
| // to draw the background in the DIB yourself. |
| // |
| FPDFEMB_RESULT FPDFEMB_StartRender(FPDFEMB_BITMAP dib, FPDFEMB_PAGE page, |
| int start_x, int start_y, int size_x, int size_y, int rotate, int flags, |
| FPDFEMB_RECT* clip, FPDFEMB_PAUSE* pause); |
| |
| // Function: FPDFEMB_ContinueRender |
| // Continue the page rendering |
| // Parameters: |
| // page - Page handle |
| // pause - Pointer to a structure that can pause the rendering process. |
| // Can be NULL if no pausing is needed. |
| // Return Value: |
| // FPDFERR_SUCCESS: rendering successfully finished. |
| // FPDFERR_TOBECONTINUED: rendering needs to be continued; |
| // Other return value: error code. |
| // Comments: |
| // This function may return any time when the pause interface indicates |
| // a pause is needed. Application can call FPDFEMB_ContinueRender any number |
| // of times, until FPDFERR_TOBECONTINUED is not returned. |
| // |
| FPDFEMB_RESULT FPDFEMB_ContinueRender(FPDFEMB_PAGE page, FPDFEMB_PAUSE* pause); |
| |
| // Function: FPDFEMB_GetRenderProgress |
| // Get an estimated rendering progress in percentage |
| // Parameters: |
| // page - Page handle |
| // Return Value: |
| // An integer between 0 and 100 (inclusive) indicating the rendering progress. |
| // The result is just a rough estimation. |
| // If the rendering just finished, this function will return 0. |
| // |
| int FPDFEMB_GetRenderProgress(FPDFEMB_PAGE page); |
| |
| // Function: FPDFEMB_SetHalftoneLimit |
| // Set pixel count limit for using halftone when display image |
| // Parameter: |
| // limit - Number of pixels for the limit |
| // Return Value: |
| // None. |
| // Comments: |
| // By default, FPDFEMB displays all bitmaps using downsamping, which means |
| // if the image is shrinked onto screen, only part of pixels will be picked |
| // and displayed. This saves a lot of calculation, especially for big images |
| // with millions of pixels. However the display quality can be bad. In order to |
| // reach a balance between performance and quality, application can use this |
| // function to set a limit, if number of pixels in an image is more than this |
| // limit, then FPDFEMB will use downsampling for quick drawing, otherwise, if |
| // the image has less pixels, FPDFEMB will use halftoning for better quality. |
| // |
| void FPDFEMB_SetHalftoneLimit(int limit); |
| |
| /******************************************************************************************** |
| **** |
| **** Coordination Conversion |
| **** |
| ********************************************************************************************/ |
| |
| // Structure: FPDFEMB_POINT |
| // A point in device or page coordination system |
| // |
| struct FPDFEMB_POINT |
| { |
| // For device system, coordinations are measured in pixels; |
| // For page system, coordinations are measured hundredth of points. |
| int x; |
| int y; |
| }; |
| |
| // Function: FPDFEMB_DeviceToPagePoint, FPDFEMB_DeviceToPageRect |
| // Convert the device coordinations of a point or a rectangle to page coordinations. |
| // Parameters: |
| // page - Handle to the page. Returned by FPDFEMB_LoadPage function. |
| // start_x - Left pixel position of the display area in the device coordination |
| // start_y - Top pixel position of the display area in the device coordination |
| // 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). |
| // point - A point structure with device coordinations upon the call, |
| // also receiving the result page coordinations. |
| // rect - A rectangle structure with device coordinations upon the call, |
| // also receiving the result page coordinations. |
| // Return value: |
| // None. |
| // Comments: |
| // The page coordination system has its origin at left-bottom corner of the page, |
| // with X axis goes along the bottom side to the right, and Y axis goes along the |
| // left side upward. No matter how you zoom, scroll, or rotate a page, a particular |
| // element (like text or image) on the page should always have the same coordination |
| // values in the page coordination system. |
| // |
| // The device coordination system is device dependant. For bitmap device, its origin |
| // is at left-top corner of the window. You must make sure the start_x, start_y, size_x, |
| // size_y and rotate parameters have exactly same values as you used in |
| // FPDFEMB_StartRender() function call. |
| // |
| // For rectangle conversion, the result rectangle is always "normalized", meaning for |
| // page coordinations, left is always smaller than right, bottom is smaller than top. |
| // |
| void FPDFEMB_DeviceToPagePoint(FPDFEMB_PAGE page, |
| int start_x, int start_y, int size_x, int size_y, int rotate, |
| FPDFEMB_POINT* point); |
| |
| void FPDFEMB_DeviceToPageRect(FPDFEMB_PAGE page, |
| int start_x, int start_y, int size_x, int size_y, int rotate, |
| FPDFEMB_RECT* rect); |
| |
| // Function: FPDFEMB_PageToDevicePoint, FPDFEMB_PageToDeviceRect |
| // Convert the page coordinations of a point or a rectangle to device coordinations. |
| // Parameters: |
| // page - Handle to the page. Returned by FPDFEMB_LoadPage function. |
| // start_x - Left pixel position of the display area in the device coordination |
| // start_y - Top pixel position of the display area in the device coordination |
| // 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). |
| // point - A point structure with page coordinations upon the call, |
| // also receiving the result device coordinations. |
| // rect - A rectangle structure with page coordinations upon the call, |
| // also receiving the result device coordinations. |
| // Return value: |
| // None |
| // Comments: |
| // For rectangle conversion, the result rectangle is always "normalized", meaning for |
| // device coordinations, left is always smaller than right, top is smaller than bottom. |
| // |
| void FPDFEMB_PageToDevicePoint(FPDFEMB_PAGE page, |
| int start_x, int start_y, int size_x, int size_y, int rotate, |
| FPDFEMB_POINT* point); |
| |
| void FPDFEMB_PageToDeviceRect(FPDFEMB_PAGE page, |
| int start_x, int start_y, int size_x, int size_y, int rotate, |
| FPDFEMB_RECT* rect); |
| |
| /******************************************************************************************** |
| **** |
| **** Text Search |
| **** |
| ********************************************************************************************/ |
| |
| // Search flags for FPDFEMB_FindFirst function |
| #define FPDFEMB_MATCHCASE 1 // whether matching case |
| #define FPDFEMB_MATCHWHOLEWORD 2 // whether matching whole word |
| #define FPDFEMB_CONSECUTIVE 4 // whether matching consecutively (for example, "CC" will |
| // match twice in "CCC"). |
| |
| // Function: FPDFEMB_FindFirst |
| // Find first occurance of a pattern string in a page |
| // Parameters: |
| // page - Page handle. |
| // pattern - A zero-terminated unicode string to be found. |
| // from_last - Whether we start from the end of page |
| // flags - Search flags, see above defined constants |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // Is not found, FPDFERR_NOTFOUND is returned. |
| // Comments: |
| // A page must be parsed first before it can be searched. |
| // There can be only one search in progress for a page. A new search will |
| // cancel the previous one. |
| // |
| // IMPORTANT: this function is now obsolete and kept for back compatibility |
| // only, please use FPDFEMB_FindFrom function below. |
| // |
| FPDFEMB_RESULT FPDFEMB_FindFirst(FPDFEMB_PAGE page, const FPDFEMB_WCHAR* pattern, |
| FPDFEMB_BOOL from_last, unsigned int flags); |
| |
| // Function: FPDFEMB_FindFrom |
| // Find first occurance of a pattern string in a page, from a particular position |
| // Parameters: |
| // page - Page handle. |
| // pattern - A zero-terminated unicode string to be found. |
| // pos - The position, returned from FPDFEMB_GetSearchPos. |
| // Or 0 from the beginning of page, -1 from the end of page. |
| // flags - Search flags, see above defined constants |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // Is not found, FPDFERR_NOTFOUND is returned. |
| // Comments: |
| // A page must be parsed first before it can be searched. |
| // There can be only one search in progress for a page. A new search will |
| // cancel the previous one. |
| // |
| FPDFEMB_RESULT FPDFEMB_FindFrom(FPDFEMB_PAGE page, const FPDFEMB_WCHAR* pattern, |
| int pos, unsigned int flags); |
| |
| // Function: FPDFEMB_FindNext |
| // Find next occurance of a search |
| // Parameters: |
| // page - Page handle. |
| // FPDFEMB_FindFirst must be called for this page first. |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // Is not found, FPDFERR_NOTFOUND is returned. |
| // |
| FPDFEMB_RESULT FPDFEMB_FindNext(FPDFEMB_PAGE page); |
| |
| // Function: FPDFEMB_FindPrev |
| // Find previous occurance of a search |
| // Parameters: |
| // page - Page handle. |
| // FPDFEMB_FindFirst must be called for this page first. |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // Is not found, FPDFERR_NOTFOUND is returned. |
| // |
| FPDFEMB_RESULT FPDFEMB_FindPrev(FPDFEMB_PAGE page); |
| |
| // Function: FPDFEMB_CountFoundRects |
| // Get number of rectangles for last found result |
| // Parameters: |
| // page - Page handle. |
| // Return Value: |
| // Number of rectangles for last found result. 0 for not found or failure. |
| // |
| int FPDFEMB_CountFoundRects(FPDFEMB_PAGE page); |
| |
| // Function: FPDFEMB_GetFoundRect |
| // Get a particular found rectangle |
| // Parameters: |
| // page - Page handle. |
| // index - Zero-based index for the rectangle. |
| // rect - Receiving the result rectangle, in hundredth of points |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // Comments: |
| // Application should always call FPDFEMB_CountFoundRects first to get |
| // number of rectangles, then use this function to get each rectangle. |
| // |
| // The returned rectangle uses page coordination system. |
| // |
| FPDFEMB_RESULT FPDFEMB_GetFoundRect(FPDFEMB_PAGE page, int index, FPDFEMB_RECT* rect); |
| |
| // Function: FPDFEMB_GetSearchPos |
| // Return position of current search result |
| // Parameters: |
| // page - Page handle. |
| // Return Value: |
| // Zero based character index for the current search result. -1 if not found. |
| // |
| int FPDFEMB_GetSearchPos(FPDFEMB_PAGE page); |
| |
| // Function: FPDFEMB_QuickSearch |
| // Search a pattern in a page quickly, without the page to be parsed |
| // Parameters: |
| // document - Document handle returned by FPDFEMB_StartLoadDocument function |
| // page_index - Zero-based index of the page |
| // pattern - A zero-terminated unicode string to be found. |
| // case_sensitive - Non-zero for case-sensitive searching, zero for case-insensitive |
| // Return Value: |
| // FPDFERR_SUCCESS if pattern found, FPDFERR_NOTFOUND if pattern not found. |
| // Otherwise error code is returned. |
| // Comments: |
| // This function does a rough and quick search in a page, before the page is loaded. |
| // The quick search will not generate an exact result saying where the pattern is |
| // found, and, it might be possible if a quick search result is "pattern found", and |
| // a real search for the same pattern, in the same page, will result in "not found". |
| // |
| // However, if quick search doesn't find a pattern in a page, then we can be sure the |
| // pattern won't be found in this page when we do a real search. So, this function is |
| // very useful when we search in a multiple-page document, and we want to quickly skip |
| // those pages in which the pattern can't possibly be found. |
| // |
| FPDFEMB_RESULT FPDFEMB_QuickSearch(FPDFEMB_DOCUMENT document, int page_index, |
| const FPDFEMB_WCHAR* pattern, int case_sensitive); |
| |
| /******************************************************************************************** |
| **** |
| **** Text Information |
| **** |
| ********************************************************************************************/ |
| |
| // Function: FPDFEMB_GetCharCount |
| // Get number of characters in the page |
| // Parameters: |
| // page - Page handle |
| // count - Receiving number of characters |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // |
| FPDFEMB_RESULT FPDFEMB_GetCharCount(FPDFEMB_PAGE page, int* count); |
| |
| // Structure: FPDFEMB_CHAR_INFO |
| // Character information. |
| struct FPDFEMB_CHAR_INFO { |
| int unicode; // Unicode for the character. 0 if not available. |
| // Space and new line charcters (U+0020 and U+000A) may be generated |
| // according to the text formatting. |
| FPDFEMB_POINT origin; // X/Y position for the character origin, in hundredth of points |
| FPDFEMB_RECT bbox; // Bounding box of the character, in hundredth of points |
| // Maybe an empty box (left == right or top == bottom). |
| }; |
| |
| // Function: FPDFEMB_GetCharInfo |
| // Get character information |
| // Parameters: |
| // page - Page handle |
| // index - Character index, starting from zero |
| // char_info - Receiving the character info |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success |
| // Comments: |
| // Application must call FPDFEMB_GetCharCount first before it can call this function |
| // for any particular characters. |
| // |
| FPDFEMB_RESULT FPDFEMB_GetCharInfo(FPDFEMB_PAGE page, int index, FPDFEMB_CHAR_INFO* char_info); |
| |
| // Function: FPDFEMB_GetCharIndexAtPos() |
| // Get index of character nearest to a certain position on the page |
| // Parameters: |
| // page - Page handle |
| // x - X position in PDF page coordination system |
| // y - Y position in PDF page coordination system |
| // index - Pointer to an integer receiving zero-based character index. |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success |
| // Comments: |
| // This function finds the character that's nearest to the particular page position. |
| // If there is no character, the output index will be -1. |
| // |
| FPDFEMB_RESULT FPDFEMB_GetCharIndexAtPos(FPDFEMB_PAGE page, double x, double y, int* index); |
| |
| /******************************************************************************************** |
| **** |
| **** Device Independant Bitmap |
| **** |
| ********************************************************************************************/ |
| |
| #define FPDFDIB_BGR 1 // 3 bytes per pixel, byte order: Blue, Green, Red |
| #define FPDFDIB_BGRx 2 // 4 bytes per pixel, byte order: Blue, Green, Red, not used |
| #define FPDFDIB_BGRA 3 // 4 bytes per pixel, byte order: Blue, Green, Red, Alpha |
| #define FPDFDIB_GRAY 4 // 1 byte per pixel (grayscale) |
| |
| // Function: FPDFEMB_CreateDIB |
| // Create a DIB (Device Independant Bitmap) |
| // Parameters: |
| // width - Width pixels; |
| // height - Height pixels; |
| // format - Format type. See FPDFDIB_xxx constants |
| // buffer - External buffer provided for the DIB, |
| // or NULL if new buffer is to be allocated. |
| // stride - Number of bytes for each scan line, for external buffer only. |
| // If not specified, 4-byte alignment assumed. |
| // dib - Receiving the created DIB handle |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success |
| // Comments: |
| // If "buffer" parameter is not NULL, then the provided buffer must conform |
| // to standard DIB format (see comments of FPDFEMB_GetDIBData function below). |
| // |
| // This function doesn't initialize the pixels inside the DIB buffer. So if you |
| // want to use the DIB to display a PDF page, you usually need to initialize |
| // the DIB to white background by youself. |
| // |
| FPDFEMB_RESULT FPDFEMB_CreateDIB(int width, int height, int format, |
| void* buffer, int stride, FPDFEMB_BITMAP* dib); |
| |
| // Function: FPDFEMB_DestroyDIB |
| // Destroy a DIB |
| // Parameters: |
| // dib - DIB handle |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success |
| // Comments: |
| // If external buffer is used (specified in "buffer" parameter when calling |
| // FPDFEMB_CreateDIB), the buffer will not be destroyed. |
| // |
| FPDFEMB_RESULT FPDFEMB_DestroyDIB(FPDFEMB_BITMAP dib); |
| |
| // Function: FPDFEMB_GetDIBWidth |
| // Get width (in pixels) of a DIB |
| // Parameters: |
| // dib - DIB handle |
| // Return Value: |
| // DIB width in pixels. |
| // |
| int FPDFEMB_GetDIBWidth(FPDFEMB_BITMAP dib); |
| |
| // Function: FPDFEMB_GetDIBHeight |
| // Get height (in pixels) of a DIB |
| // Parameters: |
| // dib - DIB handle |
| // Return Value: |
| // DIB height in pixels. |
| // |
| int FPDFEMB_GetDIBHeight(FPDFEMB_BITMAP dib); |
| |
| // Function: FPDFEMB_GetDIBData |
| // Get data pointer to a DIB |
| // Parameters: |
| // dib - DIB handle |
| // Return Value: |
| // Pointer to the DIB data. |
| // Comments: |
| // DIB data are organized in scanlines, from top down. |
| // |
| void* FPDFEMB_GetDIBData(FPDFEMB_BITMAP dib); |
| |
| // Function: FPDFEMB_GetDIBStride |
| // Get scan line stride of a DIB |
| // Parameters: |
| // dib - DIB handle |
| // Return Value: |
| // Number of bytes occupied by a scanline |
| // |
| int FPDFEMB_GetDIBStride(FPDFEMB_BITMAP dib); |
| |
| // Function: FPDFEMB_GetRotatedDIB |
| // Swap X/Y dimensions of a DIB to generate a rotated new DIB |
| // Parameters: |
| // dib - DIB handle |
| // flip_x - Whether flip pixels on the destination X dimension (left/right) |
| // flip_y - Whether flip pixels on the destination Y dimension (up/down) |
| // result_dib - Receiving the result DIB handle |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success |
| // |
| FPDFEMB_RESULT FPDFEMB_GetRotatedDIB(FPDFEMB_BITMAP dib, |
| FPDFEMB_BOOL bFlipX, FPDFEMB_BOOL bFlipY, |
| FPDFEMB_BITMAP* result_dib); |
| |
| // Function: FPDFEMB_StretchDIB |
| // Stretch a source DIB into another destination DIB |
| // Parameters: |
| // dest_dib - The destination DIB handle |
| // dest_left - Left position in the destination DIB |
| // dest_top - Top position in the destination DIB |
| // dest_width - Destination width, in pixels. Can be negative for horizontal flipping |
| // dest_height - Destination height, in pixels. Can be negative for vertical flipping |
| // clip - Destination clipping rectangle, or NULL for no clipping. |
| // The coordinations are measured in destination bitmap. |
| // src_dib - Source DIB handle. |
| // interpol - Whether we use interpolation to improve the result quality |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success |
| // |
| FPDFEMB_RESULT FPDFEMB_StretchDIB(FPDFEMB_BITMAP dest_dib, int dest_left, int dest_top, |
| int dest_width, int dest_height, FPDFEMB_RECT* clip_rect, |
| FPDFEMB_BITMAP src_dib, FPDFEMB_BOOL interpol); |
| |
| // Function: FPDFEMB_TransformDIB |
| // Transform a source DIB into another destination DIB |
| // Parameters: |
| // dest_dib - The destination DIB handle |
| // clip - Destination clipping rectangle, or NULL for no clipping. |
| // The coordinations are measured in destination bitmap. |
| // src_dib - Source DIB handle. |
| // x - X coordination of the dest origin |
| // y - Y coordination of the dest origin |
| // xx - X distance of the dest X vector |
| // yx - Y distance of the dest X vector |
| // xy - X distance of the dest Y vector |
| // yy - Y distance of the dest Y vector |
| // interpol - Whether we use interpolation to improve the result quality |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success |
| // Comments: |
| // All coordinations and distances are measured in destination bitmap system. |
| // |
| // This function places the bottom-left pixel of the image at the destination |
| // origin, then the bottom sideline along the destination X vector, and left |
| // sideline along the destination Y vector. |
| // |
| FPDFEMB_RESULT FPDFEMB_TransformDIB(FPDFEMB_BITMAP dest_dib, FPDFEMB_RECT* clip_rect, |
| FPDFEMB_BITMAP src_dib, int x, int y, int xx, int yx, |
| int xy, int yy, FPDFEMB_BOOL interpol); |
| |
| /******************************************************************************************** |
| **** |
| **** Custom Font Handler and CJK Support |
| **** |
| ********************************************************************************************/ |
| |
| // FPDFEMB comes with standard fonts for Latin characters. If your device is targeted to |
| // Eastern Asian markets, then system fonts must be provided and registered with FPDFEMB. |
| // Depending on your device configuration, those system fonts might be in TrueType or Type1 |
| // format, or some other non-standard compact format. For the first case, you should register |
| // a font mapper so FPDFEMB can pick the right font file, and for the second case, you |
| // should register a glyph provider so FPDFEMB can get glyph bitmap for each character. |
| |
| #define FPDFEMB_CHARSET_DEFAULT 0 |
| #define FPDFEMB_CHARSET_GB 936 |
| #define FPDFEMB_CHARSET_BIG5 950 |
| #define FPDFEMB_CHARSET_JIS 932 |
| #define FPDFEMB_CHARSET_KOREA 949 |
| #define FPDFEMB_CHARSET_UNICODE 1200 |
| |
| #define FPDFEMB_FONT_FIXEDPITCH 1 |
| #define FPDFEMB_FONT_SERIF 2 |
| #define FPDFEMB_FONT_SYMBOLIC 4 |
| #define FPDFEMB_FONT_SCRIPT 8 |
| #define FPDFEMB_FONT_NONSYMBOLIC 32 |
| #define FPDFEMB_FONT_ITALIC 64 |
| #define FPDFEMB_FONT_ALLCAP 0x10000 |
| #define FPDFEMB_FONT_SMALLCAP 0x20000 |
| #define FPDFEMB_FONT_FORCEBOLD 0x40000 |
| |
| // Structure: FPDFEMB_FONT_MAPPER |
| // Defines interface for system font mapper. |
| // |
| struct FPDFEMB_FONT_MAPPER |
| { |
| // Interface: MapFont |
| // Find font file path for a particular PDF font |
| // Parameters: |
| // mapper - Pointer to the FPDFEMB_FONT_MAPPER structure |
| // name - Font name |
| // charset - Charset ID (see above FPDFEMB_CHARSET_xxx constants) |
| // flags - Font flags (see above FPDFEMB_FONT_xxx constants) |
| // weight - Weight of the font. Range from 100 to 900. 400 is normal, |
| // 700 is bold. |
| // path - Receiving the full file path. The buffer size is 512 bytes. |
| // face_index - Receiving an zero-based index value for the font face, if the |
| // mapped font file is a "collection" (meaning a number of faces |
| // are stored in the same file). If the font file is not a |
| // collection, the index value should be zero. |
| // Return Value: |
| // Non-zero for success, 0 for failure. |
| // |
| FPDFEMB_BOOL (*MapFont)(struct FPDFEMB_FONT_MAPPER* mapper, const char* name, int charset, |
| unsigned int flags, int weight, |
| char* path, int* face_index); |
| |
| void* user; // A user pointer, used by the application |
| }; |
| |
| // Function: FPDFEMB_SetFontMapper |
| // Use a system font mapper (typically for Chinese/Japanese/Korean charsets) |
| // Parameters: |
| // mapper - Pointer to FPDFEMB_FONT_MAPPER structure. |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success |
| // Comments: |
| // This function is used with devices that come with one or more system fonts, |
| // and those fonts are in standard TT or T1 format. |
| // |
| FPDFEMB_RESULT FPDFEMB_SetFontMapper(FPDFEMB_FONT_MAPPER* mapper); |
| |
| // Structure: FPDFEMB_GLYPH_PROVIDER |
| // Interface for providing glyph bitmap of non-latin characters. |
| // This is usually used for embedded devices with Chinese/Japanese/Korean |
| // fonts installed, but those fonts are not in TrueType or Type1 format. |
| // |
| struct FPDFEMB_GLYPH_PROVIDER |
| { |
| // Interface: MapFont |
| // Return an internal handle for a font |
| // Parameters: |
| // provider - Pointer to this structure |
| // name - Font name |
| // charset - Charset ID (see above FPDFEMB_CHARSET_xxx constants) |
| // flags - Font flags (see above FPDFEMB_FONT_xxx constants) |
| // weight - Weight of the font. Range from 100 to 900. 400 is normal, |
| // 700 is bold. |
| // Return Value: |
| // An internal handle to the mapped font. If the embedded device supports |
| // multiple fonts, then this value can serve as an identifier to differentiate |
| // among them. If the device supports only one font, then implementation of |
| // this function can simply return NULL. |
| // |
| void* (*MapFont)(struct FPDFEMB_GLYPH_PROVIDER* provider, const char* name, int charset, |
| unsigned int flags, int weight); |
| // Interface: GetGlyphBBox |
| // Get glyph bounding box |
| // Parameters: |
| // provider - Pointer to this structure |
| // font - Internal handle to the font. Returned by MapFont interface. |
| // unicode - Unicode of the character |
| // CID - Adobe CID for this character. Or zero if not available. |
| // bbox - Receiving the result bounding box. See comments below. |
| // Return Value: |
| // None. |
| // Comments: |
| // The bounding box is measure in a glyph coordination system, in which the |
| // origin is set to character origin, and unit is set to one-thousandth of |
| // "em size" (representing the font size). |
| // |
| // In most CJK fonts, all CJK characters (except some symbols or western |
| // characters) have same glyph bounding box: |
| // left = 0, right = 1000, bottom = -220, top = 780. |
| // |
| // It's OK to return a box that's larger than the actual glyph box. |
| // |
| void (*GetGlyphBBox)(struct FPDFEMB_GLYPH_PROVIDER* provider, void* font, |
| FPDFEMB_WCHAR unicode, unsigned short CID, |
| FPDFEMB_RECT* bbox); |
| |
| // Interface: GetGlyphBitmap |
| // Get bitmap of a glyph |
| // Parameters: |
| // provider - Pointer to this structure |
| // font - Internal handle to the font. Returned by MapFont interface. |
| // unicode - Unicode of the character |
| // CID - Adobe CID for this character. Or zero if not available. |
| // font_width - Width of the font em square, measured in device units. |
| // font_height - Height of the font em square, measured in device units. |
| // left - Receiving the left offset, from the character origin, of the |
| // result glyph bitmap. Positive value will move the bitmap to |
| // the right side, negative to the left. |
| // top - Receiving the top offset, from the character origin, of the |
| // result glyph bitmap. Positive value will move the bitmap upward, |
| // negative downward. |
| // bitmap_width - Receiving number of width pixels in the result bitmap |
| // bitmap_height - Receiving number of height pixels in the result bitmap |
| // buffer - Receiving a data buffer pointer, allocated by the implementation. |
| // See comments below. |
| // stride - Receiving number of bytes per scanline, in the data buffer. |
| // pdf_width - Width of the character specified in PDF. It is measured in one- |
| // thousandth of the font width. It can be 0 if width not specified |
| // in PDF. See comments below. |
| // Return Value: |
| // Non-zero for success. 0 for failure. In this case the glyph can not be displayed. |
| // Comments: |
| // The buffer should be allocated by implemenation. And it must be allocated |
| // using FPDFEMB_AllocMemory function. The result buffer will be destroyed by |
| // FPDFEMB SDK, so implementation should not destroy it. |
| // |
| // The implementation should write "coverage" data into allocated buffer, one byte |
| // for each pixel, from top scanline to bottom scanline, within each scan line, |
| // from left pixel to right. Coverage 0 means the pixel is outside the glyph, |
| // coverage 255 means the pixel is inside the glyph. |
| // |
| // The "pdf_width" parameter can be used to scale the character in system font |
| // horizontally to match the font width specified in PDF. For example, if we have |
| // a PDF file which requires a character in half-width (pdf_width is 500), but |
| // in the system font the character has full-width (1000), then the glyph provider |
| // implementation should scale the font horizontally to half of its original width. |
| // |
| FPDFEMB_BOOL (*GetGlyphBitmap)(struct FPDFEMB_GLYPH_PROVIDER* provider, void* font, |
| FPDFEMB_WCHAR unicode, unsigned short CID, |
| double font_width, double font_height, int* left, int* top, |
| int* bitmap_width, int* bitmap_height, |
| void** buffer, int* stride, int pdf_width); |
| |
| void* user; // A user pointer, used by the application |
| }; |
| |
| // Function: FPDFEMB_SetGlyphProvider |
| // Make use of a glyph provider: generating glyph bitmap for non-Latin characters |
| // Parameters: |
| // provider - Pointer to the glyph provider structure. |
| // This structure must stay valid throughout usage of FPDFEMB module. |
| // Return Value: |
| // None. |
| // Comments: |
| // FPDFEMB embeds some standard fonts for Latin characters and symbols, like |
| // Times, Courier and Helvetica (Arial). For non-Latin characters, however, |
| // FPDFEMB has to ask glyph provide for help. |
| // |
| // If an embedded device carries fonts for non-Latin character sets, especially |
| // those for CJK markets, then the application can implement a glyph provider, |
| // allowing PDFs using non-embedded CJK fonts to be properly displayed. |
| // |
| void FPDFEMB_SetGlyphProvider(FPDFEMB_GLYPH_PROVIDER* provider); |
| |
| // Function: FPDFEMB_LoadCMap_GB |
| // Function: FPDFEMB_LoadCMap_GB_Ext |
| // Function: FPDFEMB_LoadCMap_CNS |
| // Function: FPDFEMB_LoadCMap_Korean |
| // Function: FPDFEMB_LoadCMap_Japan |
| // Function: FPDFEMB_LoadCMap_Japan_Ext |
| // Make use of character encoding maps embedded with FPDFEMB |
| // Parameters: |
| // None. |
| // Return Value: |
| // None. |
| // Comments: |
| // These functions add character encoding data to your application. Each call |
| // will increase the code size of your application. Total data size for all |
| // character sets is 151K bytes. |
| void FPDFEMB_LoadCMap_GB(); |
| void FPDFEMB_LoadCMap_GB_Ext(); // Load full code table for GB |
| void FPDFEMB_LoadCMap_CNS(); |
| void FPDFEMB_LoadCMap_Korea(); |
| void FPDFEMB_LoadCMap_Japan(); |
| void FPDFEMB_LoadCMap_Japan_Ext(); // Load full code table for Japan |
| |
| /******************************************************************************************** |
| **** |
| **** Document Information |
| **** |
| ********************************************************************************************/ |
| |
| // Function: PDFEMB_GetDocInfoString |
| // Get information string about the document, like creator, modifcation date, etc. |
| // Parameters: |
| // document - Handle to the document |
| // key - A byte string for the information key. Currently can be one of the followings: |
| // "Title", "Author", "Subject", "Keywords", "Creator", "Producer", "CreationDate", |
| // "ModDate", or some custom information key, if supported by the PDF file. |
| // buffer - A buffer allocated by the application, or NULL. |
| // bufsize - [IN/OUT] A pointer to a number indicating the buffer size (number of bytes), |
| // before this function call. After return, this place will store |
| // number of bytes used by the output (including terminator). |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success |
| // Comments: |
| // The string is output in Unicode, using UTF-16LE format. It's terminated by |
| // two consecutive zero bytes. |
| // |
| // If the "buffer" parameter is NULL, then the "bufsize" parameter will receive |
| // number of bytes required to store the string (including the two-byte terminator). |
| // |
| FPDFEMB_RESULT FPDFEMB_GetDocInfoString(FPDFEMB_DOCUMENT document, const char* key, void* buffer, unsigned int* bufsize); |
| |
| /******************************************************************************************** |
| **** |
| **** Action (Destination) Information |
| **** |
| ********************************************************************************************/ |
| |
| typedef void* FPDFEMB_ACTION; |
| |
| // Action types supported by FPDFEMB |
| #define FPDFEMB_DEST_NONE 0 // No or unsupported destination |
| #define FPDFEMB_DEST_PAGE 1 // A page inside the same document |
| #define FPDFEMB_DEST_DOC 2 // An external PDF document |
| #define FPDFEMB_DEST_URL 3 // An external URL |
| #define FPDFEMB_ACTION_LAUNCH 4 // Launch an external file or command |
| |
| // Zoom mode for destination |
| #define FPDFEMB_ZOOM_NONE 0 // Zoom mode not specified |
| #define FPDFEMB_ZOOM_FACTOR 1 // Specific zoom factor is used |
| #define FPDFEMB_ZOOM_FITPAGE 2 // Fit the whole page on screen |
| #define FPDFEMB_ZOOM_FITWIDTH 3 // Fit width of the page on screen |
| #define FPDFEMB_ZOOM_FITHEIGHT 4 // Fit height of the page on screen |
| #define FPDFEMB_ZOOM_FITRECT 5 // Fit a particular rectangle on screen |
| #define FPDFEMB_ZOOM_FITCONTENT 6 // Fit whole content of page on screen |
| #define FPDFEMB_ZOOM_FITCONTENTW 7 // Fit content width of page on screen |
| #define FPDFEMB_ZOOM_FITCONTENTH 8 // Fit content height of page on screen |
| |
| // Data structure for page destination |
| struct FPDFEMB_PAGEDEST |
| { |
| int page_index; // Zero based index for the page |
| int zoom_mode; // See FPDFEMB_ZOOM_xxx definition above |
| int zoom_factor; // For FPDFEMB_ZOOM_FACTOR only: the zoom factor (in percentage) |
| FPDFEMB_RECT position; // Specify position inside the page. Depends on the zoom mode, |
| // different members of the rectangle are used: |
| // FPDFEMB_ZOOM_NONE: left, top |
| // FPDFEMB_ZOOM_FACTOR: left, top |
| // FPDFEMB_ZOOM_FITPAGE: none |
| // FPDFEMB_ZOOM_FITWIDTH: top |
| // FPDFEMB_ZOOM_FITHEIGHT: left |
| // FPDFEMB_ZOOM_FITRECT: left, top, bottom, right |
| // FPDFEMB_ZOOM_FITCONTENT: none |
| // FPDFEMB_ZOOM_FITCONTENTW: top |
| // FPDFEMB_ZOOM_FITCONTENTH: left |
| }; |
| |
| // Data structure for document destination |
| struct FPDFEMB_DOCDEST |
| { |
| FPDFEMB_PAGEDEST page_data; // page data |
| char* file_name; // The file name, encoded in original charset (maybe MBCS) |
| }; |
| |
| // Data structure for URL destination |
| struct FPDFEMB_URLDEST |
| { |
| char* url; // URL encoded in 7-bit ASCII |
| }; |
| |
| // Data structure for Launch action |
| struct FPDFEMB_LAUNCHACTION |
| { |
| int new_window; // Whether a new window should be opened |
| char* file_name; // The file name, encoded in original charset (maybe MBCS) |
| }; |
| |
| // Function: FPDFEMB_Action_GetType |
| // Get type of an action |
| // Parameters: |
| // document - Handle to the document |
| // action - Handle to the action |
| // dest_type - Pointer to an integer receiving type of the destination. See the above |
| // FPDFEMB_DEST_xxx definitions |
| // data_size - Pointer to an integer receiving data block size for the destination. |
| // If this parameter is NULL, then data size won't be retrieved. |
| // Comments: |
| // Each different type of destination has different data structure. The "data_size" result |
| // indicates how many bytes is required to hold the destination data structure. The application |
| // can then allocate sufficient buffer and then call FPDFEMB_Bookmark_GetDest function to |
| // get the real data. |
| // |
| FPDFEMB_RESULT FPDFEMB_Action_GetType(FPDFEMB_DOCUMENT document, FPDFEMB_ACTION action, int* dest_type, int* data_size); |
| |
| // Function: FPDFEMB_Action_GetData |
| // Get detailed data of a particular action |
| // Parameters: |
| // document - Handle to the document |
| // action - Handle to the action |
| // buffer - Application allocated buffer receiving the destination data |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // Comments: |
| // See data structure definition for different action type above. Please note |
| // the actual action data might use more space than the structure definition |
| // shows, to store things like file name or URL. So you should always call |
| // FPDFEMB_Action_GetType first to get data size then allocate enough buffer |
| // for this call. |
| // |
| FPDFEMB_RESULT FPDFEMB_Action_GetData(FPDFEMB_DOCUMENT document, FPDFEMB_ACTION action, void* buffer); |
| |
| // Function: FPDFEMB_Action_GetNext |
| // Get next action in an action chain |
| // Parameters: |
| // document - Handle to the document |
| // action - Handle to current action |
| // next - Receiving handle to next action. |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // Comments: |
| // If there is no next action, the "next" parameter will be set to NULL after the function returns. |
| // |
| FPDFEMB_RESULT FPDFEMB_Action_GetNext(FPDFEMB_ACTION action, FPDFEMB_ACTION* next); |
| |
| /******************************************************************************************** |
| **** |
| **** Bookmark Information |
| **** |
| ********************************************************************************************/ |
| |
| typedef void* FPDFEMB_BOOKMARK; |
| |
| // Function: FPDFEMB_Bookmark_GetFirstChild |
| // Get first child of a bookmark item, or first top level bookmark item |
| // Parameters: |
| // document - Handle to the document |
| // parent - Handle to the parent bookmark. |
| // Can be NULL if you want to get the first top level item. |
| // bookmark - Receiving handle to the first child or top level bookmark item. |
| // If result is NULL, then bookmark not found. |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success |
| // |
| FPDFEMB_RESULT FPDFEMB_Bookmark_GetFirstChild(FPDFEMB_DOCUMENT document, FPDFEMB_BOOKMARK parent, |
| FPDFEMB_BOOKMARK* bookmark); |
| |
| // Function: FPDFEMB_Bookmark_GetFirstChild |
| // Get next sibling of a bookmark item |
| // Parameters: |
| // document - Handle to the document |
| // bookmark - Handle to the bookmark |
| // sibling - Receiving the handle of next sibling. |
| // If result is NULL, then this is the last bookmark in this level. |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success |
| // |
| FPDFEMB_RESULT FPDFEMB_Bookmark_GetNextSibling(FPDFEMB_DOCUMENT document, FPDFEMB_BOOKMARK bookmark, |
| FPDFEMB_BOOKMARK* sibling); |
| |
| // Function: FPDFEMB_Bookmark_GetTitle |
| // Get title of a bookmark |
| // Parameters: |
| // bookmark - Handle to the bookmark |
| // buffer - A buffer allocated by the application, or NULL. |
| // bufsize - [IN/OUT] A pointer to a number indicating the buffer size, |
| // before this function call. After return, this place will store |
| // number of bytes used by the output (including terminator). |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success |
| // Comments: |
| // The title is output in Unicode, using UTF-16LE format. It's terminated by |
| // two consecutive zero bytes. |
| // |
| // If the "buffer" parameter is NULL, then the "bufsize" parameter will receive |
| // number of bytes required to store the bookmark title (including the two- |
| // byte terminator). |
| // |
| // If the buffer provided is smaller than the required size, then this function |
| // will not copy any data, return FPDFEMB_PARAM, and the required buffer size will |
| // also be put in "bufsize" parameter. |
| // |
| FPDFEMB_RESULT FPDFEMB_Bookmark_GetTitle(FPDFEMB_BOOKMARK bookmark, void* buffer, unsigned int* bufsize); |
| |
| // Function: FPDFEMB_Bookmark_GetPage |
| // Get page number of a bookmark pointing to |
| // Parameters: |
| // document - Handle to the document |
| // bookmark - Handle to the bookmark |
| // page - Receiving the page number. -1 if this bookmark doesn't actually |
| // point to a page inside the document. |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success |
| // Comments: |
| // Some bookmark might not point to a page, some bookmark might have more than one destination |
| // (action), for detailed information about a bookmark, you should call FPDFEMB_Bookmark_GetAction. |
| // |
| FPDFEMB_RESULT FPDFEMB_Bookmark_GetPage(FPDFEMB_DOCUMENT document, FPDFEMB_BOOKMARK bookmark, int* page); |
| |
| // Function: FPDFEMB_Bookmark_GetAction |
| // Get action(s) associated with a particular bookmark |
| // Parameters: |
| // document - Handle to the document |
| // bookmark - Handle to the bookmark |
| // action - Receiving handle of first action |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // |
| FPDFEMB_RESULT FPDFEMB_Bookmark_GetAction(FPDFEMB_DOCUMENT document, FPDFEMB_BOOKMARK bookmark, FPDFEMB_ACTION* action); |
| |
| /******************************************************************************************** |
| **** |
| **** Hyperlink Information |
| **** |
| ********************************************************************************************/ |
| |
| // Function: FPDFEMB_Link_GetCount |
| // Get number of hyperlinks inside a page |
| // Parameters: |
| // page - Page handle. |
| // link_count - Pointer to an integer receiving the number of links |
| // reserved - Must be zero now. |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // Comments: |
| // This function must be called before any other link related function can |
| // be called for the page. |
| // |
| FPDFEMB_RESULT FPDFEMB_Link_GetCount(FPDFEMB_PAGE page, int* link_count, int reserved); |
| |
| // Function: FPDFEMB_Link_GetAction |
| // Get action(s) associated with a particular hyperlink |
| // Parameters: |
| // page - Page handle |
| // link_index - Zero-based index for the link |
| // action - Receiving handle of first action |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // |
| FPDFEMB_RESULT FPDFEMB_Link_GetAction(FPDFEMB_PAGE page, int link_index, FPDFEMB_ACTION* action); |
| |
| // Function: FPDFEMB_Link_GetAreaCount |
| // Get number of area (quadrilaterals) for a link |
| // Parameters: |
| // page - Page handle |
| // link_index - Zero-based index for the link |
| // count - Pointer to an integer receiving number of quadrilaterals |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // |
| FPDFEMB_RESULT FPDFEMB_Link_GetAreaCount(FPDFEMB_PAGE page, int link_index, int* count); |
| |
| // Function: FPDFEMB_Link_GetArea |
| // Get a particular quadrilateral for a link |
| // Parameters: |
| // page - Page handle |
| // link_index - Zero-based index for the link |
| // area_index - Zero-based index for the quadrilateral |
| // points - Pointer to an array consists 4 points, receiving coordinations |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // Comments: |
| // The result in "points" array are the X/Y coordinations for the four vertices |
| // of the quadrilateral. Vertices are in the following order: lower left, lower |
| // right, upper right, upper left. |
| // |
| FPDFEMB_RESULT FPDFEMB_Link_GetArea(FPDFEMB_PAGE page, int link_index, int area_index, |
| FPDFEMB_POINT* points); |
| |
| /******************************************************************************************** |
| **** |
| **** Graphic Output (onto DIB) |
| **** |
| ********************************************************************************************/ |
| |
| typedef void* FPDFEMB_FONT; |
| |
| // Function: FPDFEMB_OpenStandardFont |
| // Get ready to use a standard PDF font |
| // Parameters: |
| // font_name - Name of the font. See a list of supported fonts below. |
| // font_handle - Receiving the font handle. |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // Comments: |
| // Currently supported standard fonts: |
| // Courier, Courier-Bold, Courier-BoldOblique, Courier-Oblique, |
| // Helvetica, Helvetica-Bold, Helvetica-BoldOblique, Helvetica-Oblique, |
| // Times-Roman, Times-Bold, Times-Italic, Times-BoldItalic, |
| // Symbol, ZapfDingbats. |
| // |
| FPDFEMB_RESULT FPDFEMB_OpenStandardFont(const char* font_name, FPDFEMB_FONT* font_handle); |
| |
| // Function: FPDFEMB_OpenSystemFont |
| // Get ready to use a system font |
| // Parameters: |
| // font_name - Font name |
| // charset - Charset ID (see above FPDFEMB_CHARSET_xxx constants) |
| // flags - Font flags (see above FPDFEMB_FONT_xxx constants) |
| // weight - Weight of the font. Range from 100 to 900. 400 is normal, |
| // 700 is bold. |
| // font_handle - Receiving the font handle. |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // Comments: |
| // System font is supported only if either FPDFEMB_SetFontMapper or |
| // FPDFEMB_SetGlyphProvider is called. |
| // Font attributes (name, charset, flags and weight) can be all optional, if the |
| // font mapper or glyph provider doesn't make use of them. |
| // |
| FPDFEMB_RESULT FPDFEMB_OpenSystemFont(const char* font_name, int charset, unsigned int flags, int weight, |
| FPDFEMB_FONT* font_handle); |
| |
| // Function: FPDFEMB_CloseFont |
| // Close a font handle. |
| // Parameters: |
| // font_handle - Handle to the font. |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // |
| FPDFEMB_RESULT FPDFEMB_CloseFont(FPDFEMB_FONT font_handle); |
| |
| struct FPDFEMB_TEXTMATRIX |
| { |
| double a, b, c, d; |
| }; |
| |
| // Function: FPDFEMB_OutputText |
| // Output text string onto a DIB device. |
| // Parameters: |
| // dib - DIB handle, as the output device |
| // x, y - DIB coordinations for the origin point of the first character. |
| // font_handle - Handle to the font |
| // font_size - Font size in pixels |
| // matrix - Matrix for the text output. Can be NULL. |
| // text - Zero-terminated unicode text string |
| // argb - Color of the text, in 0xaarrggbb format. |
| // Return Value: |
| // Error code, or FPDFERR_SUCCESS for success. |
| // |
| FPDFEMB_RESULT FPDFEMB_OutputText(FPDFEMB_BITMAP dib, int x, int y, FPDFEMB_FONT font_handle, double font_size, |
| FPDFEMB_TEXTMATRIX* matrix, const FPDFEMB_WCHAR* text, unsigned long argb); |
| |
| #ifdef __cplusplus |
| }; |
| #endif |
| |
| #endif // #ifdef _FPDFEMB_H_ |