// 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_