Home | History | Annotate | Download | only in public
      1 // Copyright 2014 PDFium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
      6 
      7 #ifndef PUBLIC_FPDF_EDIT_H_
      8 #define PUBLIC_FPDF_EDIT_H_
      9 
     10 #include <stdint.h>
     11 
     12 // NOLINTNEXTLINE(build/include)
     13 #include "fpdfview.h"
     14 
     15 #define FPDF_ARGB(a, r, g, b)                                      \
     16   ((uint32_t)(((uint32_t)(b)&0xff) | (((uint32_t)(g)&0xff) << 8) | \
     17               (((uint32_t)(r)&0xff) << 16) | (((uint32_t)(a)&0xff) << 24)))
     18 #define FPDF_GetBValue(argb) ((uint8_t)(argb))
     19 #define FPDF_GetGValue(argb) ((uint8_t)(((uint16_t)(argb)) >> 8))
     20 #define FPDF_GetRValue(argb) ((uint8_t)((argb) >> 16))
     21 #define FPDF_GetAValue(argb) ((uint8_t)((argb) >> 24))
     22 
     23 // Refer to PDF Reference version 1.7 table 4.12 for all color space families.
     24 #define FPDF_COLORSPACE_UNKNOWN 0
     25 #define FPDF_COLORSPACE_DEVICEGRAY 1
     26 #define FPDF_COLORSPACE_DEVICERGB 2
     27 #define FPDF_COLORSPACE_DEVICECMYK 3
     28 #define FPDF_COLORSPACE_CALGRAY 4
     29 #define FPDF_COLORSPACE_CALRGB 5
     30 #define FPDF_COLORSPACE_LAB 6
     31 #define FPDF_COLORSPACE_ICCBASED 7
     32 #define FPDF_COLORSPACE_SEPARATION 8
     33 #define FPDF_COLORSPACE_DEVICEN 9
     34 #define FPDF_COLORSPACE_INDEXED 10
     35 #define FPDF_COLORSPACE_PATTERN 11
     36 
     37 // The page object constants.
     38 #define FPDF_PAGEOBJ_UNKNOWN 0
     39 #define FPDF_PAGEOBJ_TEXT 1
     40 #define FPDF_PAGEOBJ_PATH 2
     41 #define FPDF_PAGEOBJ_IMAGE 3
     42 #define FPDF_PAGEOBJ_SHADING 4
     43 #define FPDF_PAGEOBJ_FORM 5
     44 
     45 // The path segment constants.
     46 #define FPDF_SEGMENT_UNKNOWN -1
     47 #define FPDF_SEGMENT_LINETO 0
     48 #define FPDF_SEGMENT_BEZIERTO 1
     49 #define FPDF_SEGMENT_MOVETO 2
     50 
     51 #define FPDF_FILLMODE_ALTERNATE 1
     52 #define FPDF_FILLMODE_WINDING 2
     53 
     54 #define FPDF_FONT_TYPE1 1
     55 #define FPDF_FONT_TRUETYPE 2
     56 
     57 #define FPDF_LINECAP_BUTT 0
     58 #define FPDF_LINECAP_ROUND 1
     59 #define FPDF_LINECAP_PROJECTING_SQUARE 2
     60 
     61 #define FPDF_LINEJOIN_MITER 0
     62 #define FPDF_LINEJOIN_ROUND 1
     63 #define FPDF_LINEJOIN_BEVEL 2
     64 
     65 #define FPDF_PRINTMODE_EMF 0
     66 #define FPDF_PRINTMODE_TEXTONLY 1
     67 #define FPDF_PRINTMODE_POSTSCRIPT2 2
     68 #define FPDF_PRINTMODE_POSTSCRIPT3 3
     69 
     70 typedef struct FPDF_IMAGEOBJ_METADATA {
     71   // The image width in pixels.
     72   unsigned int width;
     73   // The image height in pixels.
     74   unsigned int height;
     75   // The image's horizontal pixel-per-inch.
     76   float horizontal_dpi;
     77   // The image's vertical pixel-per-inch.
     78   float vertical_dpi;
     79   // The number of bits used to represent each pixel.
     80   unsigned int bits_per_pixel;
     81   // The image's colorspace. See above for the list of FPDF_COLORSPACE_*.
     82   int colorspace;
     83   // The image's marked content ID. Useful for pairing with associated alt-text.
     84   // A value of -1 indicates no ID.
     85   int marked_content_id;
     86 } FPDF_IMAGEOBJ_METADATA;
     87 
     88 #ifdef __cplusplus
     89 extern "C" {
     90 #endif  // __cplusplus
     91 
     92 // Create a new PDF document.
     93 //
     94 // Returns a handle to a new document, or NULL on failure.
     95 FPDF_EXPORT FPDF_DOCUMENT FPDF_CALLCONV FPDF_CreateNewDocument();
     96 
     97 // Create a new PDF page.
     98 //
     99 //   document   - handle to document.
    100 //   page_index - suggested index of the page to create. If it is larger than
    101 //                document's current last index(L), the created page index is
    102 //                the next available index -- L+1.
    103 //   width      - the page width.
    104 //   height     - the page height.
    105 //
    106 // Returns the handle to the new page.
    107 //
    108 // The page should be closed with CPDF_ClosePage() when finished as
    109 // with any other page in the document.
    110 FPDF_EXPORT FPDF_PAGE FPDF_CALLCONV FPDFPage_New(FPDF_DOCUMENT document,
    111                                                  int page_index,
    112                                                  double width,
    113                                                  double height);
    114 
    115 // Delete the page at |page_index|.
    116 //
    117 //   document   - handle to document.
    118 //   page_index - the index of the page to delete.
    119 FPDF_EXPORT void FPDF_CALLCONV FPDFPage_Delete(FPDF_DOCUMENT document,
    120                                                int page_index);
    121 
    122 // Get the rotation of |page|.
    123 //
    124 //   page - handle to a page
    125 //
    126 // Returns one of the following indicating the page rotation:
    127 //   0 - No rotation.
    128 //   1 - Rotated 90 degrees clockwise.
    129 //   2 - Rotated 180 degrees clockwise.
    130 //   3 - Rotated 270 degrees clockwise.
    131 FPDF_EXPORT int FPDF_CALLCONV FPDFPage_GetRotation(FPDF_PAGE page);
    132 
    133 // Set rotation for |page|.
    134 //
    135 //   page   - handle to a page.
    136 //   rotate - the rotation value, one of:
    137 //              0 - No rotation.
    138 //              1 - Rotated 90 degrees clockwise.
    139 //              2 - Rotated 180 degrees clockwise.
    140 //              3 - Rotated 270 degrees clockwise.
    141 FPDF_EXPORT void FPDF_CALLCONV FPDFPage_SetRotation(FPDF_PAGE page, int rotate);
    142 
    143 // Insert |page_obj| into |page|.
    144 //
    145 //   page     - handle to a page
    146 //   page_obj - handle to a page object. The |page_obj| will be automatically
    147 //              freed.
    148 FPDF_EXPORT void FPDF_CALLCONV FPDFPage_InsertObject(FPDF_PAGE page,
    149                                                      FPDF_PAGEOBJECT page_obj);
    150 
    151 // Get number of page objects inside |page|.
    152 //
    153 //   page - handle to a page.
    154 //
    155 // Returns the number of objects in |page|.
    156 //
    157 // DEPRECATED. Please use FPDFPage_CountObjects.
    158 FPDF_EXPORT int FPDF_CALLCONV FPDFPage_CountObject(FPDF_PAGE page);
    159 
    160 // Get number of page objects inside |page|.
    161 //
    162 //   page - handle to a page.
    163 //
    164 // Returns the number of objects in |page|.
    165 FPDF_EXPORT int FPDF_CALLCONV FPDFPage_CountObjects(FPDF_PAGE page);
    166 
    167 // Get object in |page| at |index|.
    168 //
    169 //   page  - handle to a page.
    170 //   index - the index of a page object.
    171 //
    172 // Returns the handle to the page object, or NULL on failed.
    173 FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV FPDFPage_GetObject(FPDF_PAGE page,
    174                                                              int index);
    175 
    176 // Checks if |page| contains transparency.
    177 //
    178 //   page - handle to a page.
    179 //
    180 // Returns TRUE if |page| contains transparency.
    181 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_HasTransparency(FPDF_PAGE page);
    182 
    183 // Generate the content of |page|.
    184 //
    185 //   page - handle to a page.
    186 //
    187 // Returns TRUE on success.
    188 //
    189 // Before you save the page to a file, or reload the page, you must call
    190 // |FPDFPage_GenerateContent| or any changes to |page| will be lost.
    191 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_GenerateContent(FPDF_PAGE page);
    192 
    193 // Destroy |page_obj| by releasing its resources. |page_obj| must have been
    194 // created by FPDFPageObj_CreateNew{Path|Rect}() or
    195 // FPDFPageObj_New{Text|Image}Obj(). This function must be called on
    196 // newly-created objects if they are not added to a page through
    197 // FPDFPage_InsertObject() or to an annotation through FPDFAnnot_AppendObject().
    198 //
    199 //   page_obj - handle to a page object.
    200 FPDF_EXPORT void FPDF_CALLCONV FPDFPageObj_Destroy(FPDF_PAGEOBJECT page_obj);
    201 
    202 // Checks if |page_object| contains transparency.
    203 //
    204 //   page_object - handle to a page object.
    205 //
    206 // Returns TRUE if |pageObject| contains transparency.
    207 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    208 FPDFPageObj_HasTransparency(FPDF_PAGEOBJECT page_object);
    209 
    210 // Get type of |page_object|.
    211 //
    212 //   page_object - handle to a page object.
    213 //
    214 // Returns one of the FPDF_PAGEOBJ_* values on success, FPDF_PAGEOBJ_UNKNOWN on
    215 // error.
    216 FPDF_EXPORT int FPDF_CALLCONV FPDFPageObj_GetType(FPDF_PAGEOBJECT page_object);
    217 
    218 // Transform |page_object| by the given matrix.
    219 //
    220 //   page_object - handle to a page object.
    221 //   a           - matrix value.
    222 //   b           - matrix value.
    223 //   c           - matrix value.
    224 //   d           - matrix value.
    225 //   e           - matrix value.
    226 //   f           - matrix value.
    227 //
    228 // The matrix is composed as:
    229 //   |a c e|
    230 //   |b d f|
    231 // and can be used to scale, rotate, shear and translate the |page_object|.
    232 FPDF_EXPORT void FPDF_CALLCONV
    233 FPDFPageObj_Transform(FPDF_PAGEOBJECT page_object,
    234                       double a,
    235                       double b,
    236                       double c,
    237                       double d,
    238                       double e,
    239                       double f);
    240 
    241 // Transform all annotations in |page|.
    242 //
    243 //   page - handle to a page.
    244 //   a    - matrix value.
    245 //   b    - matrix value.
    246 //   c    - matrix value.
    247 //   d    - matrix value.
    248 //   e    - matrix value.
    249 //   f    - matrix value.
    250 //
    251 // The matrix is composed as:
    252 //   |a c e|
    253 //   |b d f|
    254 // and can be used to scale, rotate, shear and translate the |page| annotations.
    255 FPDF_EXPORT void FPDF_CALLCONV FPDFPage_TransformAnnots(FPDF_PAGE page,
    256                                                         double a,
    257                                                         double b,
    258                                                         double c,
    259                                                         double d,
    260                                                         double e,
    261                                                         double f);
    262 
    263 // Create a new image object.
    264 //
    265 //   document - handle to a document.
    266 //
    267 // Returns a handle to a new image object.
    268 FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV
    269 FPDFPageObj_NewImageObj(FPDF_DOCUMENT document);
    270 
    271 // Load an image from a JPEG image file and then set it into |image_object|.
    272 //
    273 //   pages        - pointer to the start of all loaded pages, may be NULL.
    274 //   nCount       - number of |pages|, may be 0.
    275 //   image_object - handle to an image object.
    276 //   fileAccess   - file access handler which specifies the JPEG image file.
    277 //
    278 // Returns TRUE on success.
    279 //
    280 // The image object might already have an associated image, which is shared and
    281 // cached by the loaded pages. In that case, we need to clear the cached image
    282 // for all the loaded pages. Pass |pages| and page count (|nCount|) to this API
    283 // to clear the image cache. If the image is not previously shared, or NULL is a
    284 // valid |pages| value.
    285 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    286 FPDFImageObj_LoadJpegFile(FPDF_PAGE* pages,
    287                           int nCount,
    288                           FPDF_PAGEOBJECT image_object,
    289                           FPDF_FILEACCESS* fileAccess);
    290 
    291 // Load an image from a JPEG image file and then set it into |image_object|.
    292 //
    293 //   pages        - pointer to the start of all loaded pages, may be NULL.
    294 //   nCount       - number of |pages|, may be 0.
    295 //   image_object - handle to an image object.
    296 //   fileAccess   - file access handler which specifies the JPEG image file.
    297 //
    298 // Returns TRUE on success.
    299 //
    300 // The image object might already have an associated image, which is shared and
    301 // cached by the loaded pages. In that case, we need to clear the cached image
    302 // for all the loaded pages. Pass |pages| and page count (|nCount|) to this API
    303 // to clear the image cache. If the image is not previously shared, or NULL is a
    304 // valid |pages| value. This function loads the JPEG image inline, so the image
    305 // content is copied to the file. This allows |fileAccess| and its associated
    306 // data to be deleted after this function returns.
    307 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    308 FPDFImageObj_LoadJpegFileInline(FPDF_PAGE* pages,
    309                                 int nCount,
    310                                 FPDF_PAGEOBJECT image_object,
    311                                 FPDF_FILEACCESS* fileAccess);
    312 
    313 // Set the transform matrix of |image_object|.
    314 //
    315 //   image_object - handle to an image object.
    316 //   a            - matrix value.
    317 //   b            - matrix value.
    318 //   c            - matrix value.
    319 //   d            - matrix value.
    320 //   e            - matrix value.
    321 //   f            - matrix value.
    322 //
    323 // The matrix is composed as:
    324 //   |a c e|
    325 //   |b d f|
    326 // and can be used to scale, rotate, shear and translate the |page| annotations.
    327 //
    328 // Returns TRUE on success.
    329 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    330 FPDFImageObj_SetMatrix(FPDF_PAGEOBJECT image_object,
    331                        double a,
    332                        double b,
    333                        double c,
    334                        double d,
    335                        double e,
    336                        double f);
    337 
    338 // Set |bitmap| to |image_object|.
    339 //
    340 //   pages        - pointer to the start of all loaded pages, may be NULL.
    341 //   nCount       - number of |pages|, may be 0.
    342 //   image_object - handle to an image object.
    343 //   bitmap       - handle of the bitmap.
    344 //
    345 // Returns TRUE on success.
    346 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    347 FPDFImageObj_SetBitmap(FPDF_PAGE* pages,
    348                        int nCount,
    349                        FPDF_PAGEOBJECT image_object,
    350                        FPDF_BITMAP bitmap);
    351 
    352 // Get a bitmap rasterisation of |image_object|. The returned bitmap will be
    353 // owned by the caller, and FPDFBitmap_Destroy() must be called on the returned
    354 // bitmap when it is no longer needed.
    355 //
    356 //   image_object - handle to an image object.
    357 //
    358 // Returns the bitmap.
    359 FPDF_EXPORT FPDF_BITMAP FPDF_CALLCONV
    360 FPDFImageObj_GetBitmap(FPDF_PAGEOBJECT image_object);
    361 
    362 // Get the decoded image data of |image_object|. The decoded data is the
    363 // uncompressed image data, i.e. the raw image data after having all filters
    364 // applied. |buffer| is only modified if |buflen| is longer than the length of
    365 // the decoded image data.
    366 //
    367 //   image_object - handle to an image object.
    368 //   buffer       - buffer for holding the decoded image data in raw bytes.
    369 //   buflen       - length of the buffer.
    370 //
    371 // Returns the length of the decoded image data.
    372 FPDF_EXPORT unsigned long FPDF_CALLCONV
    373 FPDFImageObj_GetImageDataDecoded(FPDF_PAGEOBJECT image_object,
    374                                  void* buffer,
    375                                  unsigned long buflen);
    376 
    377 // Get the raw image data of |image_object|. The raw data is the image data as
    378 // stored in the PDF without applying any filters. |buffer| is only modified if
    379 // |buflen| is longer than the length of the raw image data.
    380 //
    381 //   image_object - handle to an image object.
    382 //   buffer       - buffer for holding the raw image data in raw bytes.
    383 //   buflen       - length of the buffer.
    384 //
    385 // Returns the length of the raw image data.
    386 FPDF_EXPORT unsigned long FPDF_CALLCONV
    387 FPDFImageObj_GetImageDataRaw(FPDF_PAGEOBJECT image_object,
    388                              void* buffer,
    389                              unsigned long buflen);
    390 
    391 // Get the number of filters (i.e. decoders) of the image in |image_object|.
    392 //
    393 //   image_object - handle to an image object.
    394 //
    395 // Returns the number of |image_object|'s filters.
    396 FPDF_EXPORT int FPDF_CALLCONV
    397 FPDFImageObj_GetImageFilterCount(FPDF_PAGEOBJECT image_object);
    398 
    399 // Get the filter at |index| of |image_object|'s list of filters. Note that the
    400 // filters need to be applied in order, i.e. the first filter should be applied
    401 // first, then the second, etc. |buffer| is only modified if |buflen| is longer
    402 // than the length of the filter string.
    403 //
    404 //   image_object - handle to an image object.
    405 //   index        - the index of the filter requested.
    406 //   buffer       - buffer for holding filter string, encoded in UTF-8.
    407 //   buflen       - length of the buffer.
    408 //
    409 // Returns the length of the filter string.
    410 FPDF_EXPORT unsigned long FPDF_CALLCONV
    411 FPDFImageObj_GetImageFilter(FPDF_PAGEOBJECT image_object,
    412                             int index,
    413                             void* buffer,
    414                             unsigned long buflen);
    415 
    416 // Get the image metadata of |image_object|, including dimension, DPI, bits per
    417 // pixel, and colorspace. If the |image_object| is not an image object or if it
    418 // does not have an image, then the return value will be false. Otherwise,
    419 // failure to retrieve any specific parameter would result in its value being 0.
    420 //
    421 //   image_object - handle to an image object.
    422 //   page         - handle to the page that |image_object| is on. Required for
    423 //                  retrieving the image's bits per pixel and colorspace.
    424 //   metadata     - receives the image metadata; must not be NULL.
    425 //
    426 // Returns true if successful.
    427 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    428 FPDFImageObj_GetImageMetadata(FPDF_PAGEOBJECT image_object,
    429                               FPDF_PAGE page,
    430                               FPDF_IMAGEOBJ_METADATA* metadata);
    431 
    432 // Create a new path object at an initial position.
    433 //
    434 //   x - initial horizontal position.
    435 //   y - initial vertical position.
    436 //
    437 // Returns a handle to a new path object.
    438 FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV FPDFPageObj_CreateNewPath(float x,
    439                                                                     float y);
    440 
    441 // Create a closed path consisting of a rectangle.
    442 //
    443 //   x - horizontal position for the left boundary of the rectangle.
    444 //   y - vertical position for the bottom boundary of the rectangle.
    445 //   w - width of the rectangle.
    446 //   h - height of the rectangle.
    447 //
    448 // Returns a handle to the new path object.
    449 FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV FPDFPageObj_CreateNewRect(float x,
    450                                                                     float y,
    451                                                                     float w,
    452                                                                     float h);
    453 
    454 // Get the bounding box of |page_object|.
    455 //
    456 // page_object  - handle to a page object.
    457 // left         - pointer where the left coordinate will be stored
    458 // bottom       - pointer where the bottom coordinate will be stored
    459 // right        - pointer where the right coordinate will be stored
    460 // top          - pointer where the top coordinate will be stored
    461 //
    462 // Returns TRUE on success.
    463 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    464 FPDFPageObj_GetBounds(FPDF_PAGEOBJECT page_object,
    465                       float* left,
    466                       float* bottom,
    467                       float* right,
    468                       float* top);
    469 
    470 // Set the blend mode of |page_object|.
    471 //
    472 // page_object  - handle to a page object.
    473 // blend_mode   - string containing the blend mode.
    474 //
    475 // Blend mode can be one of following: Color, ColorBurn, ColorDodge, Darken,
    476 // Difference, Exclusion, HardLight, Hue, Lighten, Luminosity, Multiply, Normal,
    477 // Overlay, Saturation, Screen, SoftLight
    478 FPDF_EXPORT void FPDF_CALLCONV
    479 FPDFPageObj_SetBlendMode(FPDF_PAGEOBJECT page_object,
    480                          FPDF_BYTESTRING blend_mode);
    481 
    482 // Set the stroke RGBA of a path. Range of values: 0 - 255.
    483 //
    484 // path   - the handle to the path object.
    485 // R      - the red component for the path stroke color.
    486 // G      - the green component for the path stroke color.
    487 // B      - the blue component for the path stroke color.
    488 // A      - the stroke alpha for the path.
    489 //
    490 // Returns TRUE on success.
    491 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    492 FPDFPath_SetStrokeColor(FPDF_PAGEOBJECT path,
    493                         unsigned int R,
    494                         unsigned int G,
    495                         unsigned int B,
    496                         unsigned int A);
    497 
    498 // Get the stroke RGBA of a path. Range of values: 0 - 255.
    499 //
    500 // path   - the handle to the path object.
    501 // R      - the red component of the path stroke color.
    502 // G      - the green component of the path stroke color.
    503 // B      - the blue component of the path stroke color.
    504 // A      - the stroke alpha of the path.
    505 //
    506 // Returns TRUE on success.
    507 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    508 FPDFPath_GetStrokeColor(FPDF_PAGEOBJECT path,
    509                         unsigned int* R,
    510                         unsigned int* G,
    511                         unsigned int* B,
    512                         unsigned int* A);
    513 
    514 // Set the stroke width of a path.
    515 //
    516 // path   - the handle to the path object.
    517 // width  - the width of the stroke.
    518 //
    519 // Returns TRUE on success
    520 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    521 FPDFPath_SetStrokeWidth(FPDF_PAGEOBJECT path, float width);
    522 
    523 // Set the line join of |page_object|.
    524 //
    525 // page_object  - handle to a page object.
    526 // line_join    - line join
    527 //
    528 // Line join can be one of following: FPDF_LINEJOIN_MITER, FPDF_LINEJOIN_ROUND,
    529 // FPDF_LINEJOIN_BEVEL
    530 FPDF_EXPORT void FPDF_CALLCONV FPDFPath_SetLineJoin(FPDF_PAGEOBJECT page_object,
    531                                                     int line_join);
    532 
    533 // Set the line cap of |page_object|.
    534 //
    535 // page_object - handle to a page object.
    536 // line_cap    - line cap
    537 //
    538 // Line cap can be one of following: FPDF_LINECAP_BUTT, FPDF_LINECAP_ROUND,
    539 // FPDF_LINECAP_PROJECTING_SQUARE
    540 FPDF_EXPORT void FPDF_CALLCONV FPDFPath_SetLineCap(FPDF_PAGEOBJECT page_object,
    541                                                    int line_cap);
    542 
    543 // Set the fill RGBA of a path. Range of values: 0 - 255.
    544 //
    545 // path   - the handle to the path object.
    546 // R      - the red component for the path fill color.
    547 // G      - the green component for the path fill color.
    548 // B      - the blue component for the path fill color.
    549 // A      - the fill alpha for the path.
    550 //
    551 // Returns TRUE on success.
    552 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_SetFillColor(FPDF_PAGEOBJECT path,
    553                                                           unsigned int R,
    554                                                           unsigned int G,
    555                                                           unsigned int B,
    556                                                           unsigned int A);
    557 
    558 // Get the fill RGBA of a path. Range of values: 0 - 255.
    559 //
    560 // path   - the handle to the path object.
    561 // R      - the red component of the path fill color.
    562 // G      - the green component of the path fill color.
    563 // B      - the blue component of the path fill color.
    564 // A      - the fill alpha of the path.
    565 //
    566 // Returns TRUE on success.
    567 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_GetFillColor(FPDF_PAGEOBJECT path,
    568                                                           unsigned int* R,
    569                                                           unsigned int* G,
    570                                                           unsigned int* B,
    571                                                           unsigned int* A);
    572 
    573 // Experimental API.
    574 // Get number of segments inside |path|.
    575 //
    576 //   path - handle to a path.
    577 //
    578 // A segment is a command, created by e.g. FPDFPath_MoveTo(),
    579 // FPDFPath_LineTo() or FPDFPath_BezierTo().
    580 //
    581 // Returns the number of objects in |path| or -1 on failure.
    582 FPDF_EXPORT int FPDF_CALLCONV FPDFPath_CountSegments(FPDF_PAGEOBJECT path);
    583 
    584 // Experimental API.
    585 // Get segment in |path| at |index|.
    586 //
    587 //   path  - handle to a path.
    588 //   index - the index of a segment.
    589 //
    590 // Returns the handle to the segment, or NULL on faiure.
    591 FPDF_EXPORT FPDF_PATHSEGMENT FPDF_CALLCONV
    592 FPDFPath_GetPathSegment(FPDF_PAGEOBJECT path, int index);
    593 
    594 // Experimental API.
    595 // Get coordinates of |segment|.
    596 //
    597 //   segment  - handle to a segment.
    598 //   x      - the horizontal position of the segment.
    599 //   y      - the vertical position of the segment.
    600 //
    601 // Returns TRUE on success, otherwise |x| and |y| is not set.
    602 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    603 FPDFPathSegment_GetPoint(FPDF_PATHSEGMENT segment, float* x, float* y);
    604 
    605 // Experimental API.
    606 // Get type of |segment|.
    607 //
    608 //   segment - handle to a segment.
    609 //
    610 // Returns one of the FPDF_SEGMENT_* values on success,
    611 // FPDF_SEGMENT_UNKNOWN on error.
    612 FPDF_EXPORT int FPDF_CALLCONV FPDFPathSegment_GetType(FPDF_PATHSEGMENT segment);
    613 
    614 // Experimental API.
    615 // Gets if the |segment| closes the current subpath of a given path.
    616 //
    617 //   segment - handle to a segment.
    618 //
    619 // Returns close flag for non-NULL segment, FALSE otherwise.
    620 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    621 FPDFPathSegment_GetClose(FPDF_PATHSEGMENT segment);
    622 
    623 // Move a path's current point.
    624 //
    625 // path   - the handle to the path object.
    626 // x      - the horizontal position of the new current point.
    627 // y      - the vertical position of the new current point.
    628 //
    629 // Note that no line will be created between the previous current point and the
    630 // new one.
    631 //
    632 // Returns TRUE on success
    633 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_MoveTo(FPDF_PAGEOBJECT path,
    634                                                     float x,
    635                                                     float y);
    636 
    637 // Add a line between the current point and a new point in the path.
    638 //
    639 // path   - the handle to the path object.
    640 // x      - the horizontal position of the new point.
    641 // y      - the vertical position of the new point.
    642 //
    643 // The path's current point is changed to (x, y).
    644 //
    645 // Returns TRUE on success
    646 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_LineTo(FPDF_PAGEOBJECT path,
    647                                                     float x,
    648                                                     float y);
    649 
    650 // Add a cubic Bezier curve to the given path, starting at the current point.
    651 //
    652 // path   - the handle to the path object.
    653 // x1     - the horizontal position of the first Bezier control point.
    654 // y1     - the vertical position of the first Bezier control point.
    655 // x2     - the horizontal position of the second Bezier control point.
    656 // y2     - the vertical position of the second Bezier control point.
    657 // x3     - the horizontal position of the ending point of the Bezier curve.
    658 // y3     - the vertical position of the ending point of the Bezier curve.
    659 //
    660 // Returns TRUE on success
    661 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_BezierTo(FPDF_PAGEOBJECT path,
    662                                                       float x1,
    663                                                       float y1,
    664                                                       float x2,
    665                                                       float y2,
    666                                                       float x3,
    667                                                       float y3);
    668 
    669 // Close the current subpath of a given path.
    670 //
    671 // path   - the handle to the path object.
    672 //
    673 // This will add a line between the current point and the initial point of the
    674 // subpath, thus terminating the current subpath.
    675 //
    676 // Returns TRUE on success
    677 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_Close(FPDF_PAGEOBJECT path);
    678 
    679 // Set the drawing mode of a path.
    680 //
    681 // path     - the handle to the path object.
    682 // fillmode - the filling mode to be set: 0 for no fill, 1 for alternate, 2 for
    683 // winding.
    684 // stroke   - a boolean specifying if the path should be stroked or not.
    685 //
    686 // Returns TRUE on success
    687 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_SetDrawMode(FPDF_PAGEOBJECT path,
    688                                                          int fillmode,
    689                                                          FPDF_BOOL stroke);
    690 
    691 // Create a new text object using one of the standard PDF fonts.
    692 //
    693 // document   - handle to the document.
    694 // font       - string containing the font name, without spaces.
    695 // font_size  - the font size for the new text object.
    696 //
    697 // Returns a handle to a new text object, or NULL on failure
    698 FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV
    699 FPDFPageObj_NewTextObj(FPDF_DOCUMENT document,
    700                        FPDF_BYTESTRING font,
    701                        float font_size);
    702 
    703 // Set the text for a textobject. If it had text, it will be replaced.
    704 //
    705 // text_object  - handle to the text object.
    706 // text         - the UTF-16LE encoded string containing the text to be added.
    707 //
    708 // Returns TRUE on success
    709 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    710 FPDFText_SetText(FPDF_PAGEOBJECT text_object, FPDF_WIDESTRING text);
    711 
    712 // Returns a font object loaded from a stream of data. The font is loaded
    713 // into the document.
    714 //
    715 // document   - handle to the document.
    716 // data       - the stream of data, which will be copied by the font object.
    717 // size       - size of the stream, in bytes.
    718 // font_type  - FPDF_FONT_TYPE1 or FPDF_FONT_TRUETYPE depending on the font
    719 // type.
    720 // cid        - a boolean specifying if the font is a CID font or not.
    721 //
    722 // The loaded font can be closed using FPDF_Font_Close.
    723 //
    724 // Returns NULL on failure
    725 FPDF_EXPORT FPDF_FONT FPDF_CALLCONV FPDFText_LoadFont(FPDF_DOCUMENT document,
    726                                                       const uint8_t* data,
    727                                                       uint32_t size,
    728                                                       int font_type,
    729                                                       FPDF_BOOL cid);
    730 
    731 // Set the fill RGBA of a text object. Range of values: 0 - 255.
    732 //
    733 // text_object  - handle to the text object.
    734 // R            - the red component for the path fill color.
    735 // G            - the green component for the path fill color.
    736 // B            - the blue component for the path fill color.
    737 // A            - the fill alpha for the path.
    738 //
    739 // Returns TRUE on success.
    740 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    741 FPDFText_SetFillColor(FPDF_PAGEOBJECT text_object,
    742                       unsigned int R,
    743                       unsigned int G,
    744                       unsigned int B,
    745                       unsigned int A);
    746 
    747 // Close a loaded PDF font.
    748 //
    749 // font   - Handle to the loaded font.
    750 FPDF_EXPORT void FPDF_CALLCONV FPDFFont_Close(FPDF_FONT font);
    751 
    752 // Create a new text object using a loaded font.
    753 //
    754 // document   - handle to the document.
    755 // font       - handle to the font object.
    756 // font_size  - the font size for the new text object.
    757 //
    758 // Returns a handle to a new text object, or NULL on failure
    759 FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV
    760 FPDFPageObj_CreateTextObj(FPDF_DOCUMENT document,
    761                           FPDF_FONT font,
    762                           float font_size);
    763 
    764 #ifdef __cplusplus
    765 }  // extern "C"
    766 #endif  // __cplusplus
    767 
    768 #endif  // PUBLIC_FPDF_EDIT_H_
    769