Home | History | Annotate | Download | only in public
      1 // Copyright 2017 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 #ifndef PUBLIC_FPDF_ANNOT_H_
      6 #define PUBLIC_FPDF_ANNOT_H_
      7 
      8 // NOLINTNEXTLINE(build/include)
      9 #include "fpdfview.h"
     10 
     11 // NOLINTNEXTLINE(build/include)
     12 #include "fpdf_doc.h"
     13 // NOLINTNEXTLINE(build/include)
     14 #include "fpdf_formfill.h"
     15 
     16 #ifdef __cplusplus
     17 extern "C" {
     18 #endif  // __cplusplus
     19 
     20 #define FPDF_ANNOT_UNKNOWN 0
     21 #define FPDF_ANNOT_TEXT 1
     22 #define FPDF_ANNOT_LINK 2
     23 #define FPDF_ANNOT_FREETEXT 3
     24 #define FPDF_ANNOT_LINE 4
     25 #define FPDF_ANNOT_SQUARE 5
     26 #define FPDF_ANNOT_CIRCLE 6
     27 #define FPDF_ANNOT_POLYGON 7
     28 #define FPDF_ANNOT_POLYLINE 8
     29 #define FPDF_ANNOT_HIGHLIGHT 9
     30 #define FPDF_ANNOT_UNDERLINE 10
     31 #define FPDF_ANNOT_SQUIGGLY 11
     32 #define FPDF_ANNOT_STRIKEOUT 12
     33 #define FPDF_ANNOT_STAMP 13
     34 #define FPDF_ANNOT_CARET 14
     35 #define FPDF_ANNOT_INK 15
     36 #define FPDF_ANNOT_POPUP 16
     37 #define FPDF_ANNOT_FILEATTACHMENT 17
     38 #define FPDF_ANNOT_SOUND 18
     39 #define FPDF_ANNOT_MOVIE 19
     40 #define FPDF_ANNOT_WIDGET 20
     41 #define FPDF_ANNOT_SCREEN 21
     42 #define FPDF_ANNOT_PRINTERMARK 22
     43 #define FPDF_ANNOT_TRAPNET 23
     44 #define FPDF_ANNOT_WATERMARK 24
     45 #define FPDF_ANNOT_THREED 25
     46 #define FPDF_ANNOT_RICHMEDIA 26
     47 #define FPDF_ANNOT_XFAWIDGET 27
     48 
     49 // Refer to PDF Reference (6th edition) table 8.16 for all annotation flags.
     50 #define FPDF_ANNOT_FLAG_NONE 0
     51 #define FPDF_ANNOT_FLAG_INVISIBLE (1 << 0)
     52 #define FPDF_ANNOT_FLAG_HIDDEN (1 << 1)
     53 #define FPDF_ANNOT_FLAG_PRINT (1 << 2)
     54 #define FPDF_ANNOT_FLAG_NOZOOM (1 << 3)
     55 #define FPDF_ANNOT_FLAG_NOROTATE (1 << 4)
     56 #define FPDF_ANNOT_FLAG_NOVIEW (1 << 5)
     57 #define FPDF_ANNOT_FLAG_READONLY (1 << 6)
     58 #define FPDF_ANNOT_FLAG_LOCKED (1 << 7)
     59 #define FPDF_ANNOT_FLAG_TOGGLENOVIEW (1 << 8)
     60 
     61 #define FPDF_ANNOT_APPEARANCEMODE_NORMAL 0
     62 #define FPDF_ANNOT_APPEARANCEMODE_ROLLOVER 1
     63 #define FPDF_ANNOT_APPEARANCEMODE_DOWN 2
     64 #define FPDF_ANNOT_APPEARANCEMODE_COUNT 3
     65 
     66 #define FPDF_OBJECT_UNKNOWN 0
     67 #define FPDF_OBJECT_BOOLEAN 1
     68 #define FPDF_OBJECT_NUMBER 2
     69 #define FPDF_OBJECT_STRING 3
     70 #define FPDF_OBJECT_NAME 4
     71 #define FPDF_OBJECT_ARRAY 5
     72 #define FPDF_OBJECT_DICTIONARY 6
     73 #define FPDF_OBJECT_STREAM 7
     74 #define FPDF_OBJECT_NULLOBJ 8
     75 #define FPDF_OBJECT_REFERENCE 9
     76 
     77 // Refer to PDF Reference version 1.7 table 8.70 for field flags common to all
     78 // interactive form field types.
     79 #define FPDF_FORMFLAG_NONE 0
     80 #define FPDF_FORMFLAG_READONLY (1 << 0)
     81 #define FPDF_FORMFLAG_REQUIRED (1 << 1)
     82 #define FPDF_FORMFLAG_NOEXPORT (1 << 2)
     83 
     84 // Refer to PDF Reference version 1.7 table 8.77 for field flags specific to
     85 // interactive form text fields.
     86 #define FPDF_FORMFLAG_TEXT_MULTILINE (1 << 12)
     87 
     88 // Refer to PDF Reference version 1.7 table 8.79 for field flags specific to
     89 // interactive form choice fields.
     90 #define FPDF_FORMFLAG_CHOICE_COMBO (1 << 17)
     91 #define FPDF_FORMFLAG_CHOICE_EDIT (1 << 18)
     92 
     93 typedef enum FPDFANNOT_COLORTYPE {
     94   FPDFANNOT_COLORTYPE_Color = 0,
     95   FPDFANNOT_COLORTYPE_InteriorColor
     96 } FPDFANNOT_COLORTYPE;
     97 
     98 // Experimental API.
     99 // Check if an annotation subtype is currently supported for creation.
    100 // Currently supported subtypes: circle, highlight, ink, popup, square,
    101 // squiggly, stamp, strikeout, text, and underline.
    102 //
    103 //   subtype   - the subtype to be checked.
    104 //
    105 // Returns true if this subtype supported.
    106 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    107 FPDFAnnot_IsSupportedSubtype(FPDF_ANNOTATION_SUBTYPE subtype);
    108 
    109 // Experimental API.
    110 // Create an annotation in |page| of the subtype |subtype|. If the specified
    111 // subtype is illegal or unsupported, then a new annotation will not be created.
    112 // Must call FPDFPage_CloseAnnot() when the annotation returned by this
    113 // function is no longer needed.
    114 //
    115 //   page      - handle to a page.
    116 //   subtype   - the subtype of the new annotation.
    117 //
    118 // Returns a handle to the new annotation object, or NULL on failure.
    119 FPDF_EXPORT FPDF_ANNOTATION FPDF_CALLCONV
    120 FPDFPage_CreateAnnot(FPDF_PAGE page, FPDF_ANNOTATION_SUBTYPE subtype);
    121 
    122 // Experimental API.
    123 // Get the number of annotations in |page|.
    124 //
    125 //   page   - handle to a page.
    126 //
    127 // Returns the number of annotations in |page|.
    128 FPDF_EXPORT int FPDF_CALLCONV FPDFPage_GetAnnotCount(FPDF_PAGE page);
    129 
    130 // Experimental API.
    131 // Get annotation in |page| at |index|. Must call FPDFPage_CloseAnnot() when the
    132 // annotation returned by this function is no longer needed.
    133 //
    134 //   page  - handle to a page.
    135 //   index - the index of the annotation.
    136 //
    137 // Returns a handle to the annotation object, or NULL on failure.
    138 FPDF_EXPORT FPDF_ANNOTATION FPDF_CALLCONV FPDFPage_GetAnnot(FPDF_PAGE page,
    139                                                             int index);
    140 
    141 // Experimental API.
    142 // Get the index of |annot| in |page|. This is the opposite of
    143 // FPDFPage_GetAnnot().
    144 //
    145 //   page  - handle to the page that the annotation is on.
    146 //   annot - handle to an annotation.
    147 //
    148 // Returns the index of |annot|, or -1 on failure.
    149 FPDF_EXPORT int FPDF_CALLCONV FPDFPage_GetAnnotIndex(FPDF_PAGE page,
    150                                                      FPDF_ANNOTATION annot);
    151 
    152 // Experimental API.
    153 // Close an annotation. Must be called when the annotation returned by
    154 // FPDFPage_CreateAnnot() or FPDFPage_GetAnnot() is no longer needed. This
    155 // function does not remove the annotation from the document.
    156 //
    157 //   annot  - handle to an annotation.
    158 FPDF_EXPORT void FPDF_CALLCONV FPDFPage_CloseAnnot(FPDF_ANNOTATION annot);
    159 
    160 // Experimental API.
    161 // Remove the annotation in |page| at |index|.
    162 //
    163 //   page  - handle to a page.
    164 //   index - the index of the annotation.
    165 //
    166 // Returns true if successful.
    167 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_RemoveAnnot(FPDF_PAGE page,
    168                                                          int index);
    169 
    170 // Experimental API.
    171 // Get the subtype of an annotation.
    172 //
    173 //   annot  - handle to an annotation.
    174 //
    175 // Returns the annotation subtype.
    176 FPDF_EXPORT FPDF_ANNOTATION_SUBTYPE FPDF_CALLCONV
    177 FPDFAnnot_GetSubtype(FPDF_ANNOTATION annot);
    178 
    179 // Experimental API.
    180 // Check if an annotation subtype is currently supported for object extraction,
    181 // update, and removal.
    182 // Currently supported subtypes: ink and stamp.
    183 //
    184 //   subtype   - the subtype to be checked.
    185 //
    186 // Returns true if this subtype supported.
    187 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    188 FPDFAnnot_IsObjectSupportedSubtype(FPDF_ANNOTATION_SUBTYPE subtype);
    189 
    190 // Experimental API.
    191 // Update |obj| in |annot|. |obj| must be in |annot| already and must have
    192 // been retrieved by FPDFAnnot_GetObject(). Currently, only ink and stamp
    193 // annotations are supported by this API. Also note that only path, image, and
    194 // text objects have APIs for modification; see FPDFPath_*(), FPDFText_*(), and
    195 // FPDFImageObj_*().
    196 //
    197 //   annot  - handle to an annotation.
    198 //   obj    - handle to the object that |annot| needs to update.
    199 //
    200 // Return true if successful.
    201 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    202 FPDFAnnot_UpdateObject(FPDF_ANNOTATION annot, FPDF_PAGEOBJECT obj);
    203 
    204 // Experimental API.
    205 // Add |obj| to |annot|. |obj| must have been created by
    206 // FPDFPageObj_CreateNew{Path|Rect}() or FPDFPageObj_New{Text|Image}Obj(), and
    207 // will be owned by |annot|. Note that an |obj| cannot belong to more than one
    208 // |annot|. Currently, only ink and stamp annotations are supported by this API.
    209 // Also note that only path, image, and text objects have APIs for creation.
    210 //
    211 //   annot  - handle to an annotation.
    212 //   obj    - handle to the object that is to be added to |annot|.
    213 //
    214 // Return true if successful.
    215 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    216 FPDFAnnot_AppendObject(FPDF_ANNOTATION annot, FPDF_PAGEOBJECT obj);
    217 
    218 // Experimental API.
    219 // Get the total number of objects in |annot|, including path objects, text
    220 // objects, external objects, image objects, and shading objects.
    221 //
    222 //   annot  - handle to an annotation.
    223 //
    224 // Returns the number of objects in |annot|.
    225 FPDF_EXPORT int FPDF_CALLCONV FPDFAnnot_GetObjectCount(FPDF_ANNOTATION annot);
    226 
    227 // Experimental API.
    228 // Get the object in |annot| at |index|.
    229 //
    230 //   annot  - handle to an annotation.
    231 //   index  - the index of the object.
    232 //
    233 // Return a handle to the object, or NULL on failure.
    234 FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV
    235 FPDFAnnot_GetObject(FPDF_ANNOTATION annot, int index);
    236 
    237 // Experimental API.
    238 // Remove the object in |annot| at |index|.
    239 //
    240 //   annot  - handle to an annotation.
    241 //   index  - the index of the object to be removed.
    242 //
    243 // Return true if successful.
    244 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    245 FPDFAnnot_RemoveObject(FPDF_ANNOTATION annot, int index);
    246 
    247 // Experimental API.
    248 // Set the color of an annotation. Fails when called on annotations with
    249 // appearance streams already defined; instead use
    250 // FPDFPath_Set{Stroke|Fill}Color().
    251 //
    252 //   annot    - handle to an annotation.
    253 //   type     - type of the color to be set.
    254 //   R, G, B  - buffer to hold the RGB value of the color. Ranges from 0 to 255.
    255 //   A        - buffer to hold the opacity. Ranges from 0 to 255.
    256 //
    257 // Returns true if successful.
    258 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_SetColor(FPDF_ANNOTATION annot,
    259                                                        FPDFANNOT_COLORTYPE type,
    260                                                        unsigned int R,
    261                                                        unsigned int G,
    262                                                        unsigned int B,
    263                                                        unsigned int A);
    264 
    265 // Experimental API.
    266 // Get the color of an annotation. If no color is specified, default to yellow
    267 // for highlight annotation, black for all else. Fails when called on
    268 // annotations with appearance streams already defined; instead use
    269 // FPDFPath_Get{Stroke|Fill}Color().
    270 //
    271 //   annot    - handle to an annotation.
    272 //   type     - type of the color requested.
    273 //   R, G, B  - buffer to hold the RGB value of the color. Ranges from 0 to 255.
    274 //   A        - buffer to hold the opacity. Ranges from 0 to 255.
    275 //
    276 // Returns true if successful.
    277 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_GetColor(FPDF_ANNOTATION annot,
    278                                                        FPDFANNOT_COLORTYPE type,
    279                                                        unsigned int* R,
    280                                                        unsigned int* G,
    281                                                        unsigned int* B,
    282                                                        unsigned int* A);
    283 
    284 // Experimental API.
    285 // Check if the annotation is of a type that has attachment points
    286 // (i.e. quadpoints). Quadpoints are the vertices of the rectange that
    287 // encompasses the texts affected by the annotation. They provide the
    288 // coordinates in the page where the annotation is attached. Only text markup
    289 // annotations (i.e. highlight, strikeout, squiggly, and underline) and link
    290 // annotations have quadpoints.
    291 //
    292 //   annot  - handle to an annotation.
    293 //
    294 // Returns true if the annotation is of a type that has quadpoints, false
    295 // otherwise.
    296 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    297 FPDFAnnot_HasAttachmentPoints(FPDF_ANNOTATION annot);
    298 
    299 // Experimental API.
    300 // Set the attachment points (i.e. quadpoints) of an annotation. If the
    301 // annotation's appearance stream is defined and this annotation is of a type
    302 // with quadpoints, then update the bounding box too if the new quadpoints
    303 // define a bigger one.
    304 //
    305 //   annot      - handle to an annotation.
    306 //   quadPoints - the quadpoints to be set.
    307 //
    308 // Returns true if successful.
    309 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    310 FPDFAnnot_SetAttachmentPoints(FPDF_ANNOTATION annot,
    311                               const FS_QUADPOINTSF* quadPoints);
    312 
    313 // Experimental API.
    314 // Get the attachment points (i.e. quadpoints) of an annotation.
    315 //
    316 //   annot      - handle to an annotation.
    317 //   quadPoints - receives the quadpoints; must not be NULL.
    318 //
    319 // Returns true if successful.
    320 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    321 FPDFAnnot_GetAttachmentPoints(FPDF_ANNOTATION annot,
    322                               FS_QUADPOINTSF* quadPoints);
    323 
    324 // Experimental API.
    325 // Set the annotation rectangle defining the location of the annotation. If the
    326 // annotation's appearance stream is defined and this annotation is of a type
    327 // without quadpoints, then update the bounding box too if the new rectangle
    328 // defines a bigger one.
    329 //
    330 //   annot  - handle to an annotation.
    331 //   rect   - the annotation rectangle to be set.
    332 //
    333 // Returns true if successful.
    334 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_SetRect(FPDF_ANNOTATION annot,
    335                                                       const FS_RECTF* rect);
    336 
    337 // Experimental API.
    338 // Get the annotation rectangle defining the location of the annotation.
    339 //
    340 //   annot  - handle to an annotation.
    341 //   rect   - receives the rectangle; must not be NULL.
    342 //
    343 // Returns true if successful.
    344 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_GetRect(FPDF_ANNOTATION annot,
    345                                                       FS_RECTF* rect);
    346 
    347 // Experimental API.
    348 // Check if |annot|'s dictionary has |key| as a key.
    349 //
    350 //   annot  - handle to an annotation.
    351 //   key    - the key to look for, encoded in UTF-8.
    352 //
    353 // Returns true if |key| exists.
    354 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_HasKey(FPDF_ANNOTATION annot,
    355                                                      FPDF_BYTESTRING key);
    356 
    357 // Experimental API.
    358 // Get the type of the value corresponding to |key| in |annot|'s dictionary.
    359 //
    360 //   annot  - handle to an annotation.
    361 //   key    - the key to look for, encoded in UTF-8.
    362 //
    363 // Returns the type of the dictionary value.
    364 FPDF_EXPORT FPDF_OBJECT_TYPE FPDF_CALLCONV
    365 FPDFAnnot_GetValueType(FPDF_ANNOTATION annot, FPDF_BYTESTRING key);
    366 
    367 // Experimental API.
    368 // Set the string value corresponding to |key| in |annot|'s dictionary,
    369 // overwriting the existing value if any. The value type would be
    370 // FPDF_OBJECT_STRING after this function call succeeds.
    371 //
    372 //   annot  - handle to an annotation.
    373 //   key    - the key to the dictionary entry to be set, encoded in UTF-8.
    374 //   value  - the string value to be set, encoded in UTF16-LE.
    375 //
    376 // Returns true if successful.
    377 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    378 FPDFAnnot_SetStringValue(FPDF_ANNOTATION annot,
    379                          FPDF_BYTESTRING key,
    380                          FPDF_WIDESTRING value);
    381 
    382 // Experimental API.
    383 // Get the string value corresponding to |key| in |annot|'s dictionary. |buffer|
    384 // is only modified if |buflen| is longer than the length of contents. Note that
    385 // if |key| does not exist in the dictionary or if |key|'s corresponding value
    386 // in the dictionary is not a string (i.e. the value is not of type
    387 // FPDF_OBJECT_STRING or FPDF_OBJECT_NAME), then an empty string would be copied
    388 // to |buffer| and the return value would be 2. On other errors, nothing would
    389 // be added to |buffer| and the return value would be 0.
    390 //
    391 //   annot  - handle to an annotation.
    392 //   key    - the key to the requested dictionary entry, encoded in UTF-8.
    393 //   buffer - buffer for holding the value string, encoded in UTF16-LE.
    394 //   buflen - length of the buffer.
    395 //
    396 // Returns the length of the string value.
    397 FPDF_EXPORT unsigned long FPDF_CALLCONV
    398 FPDFAnnot_GetStringValue(FPDF_ANNOTATION annot,
    399                          FPDF_BYTESTRING key,
    400                          void* buffer,
    401                          unsigned long buflen);
    402 
    403 // Experimental API.
    404 // Set the AP (appearance string) in |annot|'s dictionary for a given
    405 // |appearanceMode|.
    406 //
    407 //   annot          - handle to an annotation.
    408 //   appearanceMode - the appearance mode (normal, rollover or down) for which
    409 //                    to get the AP.
    410 //   value          - the string value to be set, encoded in UTF16-LE. If
    411 //                    nullptr is passed, the AP is cleared for that mode. If the
    412 //                    mode is Normal, APs for all modes are cleared.
    413 //
    414 // Returns true if successful.
    415 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
    416 FPDFAnnot_SetAP(FPDF_ANNOTATION annot,
    417                 FPDF_ANNOT_APPEARANCEMODE appearanceMode,
    418                 FPDF_WIDESTRING value);
    419 
    420 // Experimental API.
    421 // Get the AP (appearance string) from |annot|'s dictionary for a given
    422 // |appearanceMode|.
    423 // |buffer| is only modified if |buflen| is large enough to hold the whole AP
    424 // string. If |buflen| is smaller, the total size of the AP is still returned,
    425 // but nothing is copied.
    426 // If there is no appearance stream for |annot| in |appearanceMode|, an empty
    427 // string is written to |buf| and 2 is returned.
    428 // On other errors, nothing is written to |buffer| and 0 is returned.
    429 //
    430 //   annot          - handle to an annotation.
    431 //   appearanceMode - the appearance mode (normal, rollover or down) for which
    432 //                    to get the AP.
    433 //   buffer         - buffer for holding the value string, encoded in UTF16-LE.
    434 //   buflen         - length of the buffer.
    435 //
    436 // Returns the length of the string value.
    437 FPDF_EXPORT unsigned long FPDF_CALLCONV
    438 FPDFAnnot_GetAP(FPDF_ANNOTATION annot,
    439                 FPDF_ANNOT_APPEARANCEMODE appearanceMode,
    440                 void* buffer,
    441                 unsigned long buflen);
    442 
    443 // Experimental API.
    444 // Get the annotation corresponding to |key| in |annot|'s dictionary. Common
    445 // keys for linking annotations include "IRT" and "Popup". Must call
    446 // FPDFPage_CloseAnnot() when the annotation returned by this function is no
    447 // longer needed.
    448 //
    449 //   annot  - handle to an annotation.
    450 //   key    - the key to the requested dictionary entry, encoded in UTF-8.
    451 //
    452 // Returns a handle to the linked annotation object, or NULL on failure.
    453 FPDF_EXPORT FPDF_ANNOTATION FPDF_CALLCONV
    454 FPDFAnnot_GetLinkedAnnot(FPDF_ANNOTATION annot, FPDF_BYTESTRING key);
    455 
    456 // Experimental API.
    457 // Get the annotation flags of |annot|.
    458 //
    459 //   annot    - handle to an annotation.
    460 //
    461 // Returns the annotation flags.
    462 FPDF_EXPORT int FPDF_CALLCONV FPDFAnnot_GetFlags(FPDF_ANNOTATION annot);
    463 
    464 // Experimental API.
    465 // Set the |annot|'s flags to be of the value |flags|.
    466 //
    467 //   annot      - handle to an annotation.
    468 //   flags      - the flag values to be set.
    469 //
    470 // Returns true if successful.
    471 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_SetFlags(FPDF_ANNOTATION annot,
    472                                                        int flags);
    473 
    474 // Experimental API.
    475 // Get the annotation flags of |annot|, which is an interactive form
    476 // annotation in |page|.
    477 //
    478 //   page     - handle to a page.
    479 //   annot    - handle to an interactive form annotation.
    480 //
    481 // Returns the annotation flags specific to interactive forms.
    482 FPDF_EXPORT int FPDF_CALLCONV
    483 FPDFAnnot_GetFormFieldFlags(FPDF_PAGE page, FPDF_ANNOTATION annot);
    484 
    485 // Experimental API.
    486 // Retrieves an interactive form annotation whose rectangle contains a given
    487 // point on a page. Must call FPDFPage_CloseAnnot() when the annotation returned
    488 // is no longer needed.
    489 //
    490 //
    491 //    hHandle     -   handle to the form fill module, returned by
    492 //                    FPDFDOC_InitFormFillEnvironment.
    493 //    page        -   handle to the page, returned by FPDF_LoadPage function.
    494 //    page_x      -   X position in PDF "user space".
    495 //    page_y      -   Y position in PDF "user space".
    496 //
    497 // Returns the interactive form annotation whose rectangle contains the given
    498 // coordinates on the page. If there is no such annotation, return NULL.
    499 FPDF_EXPORT FPDF_ANNOTATION FPDF_CALLCONV
    500 FPDFAnnot_GetFormFieldAtPoint(FPDF_FORMHANDLE hHandle,
    501                               FPDF_PAGE page,
    502                               double page_x,
    503                               double page_y);
    504 
    505 #ifdef __cplusplus
    506 }  // extern "C"
    507 #endif  // __cplusplus
    508 
    509 #endif  // PUBLIC_FPDF_ANNOT_H_
    510