| OLD | NEW |
| (Empty) |
| 1 // FPDFEMB.H - Header file for FPDFEMB SDK | |
| 2 // Copyright (c) 2007-2008 Foxit Software Company, All Right Reserved. | |
| 3 | |
| 4 // Date: 2008-04-07 | |
| 5 | |
| 6 // Embedded platforms have many different aspects from desktop platforms, | |
| 7 // among them, the followings are most important for PDF processing: | |
| 8 // | |
| 9 // 1. Embedded platforms have only limited memory, and there is no virtual mem
ory. | |
| 10 // PDF is a very complicated format, processing PDF may consumes qu
ite | |
| 11 // large amount of memory, even for some smaller PDFs. And, in orde
r to | |
| 12 // increase the performance of PDF parsing and rendering, cache mem
ory | |
| 13 // is often used. For some big PDFs with many pages, the cache may
grow | |
| 14 // while user browing through pages, eventually, for some PDFs, the
memory | |
| 15 // on the device may run out. | |
| 16 // | |
| 17 // FPDFEMB SDK allows graceful out-of-memory (OOM) handling by retu
rning | |
| 18 // OOM error code for all functions that may involve memory allocat
ion. | |
| 19 // When an application detects OOM situation, it can do one of the
followings: | |
| 20 // | |
| 21 // a) Give user some prompt and quit the application or clo
se the document; | |
| 22 // b) Or better, try to recover from the error. Sometimes O
OM can be caused | |
| 23 // by ever-growing cache. For example, when user br
owses a 1000-page | |
| 24 // document, let's say OOM happen at page #300. In
this case, the | |
| 25 // application might close the whole document (cach
e will be gone with | |
| 26 // it), reopen the document, then go directly to pa
ge #300. It's likely | |
| 27 // the process will go through this time. This is c
alled "OOM recovery". | |
| 28 // If OOM happens again during a recovery, then, it
's not possible to finish | |
| 29 // the process, the application must quit of close
the document. | |
| 30 // | |
| 31 // 2. Embedded platforms has only limited computing power. Since some PDFs | |
| 32 // can be very complicated and require a lot of processing to be di
splayed, | |
| 33 // it may take a lot of time for the process to finish. This may ca
use | |
| 34 // some problem with user experience, especially for devices like m
obile | |
| 35 // phones, when an application may need to be put on hold any time.
Therefore, | |
| 36 // it's important to break lengthy process into small steps which c
an be | |
| 37 // stopped or resumed at any time. We call this kind of process as | |
| 38 // "progressive process". | |
| 39 // | |
| 40 // FPDFEMB SDK allows progressive page parsing and rendering, the m
ost time- | |
| 41 // consuming part of PDF processing. | |
| 42 // | |
| 43 // IMPORTANT: | |
| 44 // FPDFEMB module is not intended to run in multi-threaded environm
ent. | |
| 45 | |
| 46 // Components inside FPDFEMB: | |
| 47 // * Library Memory Management | |
| 48 // * Document Operations | |
| 49 // * Page Basic Operations | |
| 50 // * Page Parsing | |
| 51 // * Page Rendering | |
| 52 // * Coordination Conversion | |
| 53 // * Text Search | |
| 54 // * Text Information | |
| 55 // * Device Independant Bitmap | |
| 56 // * Custom Font Handler and CJK Support | |
| 57 // * Bookmark Information | |
| 58 // * Hyperlink Information | |
| 59 // * Graphic Output | |
| 60 | |
| 61 #ifndef _FPDFEMB_H_ | |
| 62 #define _FPDFEMB_H_ | |
| 63 | |
| 64 #ifdef __cplusplus | |
| 65 extern "C" { | |
| 66 #endif | |
| 67 | |
| 68 // Standard return type for many FPDFEMB functions: FPDFERR_SUCCESS for success,
otherwise error code | |
| 69 typedef int FPDFEMB_RESULT; | |
| 70 | |
| 71 // Standard boolean type: 0 for false, non-zero for true | |
| 72 typedef int FPDFEMB_BOOL; | |
| 73 | |
| 74 // Unicode character. FPDFEMB uses UTF16LE format for unicode string. | |
| 75 typedef unsigned short FPDFEMB_WCHAR; | |
| 76 | |
| 77 // Error codes | |
| 78 #define FPDFERR_SUCCESS 0 | |
| 79 #define FPDFERR_MEMORY 1 // Out of memory | |
| 80 #define FPDFERR_ERROR 2 // Error of any kind, without sp
ecific reason | |
| 81 #define FPDFERR_PASSWORD 3 // Incorrect password | |
| 82 #define FPDFERR_FORMAT 4 // Not PDF format | |
| 83 #define FPDFERR_FILE 5 // File access error | |
| 84 #define FPDFERR_PARAM 6 // Parameter error | |
| 85 #define FPDFERR_STATUS 7 // Not in correct status | |
| 86 #define FPDFERR_TOBECONTINUED 8 // To be continued | |
| 87 #define FPDFERR_NOTFOUND 9 // Search result not found | |
| 88 | |
| 89 /*******************************************************************************
************* | |
| 90 **** | |
| 91 **** Library Memory Management | |
| 92 **** | |
| 93 ********************************************************************************
************/ | |
| 94 | |
| 95 // Structure: FPDFEMB_MEMMGR | |
| 96 // Including interfaces implemented by host application, pr
oviding memory allocation | |
| 97 // facilities. All members are required. | |
| 98 // A memory manager structure is required to be valid durin
g the entire period | |
| 99 // when an application using FPDFEMB module. | |
| 100 // | |
| 101 // IMPORTANT NOTE: using of this interface is strongly not
recommended, because | |
| 102 // FPDFEMB now internally use FPDFEMB_MEMMGR_EX interface,
which allows more | |
| 103 // advanced memory management. This interface is retained f
or backward compatibility | |
| 104 // only, and maybe discontinued in the future. | |
| 105 // | |
| 106 struct FPDFEMB_MEMMGR { | |
| 107 // Interface: Alloc | |
| 108 // Allocate a memory block | |
| 109 // Parameters: | |
| 110 // pMgr - Pointer to the memory manager. | |
| 111 // size - Number of bytes for the memory b
lock. | |
| 112 // Return Value: | |
| 113 // The pointer to allocated memory block. NULL if no memory
available. | |
| 114 // Comments: | |
| 115 // In order to handle OOM situation, application can use lo
ngjmp() inside | |
| 116 // implementation of this function. If underlying memory ma
nager fails to | |
| 117 // allocate enough memory, then application can use longjmp
() to jump to | |
| 118 // OOM handling codes. | |
| 119 // | |
| 120 void* (*Alloc)(struct FPDFEMB_MEMMGR* pMgr, unsigned int size); | |
| 121 | |
| 122 // Interface: AllocNL | |
| 123 // Allocate a memory block, without leaving | |
| 124 // Parameters: | |
| 125 // pMgr - Pointer to the memory manager. | |
| 126 // size - Number of bytes for the memory b
lock. | |
| 127 // Return Value: | |
| 128 // The pointer to allocated memory block. NULL if no memory
available. | |
| 129 // Comments: | |
| 130 // Implementation MUST return NULL if no memory available,
no exception | |
| 131 // or longjmp() can be used. | |
| 132 // | |
| 133 void* (*AllocNL)(struct FPDFEMB_MEMMGR* pMgr, unsigned int size); | |
| 134 | |
| 135 // Interfce: Realloc | |
| 136 // Reallocate a memory block | |
| 137 // Parameters: | |
| 138 // pMgr - Pointer to the memory manager. | |
| 139 // pointer - An existing memory block, or NUL
L. | |
| 140 // new_size - New size (number of bytes) of th
e memory block. Can be zero. | |
| 141 // Return value: | |
| 142 // The pointer of reallocated memory block, it could be a n
ew block, or just | |
| 143 // the previous block with size modified. | |
| 144 // Comments: | |
| 145 // If an existing memory block specified, the data in the m
emory block will | |
| 146 // be copied to the new block, if reallocated. | |
| 147 // | |
| 148 // In order to handle OOM situation, application can use lo
ngjmp() inside | |
| 149 // implementation of this function. If underlying memory ma
nager fails to | |
| 150 // allocate enough memory, then application can use longjmp
() to jump to | |
| 151 // OOM handling codes. | |
| 152 // | |
| 153 void* (*Realloc)(struct FPDFEMB_MEMMGR* pMgr, void* pointer, unsigned
int new_size); | |
| 154 | |
| 155 // Interface: Free | |
| 156 // Free a memory block | |
| 157 // Parameters: | |
| 158 // pMgr - Pointer to the memory manager. | |
| 159 // pointer - An existing memory block. | |
| 160 // Return Value: | |
| 161 // None. | |
| 162 // | |
| 163 void (*Free)(struct FPDFEMB_MEMMGR* pMgr, void* pointer); | |
| 164 }; | |
| 165 | |
| 166 // Function: FPDFEMB_Init | |
| 167 // Initialize the FPDFEMB module | |
| 168 // Parameters: | |
| 169 // mem_mgr - Pointer to memory manager struct
ure | |
| 170 // Return Value: | |
| 171 // Error code, or FPDFERR_SUCCESS for success. | |
| 172 // Comments: | |
| 173 // This function will allocate necessary internal data stru
cture for | |
| 174 // the whole module to operate. | |
| 175 FPDFEMB_RESULT FPDFEMB_Init(FPDFEMB_MEMMGR* mem_mgr); | |
| 176 | |
| 177 typedef void (*FPDFEMB_FIXED_OOM_HANDLER)(void* memory, int size); | |
| 178 | |
| 179 // Function: FPDFEMB_InitFixedMemory | |
| 180 // Initialize the FPDFEMB module, providing a fixed memory
heap | |
| 181 // Parameters: | |
| 182 // memory - Pointer to a pre-allocated memor
y block | |
| 183 // size - Number of bytes in the memory bl
ock | |
| 184 // oom_handler - Pointer to a function which will
be called when OOM happens. Can be | |
| 185 // NULL if application does
n't want to be notified om OOM. | |
| 186 // Return Value: | |
| 187 // Error code, or FPDFERR_SUCCESS for success. | |
| 188 // Comments: | |
| 189 // In many embedded system, memory usage are predetermined.
The application | |
| 190 // is assigned with fixed size of available memory, then it
can pre-allocate | |
| 191 // a memory block with maximum size and pass to this functi
on to initialize | |
| 192 // FPDFEMB module. In this case, FPDFEMB won't need any add
itional memory | |
| 193 // allocation. | |
| 194 // | |
| 195 // In case the pre-allocated memory has run out, the "oom_p
roc" callback | |
| 196 // function will be called to notify the application that a
n OOM recovery | |
| 197 // procedure needs to be performed. | |
| 198 // | |
| 199 FPDFEMB_RESULT FPDFEMB_InitFixedMemory(void* memory, int size, FPDFEMB_FIXED_OOM
_HANDLER oom_handler); | |
| 200 | |
| 201 // Memory Management Flags | |
| 202 #define FPDFEMB_NONLEAVE 1 | |
| 203 #define FPDFEMB_MOVABLE 2 | |
| 204 #define FPDFEMB_DISCARDABLE 4 | |
| 205 | |
| 206 // Structure: FPDFEMB_MEMMGR_EX | |
| 207 // This is an extended version of memory manager interface,
allowing advanced | |
| 208 // memory management, including movable and discardable mem
ory blocks. | |
| 209 // | |
| 210 // Use this interface with FPDFEMB_InitExt function. | |
| 211 // | |
| 212 struct FPDFEMB_MEMMGR_EX { | |
| 213 // Interface: Alloc | |
| 214 // Allocate a memory block | |
| 215 // Parameters: | |
| 216 // pMgr - Pointer to the memory manager. | |
| 217 // size - Number of bytes for the memory b
lock. | |
| 218 // flags - A combination of flags defined a
bove. | |
| 219 // Return Value: | |
| 220 // The pointer to allocated memory block. NULL if no memory
available. | |
| 221 // If FPDFEMB_MOVABLE flag is used, implementation should r
eturn a handle | |
| 222 // to the memory block, if it supports movable block alloca
tion. | |
| 223 // Comments: | |
| 224 // The implementation should not do any action if no memory
available, | |
| 225 // just return NULL. OOM handling can be done in OOM_Handle
r interface. | |
| 226 // | |
| 227 void* (*Alloc)(struct FPDFEMB_MEMMGR_EX* pMgr, unsigned int size, int
flags); | |
| 228 | |
| 229 // Interface: OOM_Handler | |
| 230 // OOM (out-of-memory) situation handler | |
| 231 // Parameters: | |
| 232 // pMgr - Pointer to the memory manager. | |
| 233 // Return Value: | |
| 234 // None. | |
| 235 // Comments: | |
| 236 // In order to handle OOM situation, application can use lo
ngjmp() inside | |
| 237 // implementation of this function. | |
| 238 // | |
| 239 void (*OOM_Handler)(struct FPDFEMB_MEMMGR_EX* pMgr); | |
| 240 | |
| 241 // Interfce: Realloc | |
| 242 // Reallocate a memory block | |
| 243 // Parameters: | |
| 244 // pMgr - Pointer to the memory manager. | |
| 245 // pointer - Pointer to an existing memory bl
ock, or handle to a movable | |
| 246 // block. Can not be NULL. | |
| 247 // new_size - New size (number of bytes) of th
e memory block. Can not be zero. | |
| 248 // Return value: | |
| 249 // The pointer of reallocated memory block, it could be a n
ew block, or just | |
| 250 // the previous block with size modified. | |
| 251 // If FPDFEMB_MOVABLE flag is used, implementation should r
eturn a handle | |
| 252 // to the memory block, if it supports movable block alloca
tion. | |
| 253 // Comments: | |
| 254 // If an existing memory block specified, the data in the m
emory block should | |
| 255 // be copied to the new block, if reallocated. | |
| 256 // | |
| 257 // The implementation should not do any action if no memory
available, | |
| 258 // just return NULL. OOM handling can be done in OOM_Handle
r interface. | |
| 259 // | |
| 260 void* (*Realloc)(struct FPDFEMB_MEMMGR_EX* pMgr, void* pointer, unsign
ed int new_size, int flags); | |
| 261 | |
| 262 // Interface: Lock | |
| 263 // Lock a movable memory block | |
| 264 // Parameters: | |
| 265 // pMgr - Pointer to the memory manager. | |
| 266 // handle - Handle to movable memory block,
returned by Alloc or Realloc. | |
| 267 // Return Value: | |
| 268 // The pointer of the memory block. NULL if the block was d
iscarded. | |
| 269 // Comments: | |
| 270 // This interface is optional, if implementation doesn't su
pport movable memory | |
| 271 // block, then this interface can be set to NULL. | |
| 272 // | |
| 273 void* (*Lock)(struct FPDFEMB_MEMMGR_EX* pMgr, void* handle); | |
| 274 | |
| 275 // Interface: Unlock | |
| 276 // Unlock a locked movable memory block | |
| 277 // Parameters: | |
| 278 // pMgr - Pointer to the memory manager. | |
| 279 // handle - Handle to movable memory block,
returned by Alloc or Realloc. | |
| 280 // Return Value: | |
| 281 // None. | |
| 282 // Comments: | |
| 283 // This interface is optional, if implementation doesn't su
pport movable memory | |
| 284 // block, then this interface can be set to NULL. | |
| 285 // | |
| 286 void (*Unlock)(struct FPDFEMB_MEMMGR_EX* pMgr, void* handle); | |
| 287 | |
| 288 // Interface: Free | |
| 289 // Free a memory block | |
| 290 // Parameters: | |
| 291 // pMgr - Pointer to the memory manager. | |
| 292 // pointer - Pointer to an existing memory bl
ock, or handle to a movable block. | |
| 293 // Return Value: | |
| 294 // None. | |
| 295 // | |
| 296 void (*Free)(struct FPDFEMB_MEMMGR_EX* pMgr, void* pointer, int flags
); | |
| 297 | |
| 298 void* user; // A user pointer, used by the application | |
| 299 }; | |
| 300 | |
| 301 // Function: FPDFEMB_LoadJbig2Decoder | |
| 302 // Function: FPDFEMB_LoadJpeg2000Decoder | |
| 303 // Enable JBIG2 or JPEG2000 image decoder | |
| 304 // Parameters: | |
| 305 // None. | |
| 306 // Return Value: | |
| 307 // None. | |
| 308 // Comments: | |
| 309 // If you want to display JBIG2 or JPEG2000 encoded images,
you need to call | |
| 310 // these functions after FPDFEMB initialized. | |
| 311 // | |
| 312 // Calling these functions will increase code size by about
200K-400K bytes. | |
| 313 // Also JPEG2000 decoder may not be available on some platf
orms. | |
| 314 // | |
| 315 void FPDFEMB_LoadJbig2Decoder(); | |
| 316 void FPDFEMB_LoadJpeg2000Decoder(); | |
| 317 | |
| 318 // Function: FPDFEMB_InitEx | |
| 319 // Initialize the FPDFEMB module with the extended memory m
anager | |
| 320 // Parameters: | |
| 321 // mem_mgr - Pointer to memory manager struct
ure | |
| 322 // Return Value: | |
| 323 // Error code, or FPDFERR_SUCCESS for success. | |
| 324 // Comments: | |
| 325 // This function will allocate necessary internal data stru
cture for | |
| 326 // the whole module to operate. | |
| 327 FPDFEMB_RESULT FPDFEMB_InitEx(FPDFEMB_MEMMGR_EX* mem_mgr); | |
| 328 | |
| 329 // Function: FPDFEMB_Exit | |
| 330 // Stop using FPDFEMB module and release all resources | |
| 331 // Parameters: | |
| 332 // None. | |
| 333 // Return Value: | |
| 334 // None. | |
| 335 // Comments: | |
| 336 // All loaded documents and pages will become invalid after
this call. | |
| 337 // | |
| 338 // This function is useful for OOM recovery: when your appl
ication hits | |
| 339 // an OOM situation, calling this function will clear all m
emory allocated | |
| 340 // by FPDFEMB module, then you can call one of the initiali
zation functions, | |
| 341 // reopen the document and recovery from OOM. | |
| 342 // | |
| 343 void FPDFEMB_Exit(); | |
| 344 | |
| 345 // Function: FPDFEMB_AllocMemory | |
| 346 // Allocate memory | |
| 347 // Parameters: | |
| 348 // size - Number of bytes | |
| 349 // Return Value: | |
| 350 // The allocated buffer pointer. NULL for out of memory. | |
| 351 // | |
| 352 void* FPDFEMB_AllocMemory(unsigned int size); | |
| 353 | |
| 354 // Function: FPDFEMB_FreeMemory | |
| 355 // Free allocated memory | |
| 356 // Parameters: | |
| 357 // pointer - Pointer returned by FPDFEMB_Allo
cMemory | |
| 358 // Return Value: | |
| 359 // None. | |
| 360 // | |
| 361 void FPDFEMB_FreeMemory(void* pointer); | |
| 362 | |
| 363 // Function: FPDFEMB_FreeCaches | |
| 364 // Free all expendable caches used by FPDFEMB in order to s
ave memory | |
| 365 // Parameters: | |
| 366 // None. | |
| 367 // Return Value: | |
| 368 // None. | |
| 369 // Comments: | |
| 370 // When an application memory manager runs out of memory, b
efore an OOM situation | |
| 371 // is raised, the application can try this | |
| 372 // | |
| 373 void FPDFEMB_FreeCaches(); | |
| 374 | |
| 375 /*******************************************************************************
************* | |
| 376 **** | |
| 377 **** Document Operations | |
| 378 **** | |
| 379 ********************************************************************************
************/ | |
| 380 | |
| 381 // Structure: FPDFEMB_FILE_ACCESS | |
| 382 // Describe the way to access a file (readonly). | |
| 383 struct FPDFEMB_FILE_ACCESS { | |
| 384 // Inteface: GetSize | |
| 385 // Get total size of the file | |
| 386 // Parameters: | |
| 387 // file - Pointer to this file access stru
cture | |
| 388 // Return Value: | |
| 389 // File size, in bytes. Implementation can return 0 for any
error. | |
| 390 // | |
| 391 unsigned int (*GetSize)(struct FPDFEMB_FILE_ACCESS* file); | |
| 392 | |
| 393 // Interface: ReadBlock | |
| 394 // Read a data block from the file | |
| 395 // Parameters: | |
| 396 // file - Pointer to this file access stru
cture | |
| 397 // buffer - Pointer to a buffer receiving re
ad data | |
| 398 // offset - Byte offset for the block, from
beginning of the file | |
| 399 // size - Number of bytes for the block. | |
| 400 // Return Value: | |
| 401 // Error code, or FPDFERR_SUCCESS for success. | |
| 402 // | |
| 403 FPDFEMB_RESULT (*ReadBlock)(struct FPDFEMB_FILE_ACCESS* file, void* buf
fer, | |
| 404 unsigned
int offset, unsigned int size); | |
| 405 | |
| 406 void* user; // A user pointer, used by the applicati
on | |
| 407 }; | |
| 408 | |
| 409 // Structure: FPDFEMB_PAUSE | |
| 410 // An interface for pausing a progressive process. | |
| 411 struct FPDFEMB_PAUSE { | |
| 412 // Interface: NeedPauseNow | |
| 413 // Check if we need to pause a progressive proccess now | |
| 414 // Parameters: | |
| 415 // pause - Pointer to the pause structure | |
| 416 // Return Value: | |
| 417 // Non-zero for pause now, 0 for continue. | |
| 418 // Comments: | |
| 419 // Typically implementation of this interface compares the
current system tick | |
| 420 // with the previous one, if the time elapsed exceeds certa
in threshold, then | |
| 421 // the implementation returns TRUE, indicating a pause is n
eeded. | |
| 422 // | |
| 423 FPDFEMB_BOOL (*NeedPauseNow)(struct FPDFEMB_PAUSE* pause); | |
| 424 | |
| 425 void* user; // A user pointer, used by the applicati
on | |
| 426 }; | |
| 427 | |
| 428 typedef void* FPDFEMB_DOCUMENT; | |
| 429 | |
| 430 // Function: FPDFEMB_StartLoadDocument | |
| 431 // Start loading a PDF document | |
| 432 // Parameters: | |
| 433 // file - Pointer to file access structure
. | |
| 434 // This structure must be k
ept valid as long as the document is open. | |
| 435 // password - Pointer to a zero-terminated byt
e string, for the password. | |
| 436 // Or NULL for no password. | |
| 437 // document - Receiving the document handle | |
| 438 // pause - A callback mechanism allowing th
e document loading process | |
| 439 // to be paused before it's
finished. This can be NULL if you | |
| 440 // don't want to pause. | |
| 441 // Return Value: | |
| 442 // FPDFERR_SUCCESS: document successfully loaded. | |
| 443 // FPDFERR_TOBECONTINUED: The document loading can't be fin
ished now. | |
| 444 // See comments below. | |
| 445 // FPDFERR_PASSWORD: incorrect password. | |
| 446 // FPDFERR_FORMAT: not a PDF or corrupted PDF. | |
| 447 // FPDFERR_FILE: file access error. | |
| 448 // FPDFERR_MEMORY: out of memory. | |
| 449 // Comments: | |
| 450 // Document loading is a progressive process. It might take
a long time to | |
| 451 // load a document, especiall when a file is corrupted, FPD
FEMB will try to | |
| 452 // recover the document contents by scanning the whole file
. If "pause" parameter | |
| 453 // is provided, this function may return FPDFERR_TOBECONTIN
UED any time during | |
| 454 // the document loading. | |
| 455 // | |
| 456 // When FPDFERR_TOBECONTINUED is returned, the "document" p
arameter will | |
| 457 // still receive a valid document handle, however, no furth
er operations can | |
| 458 // be performed on the document, except the "FPDFEMB_Contin
eLoadDocument" function | |
| 459 // call, which resume the document loading. | |
| 460 // | |
| 461 FPDFEMB_RESULT FPDFEMB_StartLoadDocument(FPDFEMB_FILE_ACCESS* file, const char*
password, | |
| 462 FPDFEMB_
DOCUMENT* document, FPDFEMB_PAUSE* pause); | |
| 463 | |
| 464 // Function: FPDFEMB_ContinueLoadDocument | |
| 465 // Continue loading a PDF document | |
| 466 // Parameters: | |
| 467 // document - Document handle returned by FPDF
EMB_StartLoadDocument function | |
| 468 // pause - A callback mechanism allowing th
e document loading process | |
| 469 // to be paused before it's
finished. This can be NULL if you | |
| 470 // don't want to pause. | |
| 471 // Return Value: | |
| 472 // FPDFERR_SUCCESS: document successfully loaded. | |
| 473 // FPDFERR_TOBECONTINUED: The document loading can't be fin
ished now. | |
| 474 // Further call to this function is needed. | |
| 475 // FPDFERR_PASSWORD: incorrect password. | |
| 476 // FPDFERR_FORMAT: not a PDF or corrupted PDF. | |
| 477 // FPDFERR_FILE: file access error. | |
| 478 // FPDFERR_MEMORY: out of memory. | |
| 479 // FPDFERR_STATUS: document already loaded. | |
| 480 // FPDFERR_PARAM: invalid parameter (like NULL document han
dle) | |
| 481 // | |
| 482 FPDFEMB_RESULT FPDFEMB_ContinueLoadDocument(FPDFEMB_DOCUMENT document, FPDFEMB_P
AUSE* pause); | |
| 483 | |
| 484 // Function: FPDFEMB_CloseDocument | |
| 485 // Close a PDF document and free all associated resources | |
| 486 // Parameters: | |
| 487 // document - Document handle | |
| 488 // Return Value: | |
| 489 // Error code. FPDFERR_SUCCESS for success. | |
| 490 // | |
| 491 FPDFEMB_RESULT FPDFEMB_CloseDocument(FPDFEMB_DOCUMENT document); | |
| 492 | |
| 493 // Function: Get page count | |
| 494 // Get number of pages in the document | |
| 495 // Parameters: | |
| 496 // document - Document handle | |
| 497 // Return Value: | |
| 498 // Number of pages. | |
| 499 // | |
| 500 int FPDFEMB_GetPageCount(FPDFEMB_DOCUMENT document); | |
| 501 | |
| 502 // Function: FPDFEMB_SetFileBufferSize | |
| 503 // Set size of internal buffer used to read from source fil
e. | |
| 504 // Parameters: | |
| 505 // size - Number of bytes | |
| 506 // Return Value: | |
| 507 // None. | |
| 508 // Comments: | |
| 509 // Currently FPDFEMB uses 512 bytes as default buffer size.
The new buffer size | |
| 510 // takes effect next time you call FPDFEMB_StartLoadDocumen
t. | |
| 511 // | |
| 512 void FPDFEMB_SetFileBufferSize(int size); | |
| 513 | |
| 514 /*******************************************************************************
************* | |
| 515 **** | |
| 516 **** Page Basic Operations | |
| 517 **** | |
| 518 ********************************************************************************
************/ | |
| 519 | |
| 520 typedef void* FPDFEMB_PAGE; | |
| 521 | |
| 522 // Function: FPDFEMB_LoadPage | |
| 523 // Load a page | |
| 524 // Parameters: | |
| 525 // document - Document handle | |
| 526 // index - Page index, starting from zero | |
| 527 // page - Receiving the loaded page handle
r | |
| 528 // Return Value: | |
| 529 // Error code, or FPDFERR_SUCCESS for success. | |
| 530 // | |
| 531 FPDFEMB_RESULT FPDFEMB_LoadPage(FPDFEMB_DOCUMENT document, int index, FPDFEMB_PA
GE* page); | |
| 532 | |
| 533 // Function: FPDFEMB_ClosePage | |
| 534 // Close a page and release all related resources | |
| 535 // Parameters: | |
| 536 // page - Page handle | |
| 537 // Return Value: | |
| 538 // Error code, or FPDFERR_SUCCESS for success. | |
| 539 // | |
| 540 FPDFEMB_RESULT FPDFEMB_ClosePage(FPDFEMB_PAGE page); | |
| 541 | |
| 542 // Function: FPDFEMB_GetPageSize | |
| 543 // Get size of a page | |
| 544 // Parameters: | |
| 545 // page - Page handle | |
| 546 // width - Receiving page width, in hundred
th of points | |
| 547 // height - Receiving page height, in hundre
dth of points | |
| 548 // Return Value: | |
| 549 // Error code, or FPDFERR_SUCCESS for success | |
| 550 // | |
| 551 FPDFEMB_RESULT FPDFEMB_GetPageSize(FPDFEMB_PAGE page, int* width, int* height); | |
| 552 | |
| 553 // Structure: FPDFEMB_RECT | |
| 554 // Rectangle area in device or page coordination system | |
| 555 // | |
| 556 struct FPDFEMB_RECT | |
| 557 { | |
| 558 // For device system, coordinations are measured in pixels; | |
| 559 // For page system, coordinations are measured in hundredth of points. | |
| 560 int left; | |
| 561 int top; | |
| 562 int right; | |
| 563 int bottom; | |
| 564 }; | |
| 565 | |
| 566 // Function: FPDFEMB_GetPageBBox | |
| 567 // Get displayable area (bounding box) of a page | |
| 568 // Parameters: | |
| 569 // page - Page handle | |
| 570 // rect - Pointer to a structure receiving
the rectangle | |
| 571 // Return Value: | |
| 572 // Error code, or FPDFERR_SUCCESS for success | |
| 573 // | |
| 574 FPDFEMB_RESULT FPDFEMB_GetPageBBox(FPDFEMB_PAGE page, FPDFEMB_RECT* rect); | |
| 575 | |
| 576 /*******************************************************************************
************* | |
| 577 **** | |
| 578 **** Page Parsing | |
| 579 **** | |
| 580 ********************************************************************************
************/ | |
| 581 | |
| 582 // Function: FPDFEMB_StartParse | |
| 583 // Start parsing a page, so it can get rendered or searched | |
| 584 // Parameters: | |
| 585 // page - Page handle | |
| 586 // text_only - flag for parsing texts only (use
d for searching) | |
| 587 // pause - A structure that can pause the p
arsing process. | |
| 588 // Or NULL if you don't wan
t to pause the process. | |
| 589 // Return Value: | |
| 590 // FPDFERR_SUCCESS: parsing successfully finished; | |
| 591 // FPDFERR_TOBECONTINUED: parsing started successfully, but
not finished; | |
| 592 // FPDFERR_STATUS: page already parsed, or parsing already
started. | |
| 593 // Other return value: error code. | |
| 594 // Comments: | |
| 595 // Parsing is a progressive process. This function starts t
he parsing process, | |
| 596 // and may return before parsing is finished, if a pause st
ructure is provided. | |
| 597 // | |
| 598 // Application should call FPDFEMB_ContinueParse repeatedly
to finish the parsing | |
| 599 // when return value is FPDFERR_TOBECONTINUED. | |
| 600 // | |
| 601 // There can be only one parsing procedure active for a pag
e, and if a page | |
| 602 // has already been parsed, you can't start a parsing again
. | |
| 603 // | |
| 604 FPDFEMB_RESULT FPDFEMB_StartParse(FPDFEMB_PAGE page, FPDFEMB_BOOL text_only, | |
| 605
FPDFEMB_PAUSE* pause); | |
| 606 | |
| 607 // Function: FPDFEMB_ContinueParse | |
| 608 // Continue the page parsing | |
| 609 // Parameters: | |
| 610 // page - Page handle | |
| 611 // pause - A structure that can pause the p
arsing process. | |
| 612 // Or NULL if you don't wan
t to pause the process. | |
| 613 // Return Value: | |
| 614 // FPDFERR_SUCCESS: parsing successfully finished; | |
| 615 // FPDFERR_TOBECONTINUED: parsing performed successfully, b
ut not finished; | |
| 616 // FPDFERR_STATUS: page already parsed (or parsing not star
ted). | |
| 617 // Other return value: error code. | |
| 618 // Comments: | |
| 619 // FPDFEMB_StartParse should be called before on the page. | |
| 620 // | |
| 621 // Application should call FPDFEMB_ContinueParse repeatedly
to finish the parsing | |
| 622 // when return value is FPDFERR_TOBECONTINUED. | |
| 623 // | |
| 624 FPDFEMB_RESULT FPDFEMB_ContinueParse(FPDFEMB_PAGE page, FPDFEMB_PAUSE* pause); | |
| 625 | |
| 626 // Function: FPDFEMB_GetParseProgress | |
| 627 // Get an estimated parsing progress in percentage | |
| 628 // Parameters: | |
| 629 // page - Page handle | |
| 630 // Return Value: | |
| 631 // An integer between 0 and 100 (inclusive) indicating the
parsing progress. | |
| 632 // The result is just a rough estimation. | |
| 633 // | |
| 634 int FPDFEMB_GetParseProgress(FPDFEMB_PAGE page); | |
| 635 | |
| 636 /*******************************************************************************
************* | |
| 637 **** | |
| 638 **** Page Rendering | |
| 639 **** | |
| 640 ********************************************************************************
************/ | |
| 641 | |
| 642 typedef void* FPDFEMB_BITMAP; | |
| 643 | |
| 644 // Function: FPDFEMB_StartQuickDraw | |
| 645 // Start drawing a quick preview of a page | |
| 646 // Parameters: | |
| 647 // dib - DIB handle, as the rende
ring device | |
| 648 // page - Page handle. The page has to be
parsed first. | |
| 649 // start_x - Left pixel position of the displ
ay area in the device coordination | |
| 650 // start_y - Top pixel position of the displa
y area in the device coordination | |
| 651 // size_x - Horizontal size (in pixels) for
displaying the page | |
| 652 // size_y - Vertical size (in pixels) for di
splaying the page | |
| 653 // rotate - Page orientation: 0 (normal), 1
(rotated 90 degrees clockwise), | |
| 654 // 2 (rotated 180 d
egrees), 3 (rotated 90 degrees counter-clockwise). | |
| 655 // flags - Reserved, must be zero. | |
| 656 // pause - Pointer to a structure that can
pause the rendering process. | |
| 657 // Can be NULL if no pausin
g is needed. | |
| 658 // Return Value: | |
| 659 // FPDFERR_SUCCESS: quickdraw successly finished; | |
| 660 // FPDFERR_TOBECONTINUED: quickdraw started successfully, b
ut not finished. | |
| 661 // FPDFEMB_ContinueQuickDra
w needs to be called to finish the quickdraw; | |
| 662 // FPDFERR_STATUS: quickdraw already in progress, or page n
ot parsed; | |
| 663 // Other return value: error code. | |
| 664 // Comments: | |
| 665 // It's often useful to present user a quick preview of a p
age, right after the | |
| 666 // page is parsed. This preview renders only a limited set
of easy features in the | |
| 667 // page, so it'll be rather quick to finish this process. | |
| 668 // | |
| 669 FPDFEMB_RESULT FPDFEMB_StartQuickDraw(FPDFEMB_BITMAP dib, FPDFEMB_PAGE page, | |
| 670 int start_x, int start_y
, int size_x, int size_y, int rotate, | |
| 671 int flags, FPDFEMB_PAUSE
* pause); | |
| 672 | |
| 673 // Function: FPDFEMB_ContinueQuickDraw | |
| 674 // Continue a quick draw processing | |
| 675 // Parameters: | |
| 676 // page - Page handle. The page has to be
parsed first. | |
| 677 // pause - Pointer to a structure that can
pause the rendering process. | |
| 678 // Can be NULL if no pausin
g is needed. | |
| 679 // Return Value: | |
| 680 // FPDFERR_SUCCESS: quickdraw successly finished; | |
| 681 // FPDFERR_TOBECONTINUED: quickdraw started successfully, b
ut not finished. | |
| 682 // more calls to this funct
ion needed to finish the quickdraw; | |
| 683 // FPDFERR_STATUS: quickdraw not started yet; | |
| 684 // Other return value: error code. | |
| 685 // | |
| 686 FPDFEMB_RESULT FPDFEMB_ContinueQuickDraw(FPDFEMB_PAGE page, FPDFEMB_PAUSE* pause
); | |
| 687 | |
| 688 #define FPDFEMB_ANNOT 0x01 // Set if annotations ar
e to be rendered | |
| 689 #define FPDFEMB_LCD_TEXT 0x02 // Set if using text ren
dering optimized for LCD display | |
| 690 #define FPDFEMB_BGR_STRIPE 0x04 // Set if the device is
using BGR LCD stripe | |
| 691 | |
| 692 // Function: FPDFEMB_StartRender | |
| 693 // Start rendering of a page. | |
| 694 // Parameter: | |
| 695 // dib - DIB handle, as the rende
ring device | |
| 696 // page - Page handle. The page has to be
parsed first. | |
| 697 // start_x - Left pixel position of the displ
ay area in the device coordination | |
| 698 // start_y - Top pixel position of the displa
y area in the device coordination | |
| 699 // size_x - Horizontal size (in pixels) for
displaying the page | |
| 700 // size_y - Vertical size (in pixels) for di
splaying the page | |
| 701 // rotate - Page orientation: 0 (normal), 1
(rotated 90 degrees clockwise), | |
| 702 // 2 (rotated 180 d
egrees), 3 (rotated 90 degrees counter-clockwise). | |
| 703 // flags - 0 for normal display, or combina
tion of flags defined above | |
| 704 // clip - Pointer to clip rectangle (in DI
B device coordinations), | |
| 705 // or NULL if no clipping n
eeded. | |
| 706 // pause - Pointer to a structure that can
pause the rendering process. | |
| 707 // Can be NULL if no pausin
g is needed. | |
| 708 // Return Value: | |
| 709 // FPDFERR_SUCCESS: rendering successfully finished; | |
| 710 // FPDFERR_TOBECONTINUED: rendering started successfully, b
ut not finished; | |
| 711 // Other return value: error code. | |
| 712 // Comments: | |
| 713 // Rendering is a progressive process. This function starts
the rendering process, | |
| 714 // and may return before rendering is finished, if a pause
structure is provided. | |
| 715 // | |
| 716 // Application should call FPDFEMB_ContinueRender repeatedl
y to finish the rendering | |
| 717 // when return value is FPDFERR_TOBECONTINUED. | |
| 718 // | |
| 719 // There can be only one rendering procedure for a page at
any time. And rendering | |
| 720 // can be started over and over again for the same page. If
a page rendering is already | |
| 721 // active, starting another one will cancel the previous re
ndering. | |
| 722 // | |
| 723 // Rendering of a page doesn't draw the page background, th
erefore, you usually need | |
| 724 // to draw the background in the DIB yourself. | |
| 725 // | |
| 726 FPDFEMB_RESULT FPDFEMB_StartRender(FPDFEMB_BITMAP dib, FPDFEMB_PAGE page, | |
| 727 int start_x, int start_y, int si
ze_x, int size_y, int rotate, int flags, | |
| 728 FPDFEMB_RECT* clip, FPDFEMB_PAUS
E* pause); | |
| 729 | |
| 730 // Function: FPDFEMB_ContinueRender | |
| 731 // Continue the page rendering | |
| 732 // Parameters: | |
| 733 // page - Page handle | |
| 734 // pause - Pointer to a structure that can
pause the rendering process. | |
| 735 // Can be NULL if no pausin
g is needed. | |
| 736 // Return Value: | |
| 737 // FPDFERR_SUCCESS: rendering successfully finished. | |
| 738 // FPDFERR_TOBECONTINUED: rendering needs to be continued; | |
| 739 // Other return value: error code. | |
| 740 // Comments: | |
| 741 // This function may return any time when the pause interfa
ce indicates | |
| 742 // a pause is needed. Application can call FPDFEMB_Continue
Render any number | |
| 743 // of times, until FPDFERR_TOBECONTINUED is not returned. | |
| 744 // | |
| 745 FPDFEMB_RESULT FPDFEMB_ContinueRender(FPDFEMB_PAGE page, FPDFEMB_PAUSE* pause); | |
| 746 | |
| 747 // Function: FPDFEMB_GetRenderProgress | |
| 748 // Get an estimated rendering progress in percentage | |
| 749 // Parameters: | |
| 750 // page - Page handle | |
| 751 // Return Value: | |
| 752 // An integer between 0 and 100 (inclusive) indicating the
rendering progress. | |
| 753 // The result is just a rough estimation. | |
| 754 // If the rendering just finished, this function will retur
n 0. | |
| 755 // | |
| 756 int FPDFEMB_GetRenderProgress(FPDFEMB_PAGE page); | |
| 757 | |
| 758 // Function: FPDFEMB_SetHalftoneLimit | |
| 759 // Set pixel count limit for using halftone when display im
age | |
| 760 // Parameter: | |
| 761 // limit - Number of pixels for the limit | |
| 762 // Return Value: | |
| 763 // None. | |
| 764 // Comments: | |
| 765 // By default, FPDFEMB displays all bitmaps using downsampi
ng, which means | |
| 766 // if the image is shrinked onto screen, only part of pixel
s will be picked | |
| 767 // and displayed. This saves a lot of calculation, especial
ly for big images | |
| 768 // with millions of pixels. However the display quality can
be bad. In order to | |
| 769 // reach a balance between performance and quality, applica
tion can use this | |
| 770 // function to set a limit, if number of pixels in an image
is more than this | |
| 771 // limit, then FPDFEMB will use downsampling for quick draw
ing, otherwise, if | |
| 772 // the image has less pixels, FPDFEMB will use halftoning f
or better quality. | |
| 773 // | |
| 774 void FPDFEMB_SetHalftoneLimit(int limit); | |
| 775 | |
| 776 /*******************************************************************************
************* | |
| 777 **** | |
| 778 **** Coordination Conversion | |
| 779 **** | |
| 780 ********************************************************************************
************/ | |
| 781 | |
| 782 // Structure: FPDFEMB_POINT | |
| 783 // A point in device or page coordination system | |
| 784 // | |
| 785 struct FPDFEMB_POINT | |
| 786 { | |
| 787 // For device system, coordinations are measured in pixels; | |
| 788 // For page system, coordinations are measured hundredth of points. | |
| 789 int x; | |
| 790 int y; | |
| 791 }; | |
| 792 | |
| 793 // Function: FPDFEMB_DeviceToPagePoint, FPDFEMB_DeviceToPageRect | |
| 794 // Convert the device coordinations of a point or a rectang
le to page coordinations. | |
| 795 // Parameters: | |
| 796 // page - Handle to the page. Returned by
FPDFEMB_LoadPage function. | |
| 797 // start_x - Left pixel position of the displ
ay area in the device coordination | |
| 798 // start_y - Top pixel position of the displa
y area in the device coordination | |
| 799 // size_x - Horizontal size (in pixels) for
displaying the page | |
| 800 // size_y - Vertical size (in pixels) for di
splaying the page | |
| 801 // rotate - Page orientation: 0 (normal), 1
(rotated 90 degrees clockwise), | |
| 802 // 2 (rotated 180 d
egrees), 3 (rotated 90 degrees counter-clockwise). | |
| 803 // point - A point structure with device co
ordinations upon the call, | |
| 804 // also receiving the resul
t page coordinations. | |
| 805 // rect - A rectangle structure with devic
e coordinations upon the call, | |
| 806 // also receiving the resul
t page coordinations. | |
| 807 // Return value: | |
| 808 // None. | |
| 809 // Comments: | |
| 810 // The page coordination system has its origin at left-bott
om corner of the page, | |
| 811 // with X axis goes along the bottom side to the right, and
Y axis goes along the | |
| 812 // left side upward. No matter how you zoom, scroll, or rot
ate a page, a particular | |
| 813 // element (like text or image) on the page should always h
ave the same coordination | |
| 814 // values in the page coordination system. | |
| 815 // | |
| 816 // The device coordination system is device dependant. For
bitmap device, its origin | |
| 817 // is at left-top corner of the window. You must make sure
the start_x, start_y, size_x, | |
| 818 // size_y and rotate parameters have exactly same values as
you used in | |
| 819 // FPDFEMB_StartRender() function call. | |
| 820 // | |
| 821 // For rectangle conversion, the result rectangle is always
"normalized", meaning for | |
| 822 // page coordinations, left is always smaller than right, b
ottom is smaller than top. | |
| 823 // | |
| 824 void FPDFEMB_DeviceToPagePoint(FPDFEMB_PAGE page, | |
| 825 int start_x, int start_y, int si
ze_x, int size_y, int rotate, | |
| 826 FPDFEMB_POINT* point); | |
| 827 | |
| 828 void FPDFEMB_DeviceToPageRect(FPDFEMB_PAGE page, | |
| 829 int start_x, int start_y, int si
ze_x, int size_y, int rotate, | |
| 830 FPDFEMB_RECT* rect); | |
| 831 | |
| 832 // Function: FPDFEMB_PageToDevicePoint, FPDFEMB_PageToDeviceRect | |
| 833 // Convert the page coordinations of a point or a rectangle
to device coordinations. | |
| 834 // Parameters: | |
| 835 // page - Handle to the page. Returned by
FPDFEMB_LoadPage function. | |
| 836 // start_x - Left pixel position of the displ
ay area in the device coordination | |
| 837 // start_y - Top pixel position of the displa
y area in the device coordination | |
| 838 // size_x - Horizontal size (in pixels) for
displaying the page | |
| 839 // size_y - Vertical size (in pixels) for di
splaying the page | |
| 840 // rotate - Page orientation: 0 (normal), 1
(rotated 90 degrees clockwise), | |
| 841 // 2 (rotated 180 d
egrees), 3 (rotated 90 degrees counter-clockwise). | |
| 842 // point - A point structure with page coor
dinations upon the call, | |
| 843 // also receiving the resul
t device coordinations. | |
| 844 // rect - A rectangle structure with page
coordinations upon the call, | |
| 845 // also receiving the resul
t device coordinations. | |
| 846 // Return value: | |
| 847 // None | |
| 848 // Comments: | |
| 849 // For rectangle conversion, the result rectangle is always
"normalized", meaning for | |
| 850 // device coordinations, left is always smaller than right,
top is smaller than bottom. | |
| 851 // | |
| 852 void FPDFEMB_PageToDevicePoint(FPDFEMB_PAGE page, | |
| 853 int start_x, int start_y, int si
ze_x, int size_y, int rotate, | |
| 854 FPDFEMB_POINT* point); | |
| 855 | |
| 856 void FPDFEMB_PageToDeviceRect(FPDFEMB_PAGE page, | |
| 857 int start_x, int start_y, int si
ze_x, int size_y, int rotate, | |
| 858 FPDFEMB_RECT* rect); | |
| 859 | |
| 860 /*******************************************************************************
************* | |
| 861 **** | |
| 862 **** Text Search | |
| 863 **** | |
| 864 ********************************************************************************
************/ | |
| 865 | |
| 866 // Search flags for FPDFEMB_FindFirst function | |
| 867 #define FPDFEMB_MATCHCASE 1 // whether matching case | |
| 868 #define FPDFEMB_MATCHWHOLEWORD 2 // whether matching whole word | |
| 869 #define FPDFEMB_CONSECUTIVE 4 // whether matching cons
ecutively (for example, "CC" will | |
| 870
// match twice in "CCC"). | |
| 871 | |
| 872 // Function: FPDFEMB_FindFirst | |
| 873 // Find first occurance of a pattern string in a page | |
| 874 // Parameters: | |
| 875 // page - Page handle. | |
| 876 // pattern - A zero-terminated unicode string
to be found. | |
| 877 // from_last - Whether we start from the end of
page | |
| 878 // flags - Search flags, see above defined
constants | |
| 879 // Return Value: | |
| 880 // Error code, or FPDFERR_SUCCESS for success. | |
| 881 // Is not found, FPDFERR_NOTFOUND is returned. | |
| 882 // Comments: | |
| 883 // A page must be parsed first before it can be searched. | |
| 884 // There can be only one search in progress for a page. A n
ew search will | |
| 885 // cancel the previous one. | |
| 886 // | |
| 887 // IMPORTANT: this function is now obsolete and kept for ba
ck compatibility | |
| 888 // only, please use FPDFEMB_FindFrom function below. | |
| 889 // | |
| 890 FPDFEMB_RESULT FPDFEMB_FindFirst(FPDFEMB_PAGE page, const FPDFEMB_WCHAR* pattern
, | |
| 891 FPDFEMB_BOOL fr
om_last, unsigned int flags); | |
| 892 | |
| 893 // Function: FPDFEMB_FindFrom | |
| 894 // Find first occurance of a pattern string in a page, from
a particular position | |
| 895 // Parameters: | |
| 896 // page - Page handle. | |
| 897 // pattern - A zero-terminated unicode string
to be found. | |
| 898 // pos - The position, returned f
rom FPDFEMB_GetSearchPos. | |
| 899 // Or 0 from the beginning
of page, -1 from the end of page. | |
| 900 // flags - Search flags, see above defined
constants | |
| 901 // Return Value: | |
| 902 // Error code, or FPDFERR_SUCCESS for success. | |
| 903 // Is not found, FPDFERR_NOTFOUND is returned. | |
| 904 // Comments: | |
| 905 // A page must be parsed first before it can be searched. | |
| 906 // There can be only one search in progress for a page. A n
ew search will | |
| 907 // cancel the previous one. | |
| 908 // | |
| 909 FPDFEMB_RESULT FPDFEMB_FindFrom(FPDFEMB_PAGE page, const FPDFEMB_WCHAR* pattern,
| |
| 910 int pos, unsign
ed int flags); | |
| 911 | |
| 912 // Function: FPDFEMB_FindNext | |
| 913 // Find next occurance of a search | |
| 914 // Parameters: | |
| 915 // page - Page handle. | |
| 916 // FPDFEMB_FindFirst must b
e called for this page first. | |
| 917 // Return Value: | |
| 918 // Error code, or FPDFERR_SUCCESS for success. | |
| 919 // Is not found, FPDFERR_NOTFOUND is returned. | |
| 920 // | |
| 921 FPDFEMB_RESULT FPDFEMB_FindNext(FPDFEMB_PAGE page); | |
| 922 | |
| 923 // Function: FPDFEMB_FindPrev | |
| 924 // Find previous occurance of a search | |
| 925 // Parameters: | |
| 926 // page - Page handle. | |
| 927 // FPDFEMB_FindFirst must b
e called for this page first. | |
| 928 // Return Value: | |
| 929 // Error code, or FPDFERR_SUCCESS for success. | |
| 930 // Is not found, FPDFERR_NOTFOUND is returned. | |
| 931 // | |
| 932 FPDFEMB_RESULT FPDFEMB_FindPrev(FPDFEMB_PAGE page); | |
| 933 | |
| 934 // Function: FPDFEMB_CountFoundRects | |
| 935 // Get number of rectangles for last found result | |
| 936 // Parameters: | |
| 937 // page - Page handle. | |
| 938 // Return Value: | |
| 939 // Number of rectangles for last found result. 0 for not fo
und or failure. | |
| 940 // | |
| 941 int FPDFEMB_CountFoundRects(FPDFEMB_PAGE page); | |
| 942 | |
| 943 // Function: FPDFEMB_GetFoundRect | |
| 944 // Get a particular found rectangle | |
| 945 // Parameters: | |
| 946 // page - Page handle. | |
| 947 // index - Zero-based index for the rectang
le. | |
| 948 // rect - Receiving the result rectangle,
in hundredth of points | |
| 949 // Return Value: | |
| 950 // Error code, or FPDFERR_SUCCESS for success. | |
| 951 // Comments: | |
| 952 // Application should always call FPDFEMB_CountFoundRects f
irst to get | |
| 953 // number of rectangles, then use this function to get each
rectangle. | |
| 954 // | |
| 955 // The returned rectangle uses page coordination system. | |
| 956 // | |
| 957 FPDFEMB_RESULT FPDFEMB_GetFoundRect(FPDFEMB_PAGE page, int index, FPDFEMB_RECT*
rect); | |
| 958 | |
| 959 // Function: FPDFEMB_GetSearchPos | |
| 960 // Return position of current search result | |
| 961 // Parameters: | |
| 962 // page - Page handle. | |
| 963 // Return Value: | |
| 964 // Zero based character index for the current search result
. -1 if not found. | |
| 965 // | |
| 966 int FPDFEMB_GetSearchPos(FPDFEMB_PAGE page); | |
| 967 | |
| 968 // Function: FPDFEMB_QuickSearch | |
| 969 // Search a pattern in a page quickly, without the page to
be parsed | |
| 970 // Parameters: | |
| 971 // document - Document handle returned by FPDF
EMB_StartLoadDocument function | |
| 972 // page_index - Zero-based index of the page | |
| 973 // pattern - A zero-terminated unicode string
to be found. | |
| 974 // case_sensitive - Non-zero for case-sensitive sear
ching, zero for case-insensitive | |
| 975 // Return Value: | |
| 976 // FPDFERR_SUCCESS if pattern found, FPDFERR_NOTFOUND if pa
ttern not found. | |
| 977 // Otherwise error code is returned. | |
| 978 // Comments: | |
| 979 // This function does a rough and quick search in a page, b
efore the page is loaded. | |
| 980 // The quick search will not generate an exact result sayin
g where the pattern is | |
| 981 // found, and, it might be possible if a quick search resul
t is "pattern found", and | |
| 982 // a real search for the same pattern, in the same page, wi
ll result in "not found". | |
| 983 // | |
| 984 // However, if quick search doesn't find a pattern in a pag
e, then we can be sure the | |
| 985 // pattern won't be found in this page when we do a real se
arch. So, this function is | |
| 986 // very useful when we search in a multiple-page document,
and we want to quickly skip | |
| 987 // those pages in which the pattern can't possibly be found
. | |
| 988 // | |
| 989 FPDFEMB_RESULT FPDFEMB_QuickSearch(FPDFEMB_DOCUMENT document, int page_index, | |
| 990 const FPDFEMB
_WCHAR* pattern, int case_sensitive); | |
| 991 | |
| 992 /*******************************************************************************
************* | |
| 993 **** | |
| 994 **** Text Information | |
| 995 **** | |
| 996 ********************************************************************************
************/ | |
| 997 | |
| 998 // Function: FPDFEMB_GetCharCount | |
| 999 // Get number of characters in the page | |
| 1000 // Parameters: | |
| 1001 // page - Page handle | |
| 1002 // count - Receiving number of characters | |
| 1003 // Return Value: | |
| 1004 // Error code, or FPDFERR_SUCCESS for success. | |
| 1005 // | |
| 1006 FPDFEMB_RESULT FPDFEMB_GetCharCount(FPDFEMB_PAGE page, int* count); | |
| 1007 | |
| 1008 // Structure: FPDFEMB_CHAR_INFO | |
| 1009 // Character information. | |
| 1010 struct FPDFEMB_CHAR_INFO { | |
| 1011 int unicode; // Unicode for the character. 0
if not available. | |
| 1012 // Space and new line ch
arcters (U+0020 and U+000A) may be generated | |
| 1013 // according to the text
formatting. | |
| 1014 FPDFEMB_POINT origin; // X/Y position for the character origin, in hun
dredth of points | |
| 1015 FPDFEMB_RECT bbox; // Bounding box of the character, in hundredth o
f points | |
| 1016 // Maybe an empty box (l
eft == right or top == bottom). | |
| 1017 }; | |
| 1018 | |
| 1019 // Function: FPDFEMB_GetCharInfo | |
| 1020 // Get character information | |
| 1021 // Parameters: | |
| 1022 // page - Page handle | |
| 1023 // index - Character index, starting from z
ero | |
| 1024 // char_info - Receiving the character info | |
| 1025 // Return Value: | |
| 1026 // Error code, or FPDFERR_SUCCESS for success | |
| 1027 // Comments: | |
| 1028 // Application must call FPDFEMB_GetCharCount first before
it can call this function | |
| 1029 // for any particular characters. | |
| 1030 // | |
| 1031 FPDFEMB_RESULT FPDFEMB_GetCharInfo(FPDFEMB_PAGE page, int index, FPDFEMB_CHAR_IN
FO* char_info); | |
| 1032 | |
| 1033 // Function: FPDFEMB_GetCharIndexAtPos() | |
| 1034 // Get index of character nearest to a certain position on
the page | |
| 1035 // Parameters: | |
| 1036 // page - Page handle | |
| 1037 // x - X position in PDF page c
oordination system | |
| 1038 // y - Y position in PDF page c
oordination system | |
| 1039 // index - Pointer to an integer receiving
zero-based character index. | |
| 1040 // Return Value: | |
| 1041 // Error code, or FPDFERR_SUCCESS for success | |
| 1042 // Comments: | |
| 1043 // This function finds the character that's nearest to the
particular page position. | |
| 1044 // If there is no character, the output index will be -1. | |
| 1045 // | |
| 1046 FPDFEMB_RESULT FPDFEMB_GetCharIndexAtPos(FPDFEMB_PAGE page, double x, double y,
int* index); | |
| 1047 | |
| 1048 /*******************************************************************************
************* | |
| 1049 **** | |
| 1050 **** Device Independant Bitmap | |
| 1051 **** | |
| 1052 ********************************************************************************
************/ | |
| 1053 | |
| 1054 #define FPDFDIB_BGR 1 // 3 bytes per pixel, byte order: Blue,
Green, Red | |
| 1055 #define FPDFDIB_BGRx 2 // 4 bytes per pixel, byte order: Blue, Green, R
ed, not used | |
| 1056 #define FPDFDIB_BGRA 3 // 4 bytes per pixel, byte order: Blue, Green, R
ed, Alpha | |
| 1057 #define FPDFDIB_GRAY 4 // 1 byte per pixel (grayscale) | |
| 1058 | |
| 1059 // Function: FPDFEMB_CreateDIB | |
| 1060 // Create a DIB (Device Independant Bitmap) | |
| 1061 // Parameters: | |
| 1062 // width - Width pixels; | |
| 1063 // height - Height pixels; | |
| 1064 // format - Format type. See FPDFDIB_xxx con
stants | |
| 1065 // buffer - External buffer provided for the
DIB, | |
| 1066 // or NULL if new buffer is
to be allocated. | |
| 1067 // stride - Number of bytes for each scan li
ne, for external buffer only. | |
| 1068 // If not specified, 4-byte
alignment assumed. | |
| 1069 // dib - Receiving the created DI
B handle | |
| 1070 // Return Value: | |
| 1071 // Error code, or FPDFERR_SUCCESS for success | |
| 1072 // Comments: | |
| 1073 // If "buffer" parameter is not NULL, then the provided buf
fer must conform | |
| 1074 // to standard DIB format (see comments of FPDFEMB_GetDIBDa
ta function below). | |
| 1075 // | |
| 1076 // This function doesn't initialize the pixels inside the D
IB buffer. So if you | |
| 1077 // want to use the DIB to display a PDF page, you usually n
eed to initialize | |
| 1078 // the DIB to white background by youself. | |
| 1079 // | |
| 1080 FPDFEMB_RESULT FPDFEMB_CreateDIB(int width, int height, int format, | |
| 1081 void*
buffer, int stride, FPDFEMB_BITMAP* dib); | |
| 1082 | |
| 1083 // Function: FPDFEMB_DestroyDIB | |
| 1084 // Destroy a DIB | |
| 1085 // Parameters: | |
| 1086 // dib - DIB handle | |
| 1087 // Return Value: | |
| 1088 // Error code, or FPDFERR_SUCCESS for success | |
| 1089 // Comments: | |
| 1090 // If external buffer is used (specified in "buffer" parame
ter when calling | |
| 1091 // FPDFEMB_CreateDIB), the buffer will not be destroyed. | |
| 1092 // | |
| 1093 FPDFEMB_RESULT FPDFEMB_DestroyDIB(FPDFEMB_BITMAP dib); | |
| 1094 | |
| 1095 // Function: FPDFEMB_GetDIBWidth | |
| 1096 // Get width (in pixels) of a DIB | |
| 1097 // Parameters: | |
| 1098 // dib - DIB handle | |
| 1099 // Return Value: | |
| 1100 // DIB width in pixels. | |
| 1101 // | |
| 1102 int FPDFEMB_GetDIBWidth(FPDFEMB_BITMAP dib); | |
| 1103 | |
| 1104 // Function: FPDFEMB_GetDIBHeight | |
| 1105 // Get height (in pixels) of a DIB | |
| 1106 // Parameters: | |
| 1107 // dib - DIB handle | |
| 1108 // Return Value: | |
| 1109 // DIB height in pixels. | |
| 1110 // | |
| 1111 int FPDFEMB_GetDIBHeight(FPDFEMB_BITMAP dib); | |
| 1112 | |
| 1113 // Function: FPDFEMB_GetDIBData | |
| 1114 // Get data pointer to a DIB | |
| 1115 // Parameters: | |
| 1116 // dib - DIB handle | |
| 1117 // Return Value: | |
| 1118 // Pointer to the DIB data. | |
| 1119 // Comments: | |
| 1120 // DIB data are organized in scanlines, from top down. | |
| 1121 // | |
| 1122 void* FPDFEMB_GetDIBData(FPDFEMB_BITMAP dib); | |
| 1123 | |
| 1124 // Function: FPDFEMB_GetDIBStride | |
| 1125 // Get scan line stride of a DIB | |
| 1126 // Parameters: | |
| 1127 // dib - DIB handle | |
| 1128 // Return Value: | |
| 1129 // Number of bytes occupied by a scanline | |
| 1130 // | |
| 1131 int FPDFEMB_GetDIBStride(FPDFEMB_BITMAP dib); | |
| 1132 | |
| 1133 // Function: FPDFEMB_GetRotatedDIB | |
| 1134 // Swap X/Y dimensions of a DIB to generate a rotated new D
IB | |
| 1135 // Parameters: | |
| 1136 // dib - DIB handle | |
| 1137 // flip_x - Whether flip pixels on the desti
nation X dimension (left/right) | |
| 1138 // flip_y - Whether flip pixels on the desti
nation Y dimension (up/down) | |
| 1139 // result_dib - Receiving the result DIB handle | |
| 1140 // Return Value: | |
| 1141 // Error code, or FPDFERR_SUCCESS for success | |
| 1142 // | |
| 1143 FPDFEMB_RESULT FPDFEMB_GetRotatedDIB(FPDFEMB_BITMAP dib, | |
| 1144 FPDFEMB
_BOOL bFlipX, FPDFEMB_BOOL bFlipY, | |
| 1145 FPDFEMB
_BITMAP* result_dib); | |
| 1146 | |
| 1147 // Function: FPDFEMB_StretchDIB | |
| 1148 // Stretch a source DIB into another destination DIB | |
| 1149 // Parameters: | |
| 1150 // dest_dib - The destination DIB handle | |
| 1151 // dest_left - Left position in the destination
DIB | |
| 1152 // dest_top - Top position in the destination
DIB | |
| 1153 // dest_width - Destination width, in pixels. Ca
n be negative for horizontal flipping | |
| 1154 // dest_height - Destination height, in pixels. C
an be negative for vertical flipping | |
| 1155 // clip - Destination clipping rectangle,
or NULL for no clipping. | |
| 1156 // The coordinations are me
asured in destination bitmap. | |
| 1157 // src_dib - Source DIB handle. | |
| 1158 // interpol - Whether we use interpolation to
improve the result quality | |
| 1159 // Return Value: | |
| 1160 // Error code, or FPDFERR_SUCCESS for success | |
| 1161 // | |
| 1162 FPDFEMB_RESULT FPDFEMB_StretchDIB(FPDFEMB_BITMAP dest_dib, int dest_left, int de
st_top, | |
| 1163 int dest_width
, int dest_height, FPDFEMB_RECT* clip_rect, | |
| 1164 FPDFEMB_BITMAP
src_dib, FPDFEMB_BOOL interpol); | |
| 1165 | |
| 1166 // Function: FPDFEMB_TransformDIB | |
| 1167 // Transform a source DIB into another destination DIB | |
| 1168 // Parameters: | |
| 1169 // dest_dib - The destination DIB handle | |
| 1170 // clip - Destination clipping rectangle,
or NULL for no clipping. | |
| 1171 // The coordinations are me
asured in destination bitmap. | |
| 1172 // src_dib - Source DIB handle. | |
| 1173 // x - X coordination of the de
st origin | |
| 1174 // y - Y coordination of the de
st origin | |
| 1175 // xx - X distance of the dest X
vector | |
| 1176 // yx - Y distance of the dest X
vector | |
| 1177 // xy - X distance of the dest Y
vector | |
| 1178 // yy - Y distance of the dest Y
vector | |
| 1179 // interpol - Whether we use interpolation to
improve the result quality | |
| 1180 // Return Value: | |
| 1181 // Error code, or FPDFERR_SUCCESS for success | |
| 1182 // Comments: | |
| 1183 // All coordinations and distances are measured in destinat
ion bitmap system. | |
| 1184 // | |
| 1185 // This function places the bottom-left pixel of the image
at the destination | |
| 1186 // origin, then the bottom sideline along the destination X
vector, and left | |
| 1187 // sideline along the destination Y vector. | |
| 1188 // | |
| 1189 FPDFEMB_RESULT FPDFEMB_TransformDIB(FPDFEMB_BITMAP dest_dib, FPDFEMB_RECT* clip_
rect, | |
| 1190 FPDFEMB_BITMAP
src_dib, int x, int y, int xx, int yx, | |
| 1191 int xy, int yy
, FPDFEMB_BOOL interpol); | |
| 1192 | |
| 1193 /*******************************************************************************
************* | |
| 1194 **** | |
| 1195 **** Custom Font Handler and CJK Support | |
| 1196 **** | |
| 1197 ********************************************************************************
************/ | |
| 1198 | |
| 1199 // FPDFEMB comes with standard fonts for Latin characters. If your device is tar
geted to | |
| 1200 // Eastern Asian markets, then system fonts must be provided and registered with
FPDFEMB. | |
| 1201 // Depending on your device configuration, those system fonts might be in TrueTy
pe or Type1 | |
| 1202 // format, or some other non-standard compact format. For the first case, you sh
ould register | |
| 1203 // a font mapper so FPDFEMB can pick the right font file, and for the second cas
e, you | |
| 1204 // should register a glyph provider so FPDFEMB can get glyph bitmap for each cha
racter. | |
| 1205 | |
| 1206 #define FPDFEMB_CHARSET_DEFAULT 0 | |
| 1207 #define FPDFEMB_CHARSET_GB 936 | |
| 1208 #define FPDFEMB_CHARSET_BIG5 950 | |
| 1209 #define FPDFEMB_CHARSET_JIS 932 | |
| 1210 #define FPDFEMB_CHARSET_KOREA 949 | |
| 1211 #define FPDFEMB_CHARSET_UNICODE 1200 | |
| 1212 | |
| 1213 #define FPDFEMB_FONT_FIXEDPITCH 1 | |
| 1214 #define FPDFEMB_FONT_SERIF 2 | |
| 1215 #define FPDFEMB_FONT_SYMBOLIC 4 | |
| 1216 #define FPDFEMB_FONT_SCRIPT 8 | |
| 1217 #define FPDFEMB_FONT_NONSYMBOLIC 32 | |
| 1218 #define FPDFEMB_FONT_ITALIC 64 | |
| 1219 #define FPDFEMB_FONT_ALLCAP 0x10000 | |
| 1220 #define FPDFEMB_FONT_SMALLCAP 0x20000 | |
| 1221 #define FPDFEMB_FONT_FORCEBOLD 0x40000 | |
| 1222 | |
| 1223 // Structure: FPDFEMB_FONT_MAPPER | |
| 1224 // Defines interface for system font mapper. | |
| 1225 // | |
| 1226 struct FPDFEMB_FONT_MAPPER | |
| 1227 { | |
| 1228 // Interface: MapFont | |
| 1229 // Find font file path for a particular PDF font | |
| 1230 // Parameters: | |
| 1231 // mapper - Pointer to the FPDFEMB_FONT_MAPP
ER structure | |
| 1232 // name - Font name | |
| 1233 // charset - Charset ID (see above FPDFEMB_CH
ARSET_xxx constants) | |
| 1234 // flags - Font flags (see above FPDFEMB_FO
NT_xxx constants) | |
| 1235 // weight - Weight of the font. Range from 1
00 to 900. 400 is normal, | |
| 1236 // 700 is bold. | |
| 1237 // path - Receiving the full file path. Th
e buffer size is 512 bytes. | |
| 1238 // face_index - Receiving an zero-based index va
lue for the font face, if the | |
| 1239 // mapped font file is a "c
ollection" (meaning a number of faces | |
| 1240 // are stored in the same f
ile). If the font file is not a | |
| 1241 // collection, the index va
lue should be zero. | |
| 1242 // Return Value: | |
| 1243 // Non-zero for success, 0 for failure. | |
| 1244 // | |
| 1245 FPDFEMB_BOOL (*MapFont)(struct FPDFEMB_FONT_MAPPER* mapper, const cha
r* name, int charset, | |
| 1246 unsigned
int flags, int weight, | |
| 1247 char* pa
th, int* face_index); | |
| 1248 | |
| 1249 void* user; // A user pointer, used by the applicati
on | |
| 1250 }; | |
| 1251 | |
| 1252 // Function: FPDFEMB_SetFontMapper | |
| 1253 // Use a system font mapper (typically for Chinese/Japanese
/Korean charsets) | |
| 1254 // Parameters: | |
| 1255 // mapper - Pointer to FPDFEMB_FONT_MAPPER s
tructure. | |
| 1256 // Return Value: | |
| 1257 // Error code, or FPDFERR_SUCCESS for success | |
| 1258 // Comments: | |
| 1259 // This function is used with devices that come with one or
more system fonts, | |
| 1260 // and those fonts are in standard TT or T1 format. | |
| 1261 // | |
| 1262 FPDFEMB_RESULT FPDFEMB_SetFontMapper(FPDFEMB_FONT_MAPPER* mapper); | |
| 1263 | |
| 1264 // Structure: FPDFEMB_GLYPH_PROVIDER | |
| 1265 // Interface for providing glyph bitmap of non-latin charac
ters. | |
| 1266 // This is usually used for embedded devices with Chinese/J
apanese/Korean | |
| 1267 // fonts installed, but those fonts are not in TrueType or
Type1 format. | |
| 1268 // | |
| 1269 struct FPDFEMB_GLYPH_PROVIDER | |
| 1270 { | |
| 1271 // Interface: MapFont | |
| 1272 // Return an internal handle for a font | |
| 1273 // Parameters: | |
| 1274 // provider - Pointer to this structure | |
| 1275 // name - Font name | |
| 1276 // charset - Charset ID (see above FPDFEMB_CH
ARSET_xxx constants) | |
| 1277 // flags - Font flags (see above FPDFEMB_FO
NT_xxx constants) | |
| 1278 // weight - Weight of the font. Range from 1
00 to 900. 400 is normal, | |
| 1279 // 700 is bold. | |
| 1280 // Return Value: | |
| 1281 // An internal handle to the mapped font. If the embedded d
evice supports | |
| 1282 // multiple fonts, then this value can serve as an identifi
er to differentiate | |
| 1283 // among them. If the device supports only one font, then i
mplementation of | |
| 1284 // this function can simply return NULL. | |
| 1285 // | |
| 1286 void* (*MapFont)(struct FPDFEMB_GLYPH_PROVIDER* provider, const char*
name, int charset, | |
| 1287 unsigned
int flags, int weight); | |
| 1288 // Interface: GetGlyphBBox | |
| 1289 // Get glyph bounding box | |
| 1290 // Parameters: | |
| 1291 // provider - Pointer to this structure | |
| 1292 // font - Internal handle to the font. Ret
urned by MapFont interface. | |
| 1293 // unicode - Unicode of the character | |
| 1294 // CID - Adobe CID for this chara
cter. Or zero if not available. | |
| 1295 // bbox - Receiving the result bounding bo
x. See comments below. | |
| 1296 // Return Value: | |
| 1297 // None. | |
| 1298 // Comments: | |
| 1299 // The bounding box is measure in a glyph coordination syst
em, in which the | |
| 1300 // origin is set to character origin, and unit is set to on
e-thousandth of | |
| 1301 // "em size" (representing the font size). | |
| 1302 // | |
| 1303 // In most CJK fonts, all CJK characters (except some symbo
ls or western | |
| 1304 // characters) have same glyph bounding box: | |
| 1305 // left = 0, right = 1000, bottom = -220, top = 780. | |
| 1306 // | |
| 1307 // It's OK to return a box that's larger than the actual gl
yph box. | |
| 1308 // | |
| 1309 void (*GetGlyphBBox)(struct FPDFEMB_GLYPH_PROVIDER* provider, void* f
ont, | |
| 1310 FPDFEMB_
WCHAR unicode, unsigned short CID, | |
| 1311 FPDFEMB_
RECT* bbox); | |
| 1312 | |
| 1313 // Interface: GetGlyphBitmap | |
| 1314 // Get bitmap of a glyph | |
| 1315 // Parameters: | |
| 1316 // provider - Pointer to this structure | |
| 1317 // font - Internal handle to the font. Ret
urned by MapFont interface. | |
| 1318 // unicode - Unicode of the character | |
| 1319 // CID - Adobe CID for this chara
cter. Or zero if not available. | |
| 1320 // font_width - Width of the font em square, mea
sured in device units. | |
| 1321 // font_height - Height of the font em square, me
asured in device units. | |
| 1322 // left - Receiving the left offset, from
the character origin, of the | |
| 1323 // result glyph bitmap. Pos
itive value will move the bitmap to | |
| 1324 // the right side, negative
to the left. | |
| 1325 // top - Receiving the top offset
, from the character origin, of the | |
| 1326 // result glyph bitmap. Pos
itive value will move the bitmap upward, | |
| 1327 // negative downward. | |
| 1328 // bitmap_width - Receiving number of width pixels in the
result bitmap | |
| 1329 // bitmap_height - Receiving number of height pixels in the
result bitmap | |
| 1330 // buffer - Receiving a data buffer pointer,
allocated by the implementation. | |
| 1331 // See comments below. | |
| 1332 // stride - Receiving number of bytes per sc
anline, in the data buffer. | |
| 1333 // pdf_width - Width of the character specified
in PDF. It is measured in one- | |
| 1334 // thousandth of the font w
idth. It can be 0 if width not specified | |
| 1335 // in PDF. See comments bel
ow. | |
| 1336 // Return Value: | |
| 1337 // Non-zero for success. 0 for failure. In this case the gl
yph can not be displayed. | |
| 1338 // Comments: | |
| 1339 // The buffer should be allocated by implemenation. And it
must be allocated | |
| 1340 // using FPDFEMB_AllocMemory function. The result buffer wi
ll be destroyed by | |
| 1341 // FPDFEMB SDK, so implementation should not destroy it. | |
| 1342 // | |
| 1343 // The implementation should write "coverage" data into all
ocated buffer, one byte | |
| 1344 // for each pixel, from top scanline to bottom scanline, wi
thin each scan line, | |
| 1345 // from left pixel to right. Coverage 0 means the pixel is
outside the glyph, | |
| 1346 // coverage 255 means the pixel is inside the glyph. | |
| 1347 // | |
| 1348 // The "pdf_width" parameter can be used to scale the chara
cter in system font | |
| 1349 // horizontally to match the font width specified in PDF. F
or example, if we have | |
| 1350 // a PDF file which requires a character in half-width (pdf
_width is 500), but | |
| 1351 // in the system font the character has full-width (1000),
then the glyph provider | |
| 1352 // implementation should scale the font horizontally to hal
f of its original width. | |
| 1353 // | |
| 1354 FPDFEMB_BOOL (*GetGlyphBitmap)(struct FPDFEMB_GLYPH_PROVIDER* provider,
void* font, | |
| 1355 FPDFEMB_
WCHAR unicode, unsigned short CID, | |
| 1356 double f
ont_width, double font_height, int* left, int* top, | |
| 1357 int* bit
map_width, int* bitmap_height, | |
| 1358 void** b
uffer, int* stride, int pdf_width); | |
| 1359 | |
| 1360 void* user; // A user pointer, used by the applicati
on | |
| 1361 }; | |
| 1362 | |
| 1363 // Function: FPDFEMB_SetGlyphProvider | |
| 1364 // Make use of a glyph provider: generating glyph bitmap fo
r non-Latin characters | |
| 1365 // Parameters: | |
| 1366 // provider - Pointer to the glyph provider st
ructure. | |
| 1367 // This structure must stay
valid throughout usage of FPDFEMB module. | |
| 1368 // Return Value: | |
| 1369 // None. | |
| 1370 // Comments: | |
| 1371 // FPDFEMB embeds some standard fonts for Latin characters
and symbols, like | |
| 1372 // Times, Courier and Helvetica (Arial). For non-Latin char
acters, however, | |
| 1373 // FPDFEMB has to ask glyph provide for help. | |
| 1374 // | |
| 1375 // If an embedded device carries fonts for non-Latin charac
ter sets, especially | |
| 1376 // those for CJK markets, then the application can implemen
t a glyph provider, | |
| 1377 // allowing PDFs using non-embedded CJK fonts to be properl
y displayed. | |
| 1378 // | |
| 1379 void FPDFEMB_SetGlyphProvider(FPDFEMB_GLYPH_PROVIDER* provider); | |
| 1380 | |
| 1381 // Function: FPDFEMB_LoadCMap_GB | |
| 1382 // Function: FPDFEMB_LoadCMap_GB_Ext | |
| 1383 // Function: FPDFEMB_LoadCMap_CNS | |
| 1384 // Function: FPDFEMB_LoadCMap_Korean | |
| 1385 // Function: FPDFEMB_LoadCMap_Japan | |
| 1386 // Function: FPDFEMB_LoadCMap_Japan_Ext | |
| 1387 // Make use of character encoding maps embedded with FPDFEM
B | |
| 1388 // Parameters: | |
| 1389 // None. | |
| 1390 // Return Value: | |
| 1391 // None. | |
| 1392 // Comments: | |
| 1393 // These functions add character encoding data to your appl
ication. Each call | |
| 1394 // will increase the code size of your application. Total d
ata size for all | |
| 1395 // character sets is 151K bytes. | |
| 1396 void FPDFEMB_LoadCMap_GB(); | |
| 1397 void FPDFEMB_LoadCMap_GB_Ext(); // Load full code table for GB | |
| 1398 void FPDFEMB_LoadCMap_CNS(); | |
| 1399 void FPDFEMB_LoadCMap_Korea(); | |
| 1400 void FPDFEMB_LoadCMap_Japan(); | |
| 1401 void FPDFEMB_LoadCMap_Japan_Ext(); // Load full code table for Japan | |
| 1402 | |
| 1403 /*******************************************************************************
************* | |
| 1404 **** | |
| 1405 **** Document Information | |
| 1406 **** | |
| 1407 ********************************************************************************
************/ | |
| 1408 | |
| 1409 // Function: PDFEMB_GetDocInfoString | |
| 1410 // Get information string about the document, like creator,
modifcation date, etc. | |
| 1411 // Parameters: | |
| 1412 // document - Handle to the document | |
| 1413 // key - A byte string for the in
formation key. Currently can be one of the followings: | |
| 1414 // "Title", "Author", "Subj
ect", "Keywords", "Creator", "Producer", "CreationDate", | |
| 1415 // "ModDate", or some custo
m information key, if supported by the PDF file. | |
| 1416 // buffer - A buffer allocated by the applic
ation, or NULL. | |
| 1417 // bufsize - [IN/OUT] A pointer to a number i
ndicating the buffer size (number of bytes), | |
| 1418 // before this function cal
l. After return, this place will store | |
| 1419 // number of bytes used by
the output (including terminator). | |
| 1420 // Return Value: | |
| 1421 // Error code, or FPDFERR_SUCCESS for success | |
| 1422 // Comments: | |
| 1423 // The string is output in Unicode, using UTF-16LE format.
It's terminated by | |
| 1424 // two consecutive zero bytes. | |
| 1425 // | |
| 1426 // If the "buffer" parameter is NULL, then the "bufsize" pa
rameter will receive | |
| 1427 // number of bytes required to store the string (including
the two-byte terminator). | |
| 1428 // | |
| 1429 FPDFEMB_RESULT FPDFEMB_GetDocInfoString(FPDFEMB_DOCUMENT document, const char* k
ey, void* buffer, unsigned int* bufsize); | |
| 1430 | |
| 1431 /*******************************************************************************
************* | |
| 1432 **** | |
| 1433 **** Action (Destination) Information | |
| 1434 **** | |
| 1435 ********************************************************************************
************/ | |
| 1436 | |
| 1437 typedef void* FPDFEMB_ACTION; | |
| 1438 | |
| 1439 // Action types supported by FPDFEMB | |
| 1440 #define FPDFEMB_DEST_NONE 0 // No or unsuppo
rted destination | |
| 1441 #define FPDFEMB_DEST_PAGE 1 // A page inside
the same document | |
| 1442 #define FPDFEMB_DEST_DOC 2 // An external P
DF document | |
| 1443 #define FPDFEMB_DEST_URL 3 // An external U
RL | |
| 1444 #define FPDFEMB_ACTION_LAUNCH 4 // Launch an external fi
le or command | |
| 1445 | |
| 1446 // Zoom mode for destination | |
| 1447 #define FPDFEMB_ZOOM_NONE 0 // Zoom mode not
specified | |
| 1448 #define FPDFEMB_ZOOM_FACTOR 1 // Specific zoom
factor is used | |
| 1449 #define FPDFEMB_ZOOM_FITPAGE 2 // Fit the whole page on
screen | |
| 1450 #define FPDFEMB_ZOOM_FITWIDTH 3 // Fit width of the page
on screen | |
| 1451 #define FPDFEMB_ZOOM_FITHEIGHT 4 // Fit height of the pag
e on screen | |
| 1452 #define FPDFEMB_ZOOM_FITRECT 5 // Fit a particular rect
angle on screen | |
| 1453 #define FPDFEMB_ZOOM_FITCONTENT 6 // Fit whole content of
page on screen | |
| 1454 #define FPDFEMB_ZOOM_FITCONTENTW 7 // Fit content width of
page on screen | |
| 1455 #define FPDFEMB_ZOOM_FITCONTENTH 8 // Fit content height of
page on screen | |
| 1456 | |
| 1457 // Data structure for page destination | |
| 1458 struct FPDFEMB_PAGEDEST | |
| 1459 { | |
| 1460 int page_index; // Zero based in
dex for the page | |
| 1461 int zoom_mode; // See FPDFEMB_Z
OOM_xxx definition above | |
| 1462 int zoom_factor; // For FPDFEMB_ZOOM_FACT
OR only: the zoom factor (in percentage) | |
| 1463 FPDFEMB_RECT position; // Specify position inside the p
age. Depends on the zoom mode, | |
| 1464 // diffe
rent members of the rectangle are used: | |
| 1465 // FPDFE
MB_ZOOM_NONE: left, top | |
| 1466 // FPDFE
MB_ZOOM_FACTOR: left, top | |
| 1467 // FPDFE
MB_ZOOM_FITPAGE: none | |
| 1468 // FPDFE
MB_ZOOM_FITWIDTH: top | |
| 1469 // FPDFE
MB_ZOOM_FITHEIGHT: left | |
| 1470 // FPDFE
MB_ZOOM_FITRECT: left, top, bottom, right | |
| 1471 // FPDFE
MB_ZOOM_FITCONTENT: none | |
| 1472 // FPDFE
MB_ZOOM_FITCONTENTW: top | |
| 1473 // FPDFE
MB_ZOOM_FITCONTENTH: left | |
| 1474 }; | |
| 1475 | |
| 1476 // Data structure for document destination | |
| 1477 struct FPDFEMB_DOCDEST | |
| 1478 { | |
| 1479 FPDFEMB_PAGEDEST page_data; // page data | |
| 1480 char* file_name; // The file name, encode
d in original charset (maybe MBCS) | |
| 1481 }; | |
| 1482 | |
| 1483 // Data structure for URL destination | |
| 1484 struct FPDFEMB_URLDEST | |
| 1485 { | |
| 1486 char* url; // URL encoded in 7-bit
ASCII | |
| 1487 }; | |
| 1488 | |
| 1489 // Data structure for Launch action | |
| 1490 struct FPDFEMB_LAUNCHACTION | |
| 1491 { | |
| 1492 int new_window; // Whether a new
window should be opened | |
| 1493 char* file_name; // The file name, encode
d in original charset (maybe MBCS) | |
| 1494 }; | |
| 1495 | |
| 1496 // Function: FPDFEMB_Action_GetType | |
| 1497 // Get type of an action | |
| 1498 // Parameters: | |
| 1499 // document - Handle to the document | |
| 1500 // action - Handle to the action | |
| 1501 // dest_type - Pointer to an integer receiving
type of the destination. See the above | |
| 1502 // FPDFEMB_DEST_xxx definit
ions | |
| 1503 // data_size - Pointer to an integer receiving
data block size for the destination. | |
| 1504 // If this parameter is NUL
L, then data size won't be retrieved. | |
| 1505 // Comments: | |
| 1506 // Each different type of destination has different data st
ructure. The "data_size" result | |
| 1507 // indicates how many bytes is required to hold the destina
tion data structure. The application | |
| 1508 // can then allocate sufficient buffer and then call FPDFEM
B_Bookmark_GetDest function to | |
| 1509 // get the real data. | |
| 1510 // | |
| 1511 FPDFEMB_RESULT FPDFEMB_Action_GetType(FPDFEMB_DOCUMENT document, FPDFEMB_ACTION
action, int* dest_type, int* data_size); | |
| 1512 | |
| 1513 // Function: FPDFEMB_Action_GetData | |
| 1514 // Get detailed data of a particular action | |
| 1515 // Parameters: | |
| 1516 // document - Handle to the document | |
| 1517 // action - Handle to the action | |
| 1518 // buffer - Application allocated buffer rec
eiving the destination data | |
| 1519 // Return Value: | |
| 1520 // Error code, or FPDFERR_SUCCESS for success. | |
| 1521 // Comments: | |
| 1522 // See data structure definition for different action type
above. Please note | |
| 1523 // the actual action data might use more space than the str
ucture definition | |
| 1524 // shows, to store things like file name or URL. So you sho
uld always call | |
| 1525 // FPDFEMB_Action_GetType first to get data size then alloc
ate enough buffer | |
| 1526 // for this call. | |
| 1527 // | |
| 1528 FPDFEMB_RESULT FPDFEMB_Action_GetData(FPDFEMB_DOCUMENT document, FPDFEMB_ACTION
action, void* buffer); | |
| 1529 | |
| 1530 // Function: FPDFEMB_Action_GetNext | |
| 1531 // Get next action in an action chain | |
| 1532 // Parameters: | |
| 1533 // document - Handle to the document | |
| 1534 // action - Handle to current action | |
| 1535 // next - Receiving handle to next action. | |
| 1536 // Return Value: | |
| 1537 // Error code, or FPDFERR_SUCCESS for success. | |
| 1538 // Comments: | |
| 1539 // If there is no next action, the "next" parameter will be
set to NULL after the function returns. | |
| 1540 // | |
| 1541 FPDFEMB_RESULT FPDFEMB_Action_GetNext(FPDFEMB_ACTION action, FPDFEMB_ACTION* nex
t); | |
| 1542 | |
| 1543 /*******************************************************************************
************* | |
| 1544 **** | |
| 1545 **** Bookmark Information | |
| 1546 **** | |
| 1547 ********************************************************************************
************/ | |
| 1548 | |
| 1549 typedef void* FPDFEMB_BOOKMARK; | |
| 1550 | |
| 1551 // Function: FPDFEMB_Bookmark_GetFirstChild | |
| 1552 // Get first child of a bookmark item, or first top level b
ookmark item | |
| 1553 // Parameters: | |
| 1554 // document - Handle to the document | |
| 1555 // parent - Handle to the parent bookmark. | |
| 1556 // Can be NULL if you want
to get the first top level item. | |
| 1557 // bookmark - Receiving handle to the first ch
ild or top level bookmark item. | |
| 1558 // If result is NULL, then
bookmark not found. | |
| 1559 // Return Value: | |
| 1560 // Error code, or FPDFERR_SUCCESS for success | |
| 1561 // | |
| 1562 FPDFEMB_RESULT FPDFEMB_Bookmark_GetFirstChild(FPDFEMB_DOCUMENT document, FPDFEMB
_BOOKMARK parent, | |
| 1563
FPDFEMB_BOOKMARK* bookmark); | |
| 1564 | |
| 1565 // Function: FPDFEMB_Bookmark_GetFirstChild | |
| 1566 // Get next sibling of a bookmark item | |
| 1567 // Parameters: | |
| 1568 // document - Handle to the document | |
| 1569 // bookmark - Handle to the bookmark | |
| 1570 // sibling - Receiving the handle of next sib
ling. | |
| 1571 // If result is NULL, then
this is the last bookmark in this level. | |
| 1572 // Return Value: | |
| 1573 // Error code, or FPDFERR_SUCCESS for success | |
| 1574 // | |
| 1575 FPDFEMB_RESULT FPDFEMB_Bookmark_GetNextSibling(FPDFEMB_DOCUMENT document, FPDFEM
B_BOOKMARK bookmark, | |
| 1576
FPDFEMB_BOOKMARK* sibling); | |
| 1577 | |
| 1578 // Function: FPDFEMB_Bookmark_GetTitle | |
| 1579 // Get title of a bookmark | |
| 1580 // Parameters: | |
| 1581 // bookmark - Handle to the bookmark | |
| 1582 // buffer - A buffer allocated by the applic
ation, or NULL. | |
| 1583 // bufsize - [IN/OUT] A pointer to a number i
ndicating the buffer size, | |
| 1584 // before this function cal
l. After return, this place will store | |
| 1585 // number of bytes used by
the output (including terminator). | |
| 1586 // Return Value: | |
| 1587 // Error code, or FPDFERR_SUCCESS for success | |
| 1588 // Comments: | |
| 1589 // The title is output in Unicode, using UTF-16LE format. I
t's terminated by | |
| 1590 // two consecutive zero bytes. | |
| 1591 // | |
| 1592 // If the "buffer" parameter is NULL, then the "bufsize" pa
rameter will receive | |
| 1593 // number of bytes required to store the bookmark title (in
cluding the two- | |
| 1594 // byte terminator). | |
| 1595 // | |
| 1596 // If the buffer provided is smaller than the required size
, then this function | |
| 1597 // will not copy any data, return FPDFEMB_PARAM, and the re
quired buffer size will | |
| 1598 // also be put in "bufsize" parameter. | |
| 1599 // | |
| 1600 FPDFEMB_RESULT FPDFEMB_Bookmark_GetTitle(FPDFEMB_BOOKMARK bookmark, void* buffer
, unsigned int* bufsize); | |
| 1601 | |
| 1602 // Function: FPDFEMB_Bookmark_GetPage | |
| 1603 // Get page number of a bookmark pointing to | |
| 1604 // Parameters: | |
| 1605 // document - Handle to the document | |
| 1606 // bookmark - Handle to the bookmark | |
| 1607 // page - Receiving the page number. -1 if
this bookmark doesn't actually | |
| 1608 // point to a page inside t
he document. | |
| 1609 // Return Value: | |
| 1610 // Error code, or FPDFERR_SUCCESS for success | |
| 1611 // Comments: | |
| 1612 // Some bookmark might not point to a page, some bookmark m
ight have more than one destination | |
| 1613 // (action), for detailed information about a bookmark, you
should call FPDFEMB_Bookmark_GetAction. | |
| 1614 // | |
| 1615 FPDFEMB_RESULT FPDFEMB_Bookmark_GetPage(FPDFEMB_DOCUMENT document, FPDFEMB_BOOKM
ARK bookmark, int* page); | |
| 1616 | |
| 1617 // Function: FPDFEMB_Bookmark_GetAction | |
| 1618 // Get action(s) associated with a particular bookmark | |
| 1619 // Parameters: | |
| 1620 // document - Handle to the document | |
| 1621 // bookmark - Handle to the bookmark | |
| 1622 // action - Receiving handle of first action | |
| 1623 // Return Value: | |
| 1624 // Error code, or FPDFERR_SUCCESS for success. | |
| 1625 // | |
| 1626 FPDFEMB_RESULT FPDFEMB_Bookmark_GetAction(FPDFEMB_DOCUMENT document, FPDFEMB_BOO
KMARK bookmark, FPDFEMB_ACTION* action); | |
| 1627 | |
| 1628 /*******************************************************************************
************* | |
| 1629 **** | |
| 1630 **** Hyperlink Information | |
| 1631 **** | |
| 1632 ********************************************************************************
************/ | |
| 1633 | |
| 1634 // Function: FPDFEMB_Link_GetCount | |
| 1635 // Get number of hyperlinks inside a page | |
| 1636 // Parameters: | |
| 1637 // page - Page handle. | |
| 1638 // link_count - Pointer to an integer receiving
the number of links | |
| 1639 // reserved - Must be zero now. | |
| 1640 // Return Value: | |
| 1641 // Error code, or FPDFERR_SUCCESS for success. | |
| 1642 // Comments: | |
| 1643 // This function must be called before any other link relat
ed function can | |
| 1644 // be called for the page. | |
| 1645 // | |
| 1646 FPDFEMB_RESULT FPDFEMB_Link_GetCount(FPDFEMB_PAGE page, int* link_count, int res
erved); | |
| 1647 | |
| 1648 // Function: FPDFEMB_Link_GetAction | |
| 1649 // Get action(s) associated with a particular hyperlink | |
| 1650 // Parameters: | |
| 1651 // page - Page handle | |
| 1652 // link_index - Zero-based index for the link | |
| 1653 // action - Receiving handle of first action | |
| 1654 // Return Value: | |
| 1655 // Error code, or FPDFERR_SUCCESS for success. | |
| 1656 // | |
| 1657 FPDFEMB_RESULT FPDFEMB_Link_GetAction(FPDFEMB_PAGE page, int link_index, FPDFEMB
_ACTION* action); | |
| 1658 | |
| 1659 // Function: FPDFEMB_Link_GetAreaCount | |
| 1660 // Get number of area (quadrilaterals) for a link | |
| 1661 // Parameters: | |
| 1662 // page - Page handle | |
| 1663 // link_index - Zero-based index for the link | |
| 1664 // count - Pointer to an integer receiving
number of quadrilaterals | |
| 1665 // Return Value: | |
| 1666 // Error code, or FPDFERR_SUCCESS for success. | |
| 1667 // | |
| 1668 FPDFEMB_RESULT FPDFEMB_Link_GetAreaCount(FPDFEMB_PAGE page, int link_index, int*
count); | |
| 1669 | |
| 1670 // Function: FPDFEMB_Link_GetArea | |
| 1671 // Get a particular quadrilateral for a link | |
| 1672 // Parameters: | |
| 1673 // page - Page handle | |
| 1674 // link_index - Zero-based index for the link | |
| 1675 // area_index - Zero-based index for the quadril
ateral | |
| 1676 // points - Pointer to an array consists 4 p
oints, receiving coordinations | |
| 1677 // Return Value: | |
| 1678 // Error code, or FPDFERR_SUCCESS for success. | |
| 1679 // Comments: | |
| 1680 // The result in "points" array are the X/Y coordinations f
or the four vertices | |
| 1681 // of the quadrilateral. Vertices are in the following orde
r: lower left, lower | |
| 1682 // right, upper right, upper left. | |
| 1683 // | |
| 1684 FPDFEMB_RESULT FPDFEMB_Link_GetArea(FPDFEMB_PAGE page, int link_index, int area_
index, | |
| 1685 FPDFEMB_
POINT* points); | |
| 1686 | |
| 1687 /*******************************************************************************
************* | |
| 1688 **** | |
| 1689 **** Graphic Output (onto DIB) | |
| 1690 **** | |
| 1691 ********************************************************************************
************/ | |
| 1692 | |
| 1693 typedef void* FPDFEMB_FONT; | |
| 1694 | |
| 1695 // Function: FPDFEMB_OpenStandardFont | |
| 1696 // Get ready to use a standard PDF font | |
| 1697 // Parameters: | |
| 1698 // font_name - Name of the font. See a list of
supported fonts below. | |
| 1699 // font_handle - Receiving the font handle. | |
| 1700 // Return Value: | |
| 1701 // Error code, or FPDFERR_SUCCESS for success. | |
| 1702 // Comments: | |
| 1703 // Currently supported standard fonts: | |
| 1704 // Courier, Courier-Bold, Courier-BoldOblique, Courier-Obli
que, | |
| 1705 // Helvetica, Helvetica-Bold, Helvetica-BoldOblique, Helvet
ica-Oblique, | |
| 1706 // Times-Roman, Times-Bold, Times-Italic, Times-BoldItalic, | |
| 1707 // Symbol, ZapfDingbats. | |
| 1708 // | |
| 1709 FPDFEMB_RESULT FPDFEMB_OpenStandardFont(const char* font_name, FPDFEMB_FONT* fon
t_handle); | |
| 1710 | |
| 1711 // Function: FPDFEMB_OpenSystemFont | |
| 1712 // Get ready to use a system font | |
| 1713 // Parameters: | |
| 1714 // font_name - Font name | |
| 1715 // charset - Charset ID (see above FPDFEMB_CH
ARSET_xxx constants) | |
| 1716 // flags - Font flags (see above FPDFEMB_FO
NT_xxx constants) | |
| 1717 // weight - Weight of the font. Range from 1
00 to 900. 400 is normal, | |
| 1718 // 700 is bold. | |
| 1719 // font_handle - Receiving the font handle. | |
| 1720 // Return Value: | |
| 1721 // Error code, or FPDFERR_SUCCESS for success. | |
| 1722 // Comments: | |
| 1723 // System font is supported only if either FPDFEMB_SetFontM
apper or | |
| 1724 // FPDFEMB_SetGlyphProvider is called. | |
| 1725 // Font attributes (name, charset, flags and weight) can be
all optional, if the | |
| 1726 // font mapper or glyph provider doesn't make use of them. | |
| 1727 // | |
| 1728 FPDFEMB_RESULT FPDFEMB_OpenSystemFont(const char* font_name, int charset, unsign
ed int flags, int weight, | |
| 1729 FPDFEM
B_FONT* font_handle); | |
| 1730 | |
| 1731 // Function: FPDFEMB_CloseFont | |
| 1732 // Close a font handle. | |
| 1733 // Parameters: | |
| 1734 // font_handle - Handle to the font. | |
| 1735 // Return Value: | |
| 1736 // Error code, or FPDFERR_SUCCESS for success. | |
| 1737 // | |
| 1738 FPDFEMB_RESULT FPDFEMB_CloseFont(FPDFEMB_FONT font_handle); | |
| 1739 | |
| 1740 struct FPDFEMB_TEXTMATRIX | |
| 1741 { | |
| 1742 double a, b, c, d; | |
| 1743 }; | |
| 1744 | |
| 1745 // Function: FPDFEMB_OutputText | |
| 1746 // Output text string onto a DIB device. | |
| 1747 // Parameters: | |
| 1748 // dib - DIB handle, as the outpu
t device | |
| 1749 // x, y - DIB coordinations for the origin
point of the first character. | |
| 1750 // font_handle - Handle to the font | |
| 1751 // font_size - Font size in pixels | |
| 1752 // matrix - Matrix for the text output. Can
be NULL. | |
| 1753 // text - Zero-terminated unicode text str
ing | |
| 1754 // argb - Color of the text, in 0xaarrggbb
format. | |
| 1755 // Return Value: | |
| 1756 // Error code, or FPDFERR_SUCCESS for success. | |
| 1757 // | |
| 1758 FPDFEMB_RESULT FPDFEMB_OutputText(FPDFEMB_BITMAP dib, int x, int y, FPDFEMB_FONT
font_handle, double font_size, | |
| 1759 FPDFEMB_TEXTMA
TRIX* matrix, const FPDFEMB_WCHAR* text, unsigned long argb); | |
| 1760 | |
| 1761 #ifdef __cplusplus | |
| 1762 }; | |
| 1763 #endif | |
| 1764 | |
| 1765 #endif // #ifdef _FPDFEMB_H_ | |
| OLD | NEW |