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_FORMFILL_H_
      8 #define PUBLIC_FPDF_FORMFILL_H_
      9 
     10 // NOLINTNEXTLINE(build/include)
     11 #include "fpdfview.h"
     12 
     13 typedef void* FPDF_FORMHANDLE;
     14 
     15 #ifdef PDF_ENABLE_XFA
     16 #define DOCTYPE_PDF 0          // Normal pdf Document
     17 #define DOCTYPE_DYNAMIC_XFA 1  // Dynamic xfa Document Type
     18 #define DOCTYPE_STATIC_XFA 2   // Static xfa Document Type
     19 #endif  // PDF_ENABLE_XFA
     20 
     21 // Exported Functions
     22 #ifdef __cplusplus
     23 extern "C" {
     24 #endif
     25 
     26 typedef struct _IPDF_JsPlatform {
     27   /**
     28   * Version number of the interface. Currently must be 2.
     29   **/
     30   int version;
     31 
     32   /* Version 1. */
     33 
     34   /**
     35   * Method: app_alert
     36   *           pop up a dialog to show warning or hint.
     37   * Interface Version:
     38   *           1
     39   * Implementation Required:
     40   *           yes
     41   * Parameters:
     42   *           pThis       -   Pointer to the interface structure itself
     43   *           Msg         -   A string containing the message to be displayed.
     44   *           Title       -   The title of the dialog.
     45   *           Type        -   The stype of button group.
     46   *                           0-OK(default);
     47   *                           1-OK,Cancel;
     48   *                           2-Yes,NO;
     49   *                           3-Yes, NO, Cancel.
     50   *           nIcon       -   The Icon type.
     51   *                           0-Error(default);
     52   *                           1-Warning;
     53   *                           2-Question;
     54   *                           3-Status.
     55   *                           4-Asterisk
     56   * Return Value:
     57   *           The return value could be the folowing type:
     58   *                           1-OK;
     59   *                           2-Cancel;
     60   *                           3-NO;
     61   *                           4-Yes;
     62   */
     63   int (*app_alert)(struct _IPDF_JsPlatform* pThis,
     64                    FPDF_WIDESTRING Msg,
     65                    FPDF_WIDESTRING Title,
     66                    int Type,
     67                    int Icon);
     68 
     69   /**
     70   * Method: app_beep
     71   *           Causes the system to play a sound.
     72   * Interface Version:
     73   *           1
     74   * Implementation Required:
     75   *           yes
     76   * Parameters:
     77   *           pThis       -   Pointer to the interface structure itself
     78   *           nType       -   The sound type.
     79   *                           0 - Error
     80   *                           1 - Warning
     81   *                           2 - Question
     82   *                           3 - Status
     83   *                           4 - Default (default value)
     84   * Return Value:
     85   *           None
     86   */
     87   void (*app_beep)(struct _IPDF_JsPlatform* pThis, int nType);
     88 
     89   /**
     90   * Method: app_response
     91   *           Displays a dialog box containing a question and an entry field for
     92   * the user to reply to the question.
     93   * Interface Version:
     94   *           1
     95   * Implementation Required:
     96   *           yes
     97   * Parameters:
     98   *           pThis       -   Pointer to the interface structure itself
     99   *           Question    -   The question to be posed to the user.
    100   *           Title       -   The title of the dialog box.
    101   *           Default     -   A default value for the answer to the question. If
    102   * not specified, no default value is presented.
    103   *           cLabel      -   A short string to appear in front of and on the
    104   * same line as the edit text field.
    105   *           bPassword   -   If true, indicates that the user's response should
    106   * show as asterisks (*) or bullets (?) to mask the response, which might be
    107   * sensitive information. The default is false.
    108   *           response    -   A string buffer allocated by SDK, to receive the
    109   * user's response.
    110   *           length      -   The length of the buffer, number of bytes.
    111   * Currently, It's always be 2048.
    112   * Return Value:
    113   *       Number of bytes the complete user input would actually require, not
    114   * including trailing zeros, regardless of the value of the length
    115   *       parameter or the presence of the response buffer.
    116   * Comments:
    117   *       No matter on what platform, the response buffer should be always
    118   * written using UTF-16LE encoding. If a response buffer is
    119   *       present and the size of the user input exceeds the capacity of the
    120   * buffer as specified by the length parameter, only the
    121   *       first "length" bytes of the user input are to be written to the
    122   * buffer.
    123   */
    124   int (*app_response)(struct _IPDF_JsPlatform* pThis,
    125                       FPDF_WIDESTRING Question,
    126                       FPDF_WIDESTRING Title,
    127                       FPDF_WIDESTRING Default,
    128                       FPDF_WIDESTRING cLabel,
    129                       FPDF_BOOL bPassword,
    130                       void* response,
    131                       int length);
    132 
    133   /*
    134   * Method: Doc_getFilePath
    135   *           Get the file path of the current document.
    136   * Interface Version:
    137   *           1
    138   * Implementation Required:
    139   *           yes
    140   * Parameters:
    141   *           pThis       -   Pointer to the interface structure itself
    142   *           filePath    -   The string buffer to receive the file path. Can be
    143   * NULL.
    144   *           length      -   The length of the buffer, number of bytes. Can be
    145   * 0.
    146   * Return Value:
    147   *       Number of bytes the filePath consumes, including trailing zeros.
    148   * Comments:
    149   *       The filePath should be always input in local encoding.
    150   *
    151   *       The return value always indicated number of bytes required for the
    152   *       buffer , even when there is no buffer specified, or the buffer size is
    153   *       less than required. In this case, the buffer will not be modified.
    154   */
    155   int (*Doc_getFilePath)(struct _IPDF_JsPlatform* pThis,
    156                          void* filePath,
    157                          int length);
    158 
    159   /*
    160   * Method: Doc_mail
    161   *           Mails the data buffer as an attachment to all recipients, with or
    162   * without user interaction.
    163   * Interface Version:
    164   *           1
    165   * Implementation Required:
    166   *           yes
    167   * Parameters:
    168   *           pThis       -   Pointer to the interface structure itself
    169   *           mailData    -   Pointer to the data buffer to be sent.Can be NULL.
    170   *           length      -   The size,in bytes, of the buffer pointed by
    171   * mailData parameter.Can be 0.
    172   *           bUI         -   If true, the rest of the parameters are used in a
    173   * compose-new-message window that is displayed to the user. If false, the cTo
    174   * parameter is required and all others are optional.
    175   *           To          -   A semicolon-delimited list of recipients for the
    176   * message.
    177   *           Subject     -   The subject of the message. The length limit is 64
    178   * KB.
    179   *           CC          -   A semicolon-delimited list of CC recipients for
    180   * the message.
    181   *           BCC         -   A semicolon-delimited list of BCC recipients for
    182   * the message.
    183   *           Msg         -   The content of the message. The length limit is 64
    184   * KB.
    185   * Return Value:
    186   *           None.
    187   * Comments:
    188   *           If the parameter mailData is NULL or length is 0, the current
    189   * document will be mailed as an attachment to all recipients.
    190   */
    191   void (*Doc_mail)(struct _IPDF_JsPlatform* pThis,
    192                    void* mailData,
    193                    int length,
    194                    FPDF_BOOL bUI,
    195                    FPDF_WIDESTRING To,
    196                    FPDF_WIDESTRING Subject,
    197                    FPDF_WIDESTRING CC,
    198                    FPDF_WIDESTRING BCC,
    199                    FPDF_WIDESTRING Msg);
    200 
    201   /*
    202   * Method: Doc_print
    203   *           Prints all or a specific number of pages of the document.
    204   * Interface Version:
    205   *           1
    206   * Implementation Required:
    207   *           yes
    208   * Parameters:
    209   *           pThis       -   Pointer to the interface structure itself.
    210   *           bUI         -   If true, will cause a UI to be presented to the
    211   * user to obtain printing information and confirm the action.
    212   *           nStart      -   A 0-based index that defines the start of an
    213   * inclusive range of pages.
    214   *           nEnd        -   A 0-based index that defines the end of an
    215   * inclusive page range.
    216   *           bSilent     -   If true, suppresses the cancel dialog box while
    217   * the document is printing. The default is false.
    218   *           bShrinkToFit    -   If true, the page is shrunk (if necessary) to
    219   * fit within the imageable area of the printed page.
    220   *           bPrintAsImage   -   If true, print pages as an image.
    221   *           bReverse    -   If true, print from nEnd to nStart.
    222   *           bAnnotations    -   If true (the default), annotations are
    223   * printed.
    224   */
    225   void (*Doc_print)(struct _IPDF_JsPlatform* pThis,
    226                     FPDF_BOOL bUI,
    227                     int nStart,
    228                     int nEnd,
    229                     FPDF_BOOL bSilent,
    230                     FPDF_BOOL bShrinkToFit,
    231                     FPDF_BOOL bPrintAsImage,
    232                     FPDF_BOOL bReverse,
    233                     FPDF_BOOL bAnnotations);
    234 
    235   /*
    236   * Method: Doc_submitForm
    237   *           Send the form data to a specified URL.
    238   * Interface Version:
    239   *           1
    240   * Implementation Required:
    241   *           yes
    242   * Parameters:
    243   *           pThis       -   Pointer to the interface structure itself
    244   *           formData    -   Pointer to the data buffer to be sent.
    245   *           length      -   The size,in bytes, of the buffer pointed by
    246   * formData parameter.
    247   *           URL         -   The URL to send to.
    248   * Return Value:
    249   *           None.
    250   *
    251   */
    252   void (*Doc_submitForm)(struct _IPDF_JsPlatform* pThis,
    253                          void* formData,
    254                          int length,
    255                          FPDF_WIDESTRING URL);
    256 
    257   /*
    258   * Method: Doc_gotoPage
    259   *           Jump to a specified page.
    260   * Interface Version:
    261   *           1
    262   * Implementation Required:
    263   *           yes
    264   * Parameters:
    265   *           pThis       -   Pointer to the interface structure itself
    266   *           nPageNum    -   The specified page number, zero for the first
    267   * page.
    268   * Return Value:
    269   *           None.
    270   *
    271   */
    272   void (*Doc_gotoPage)(struct _IPDF_JsPlatform* pThis, int nPageNum);
    273   /*
    274   * Method: Field_browse
    275   *           Show a file selection dialog, and return the selected file path.
    276   * Interface Version:
    277   *           1
    278   * Implementation Required:
    279   *           yes
    280   * Parameters:
    281   *           pThis       -   Pointer to the interface structure itself.
    282   *           filePath    -   Pointer to the data buffer to receive the file
    283   * path.Can be NULL.
    284   *           length      -   The length of the buffer, number of bytes. Can be
    285   * 0.
    286   * Return Value:
    287   *       Number of bytes the filePath consumes, including trailing zeros.
    288   * Comments:
    289   *       The filePath shoule be always input in local encoding.
    290   */
    291   int (*Field_browse)(struct _IPDF_JsPlatform* pThis,
    292                       void* filePath,
    293                       int length);
    294 
    295   /**
    296   *   pointer to FPDF_FORMFILLINFO interface.
    297   **/
    298   void* m_pFormfillinfo;
    299 
    300   /* Version 2. */
    301 
    302   void* m_isolate;               /* Unused in v3, retain for compatibility. */
    303   unsigned int m_v8EmbedderSlot; /* Unused in v3, retain for compatibility. */
    304 
    305   /* Version 3. */
    306   /* Version 3 moves m_Isolate and m_v8EmbedderSlot to FPDF_LIBRARY_CONFIG. */
    307 } IPDF_JSPLATFORM;
    308 
    309 // Flags for Cursor type
    310 #define FXCT_ARROW 0
    311 #define FXCT_NESW 1
    312 #define FXCT_NWSE 2
    313 #define FXCT_VBEAM 3
    314 #define FXCT_HBEAM 4
    315 #define FXCT_HAND 5
    316 
    317 /**
    318  * Function signature for the callback function passed to the FFI_SetTimer
    319  * method.
    320  * Parameters:
    321  *          idEvent     -   Identifier of the timer.
    322  * Return value:
    323  *          None.
    324  **/
    325 typedef void (*TimerCallback)(int idEvent);
    326 
    327 /**
    328  * Declares of a struct type to the local system time.
    329 **/
    330 typedef struct _FPDF_SYSTEMTIME {
    331   unsigned short wYear;         /* years since 1900 */
    332   unsigned short wMonth;        /* months since January - [0,11] */
    333   unsigned short wDayOfWeek;    /* days since Sunday - [0,6] */
    334   unsigned short wDay;          /* day of the month - [1,31] */
    335   unsigned short wHour;         /* hours since midnight - [0,23] */
    336   unsigned short wMinute;       /* minutes after the hour - [0,59] */
    337   unsigned short wSecond;       /* seconds after the minute - [0,59] */
    338   unsigned short wMilliseconds; /* milliseconds after the second - [0,999] */
    339 } FPDF_SYSTEMTIME;
    340 
    341 #ifdef PDF_ENABLE_XFA
    342 // XFA
    343 /**
    344  * @name Pageview  event flags
    345  */
    346 /*@{*/
    347 /** @brief After a new pageview is added. */
    348 #define FXFA_PAGEVIEWEVENT_POSTADDED 1
    349 /** @brief After a pageview is removed. */
    350 #define FXFA_PAGEVIEWEVENT_POSTREMOVED 3
    351 /*@}*/
    352 
    353 // menu
    354 /**
    355  * @name Macro Definitions for Right Context Menu Features Of XFA Fields
    356  */
    357 /*@{*/
    358 #define FXFA_MENU_COPY 1
    359 #define FXFA_MENU_CUT 2
    360 #define FXFA_MENU_SELECTALL 4
    361 #define FXFA_MENU_UNDO 8
    362 #define FXFA_MENU_REDO 16
    363 #define FXFA_MENU_PASTE 32
    364 /*@}*/
    365 
    366 // file type
    367 /**
    368  * @name Macro Definitions for File Type.
    369  */
    370 /*@{*/
    371 #define FXFA_SAVEAS_XML 1
    372 #define FXFA_SAVEAS_XDP 2
    373 /*@}*/
    374 #endif  // PDF_ENABLE_XFA
    375 
    376 typedef struct _FPDF_FORMFILLINFO {
    377   /**
    378    * Version number of the interface. Currently must be 1 (when PDFium is built
    379    *  without the XFA module) or must be 2 (when built with the XFA module).
    380    **/
    381   int version;
    382 
    383   /* Version 1. */
    384   /**
    385    *Method: Release
    386    *         Give implementation a chance to release any data after the
    387    *         interface is no longer used
    388    *Interface Version:
    389    *         1
    390    *Implementation Required:
    391    *         No
    392    *Comments:
    393    *         Called by Foxit SDK during the final cleanup process.
    394    *Parameters:
    395    *         pThis       -   Pointer to the interface structure itself
    396    *Return Value:
    397    *         None
    398    */
    399   void (*Release)(struct _FPDF_FORMFILLINFO* pThis);
    400 
    401   /**
    402    * Method: FFI_Invalidate
    403    *          Invalidate the client area within the specified rectangle.
    404    * Interface Version:
    405    *          1
    406    * Implementation Required:
    407       *           yes
    408    * Parameters:
    409    *          pThis       -   Pointer to the interface structure itself.
    410    *          page        -   Handle to the page. Returned by FPDF_LoadPage
    411    *function.
    412    *          left        -   Left position of the client area in PDF page
    413    *coordinate.
    414    *          top         -   Top  position of the client area in PDF page
    415    *coordinate.
    416    *          right       -   Right position of the client area in PDF page
    417    *coordinate.
    418    *          bottom      -   Bottom position of the client area in PDF page
    419    *coordinate.
    420    * Return Value:
    421    *          None.
    422    *
    423    *comments:
    424    *          All positions are measured in PDF "user space".
    425    *          Implementation should call FPDF_RenderPageBitmap() function for
    426    *repainting a specified page area.
    427   */
    428   void (*FFI_Invalidate)(struct _FPDF_FORMFILLINFO* pThis,
    429                          FPDF_PAGE page,
    430                          double left,
    431                          double top,
    432                          double right,
    433                          double bottom);
    434 
    435   /**
    436    * Method: FFI_OutputSelectedRect
    437    *          When user is taking the mouse to select texts on a form field,
    438    * this callback function will keep
    439    *          returning the selected areas to the implementation.
    440    *
    441    * Interface Version:
    442    *          1
    443    * Implementation Required:
    444    *          No
    445    * Parameters:
    446    *          pThis       -   Pointer to the interface structure itself.
    447    *          page        -   Handle to the page. Returned by FPDF_LoadPage
    448    * function.
    449    *          left        -   Left position of the client area in PDF page
    450    * coordinate.
    451    *          top         -   Top  position of the client area in PDF page
    452    * coordinate.
    453    *          right       -   Right position of the client area in PDF page
    454    * coordinate.
    455    *          bottom      -   Bottom position of the client area in PDF page
    456    * coordinate.
    457    * Return Value:
    458    *          None.
    459    *
    460    * comments:
    461    *          This CALLBACK function is useful for implementing special text
    462    * selection effect. Implementation should
    463    *          first records the returned rectangles, then draw them one by one
    464    * at the painting period, last,remove all
    465    *          the recorded rectangles when finish painting.
    466   */
    467   void (*FFI_OutputSelectedRect)(struct _FPDF_FORMFILLINFO* pThis,
    468                                  FPDF_PAGE page,
    469                                  double left,
    470                                  double top,
    471                                  double right,
    472                                  double bottom);
    473 
    474   /**
    475   * Method: FFI_SetCursor
    476   *           Set the Cursor shape.
    477   * Interface Version:
    478   *           1
    479   * Implementation Required:
    480   *           yes
    481   * Parameters:
    482   *       pThis       -   Pointer to the interface structure itself.
    483   *       nCursorType -   Cursor type. see Flags for Cursor type for the
    484   * details.
    485   *   Return value:
    486   *       None.
    487   * */
    488   void (*FFI_SetCursor)(struct _FPDF_FORMFILLINFO* pThis, int nCursorType);
    489 
    490   /**
    491   * Method: FFI_SetTimer
    492   *       This method installs a system timer. An interval value is specified,
    493   *       and every time that interval elapses, the system must call into the
    494   *       callback function with the timer ID as returned by this function.
    495   * Interface Version:
    496   *       1
    497   * Implementation Required:
    498   *       yes
    499   * Parameters:
    500   *       pThis       -   Pointer to the interface structure itself.
    501   *       uElapse     -   Specifies the time-out value, in milliseconds.
    502   *       lpTimerFunc -   A pointer to the callback function-TimerCallback.
    503   * Return value:
    504   *       The timer identifier of the new timer if the function is successful.
    505   *       An application passes this value to the FFI_KillTimer method to kill
    506   *       the timer. Nonzero if it is successful; otherwise, it is zero.
    507   * */
    508   int (*FFI_SetTimer)(struct _FPDF_FORMFILLINFO* pThis,
    509                       int uElapse,
    510                       TimerCallback lpTimerFunc);
    511 
    512   /**
    513   * Method: FFI_KillTimer
    514   *       This method uninstalls a system timer identified by nIDEvent, as
    515   *       set by an earlier call to FFI_SetTimer.
    516   * Interface Version:
    517   *       1
    518   * Implementation Required:
    519   *       yes
    520   * Parameters:
    521   *       pThis       -   Pointer to the interface structure itself.
    522   *       nTimerID    -   The timer ID returned by FFI_SetTimer function.
    523   * Return value:
    524   *       None.
    525   * */
    526   void (*FFI_KillTimer)(struct _FPDF_FORMFILLINFO* pThis, int nTimerID);
    527 
    528   /**
    529   * Method: FFI_GetLocalTime
    530   *           This method receives the current local time on the system.
    531   * Interface Version:
    532   *           1
    533   * Implementation Required:
    534   *           yes
    535   * Parameters:
    536   *       pThis       -   Pointer to the interface structure itself.
    537   *   Return value:
    538   *       None.
    539   * */
    540   FPDF_SYSTEMTIME (*FFI_GetLocalTime)(struct _FPDF_FORMFILLINFO* pThis);
    541 
    542   /**
    543   * Method: FFI_OnChange
    544   *           This method will be invoked to notify implementation when the
    545   * value of any FormField on the document had been changed.
    546   * Interface Version:
    547   *           1
    548   * Implementation Required:
    549   *           no
    550   * Parameters:
    551   *       pThis       -   Pointer to the interface structure itself.
    552   *   Return value:
    553   *       None.
    554   * */
    555   void (*FFI_OnChange)(struct _FPDF_FORMFILLINFO* pThis);
    556 
    557   /**
    558   * Method: FFI_GetPage
    559   *           This method receives the page pointer associated with a specified
    560   * page index.
    561   * Interface Version:
    562   *           1
    563   * Implementation Required:
    564   *           yes
    565   * Parameters:
    566   *       pThis       -   Pointer to the interface structure itself.
    567   *       document    -   Handle to document. Returned by FPDF_LoadDocument
    568   * function.
    569   *       nPageIndex  -   Index number of the page. 0 for the first page.
    570   * Return value:
    571   *       Handle to the page. Returned by FPDF_LoadPage function.
    572   * Comments:
    573   *       In some cases, the document-level JavaScript action may refer to a
    574   * page which hadn't been loaded yet.
    575   *       To successfully run the javascript action, implementation need to load
    576   * the page for SDK.
    577   * */
    578   FPDF_PAGE (*FFI_GetPage)(struct _FPDF_FORMFILLINFO* pThis,
    579                              FPDF_DOCUMENT document,
    580                              int nPageIndex);
    581 
    582   /**
    583   * Method: FFI_GetCurrentPage
    584   *       This method receives the current page pointer.
    585   * Interface Version:
    586   *           1
    587   * Implementation Required:
    588   *           yes
    589   * Parameters:
    590   *       pThis       -   Pointer to the interface structure itself.
    591   *       document    -   Handle to document. Returned by FPDF_LoadDocument
    592   * function.
    593   * Return value:
    594   *       Handle to the page. Returned by FPDF_LoadPage function.
    595   * */
    596   FPDF_PAGE (*FFI_GetCurrentPage)(struct _FPDF_FORMFILLINFO* pThis,
    597                                     FPDF_DOCUMENT document);
    598 
    599   /**
    600   * Method: FFI_GetRotation
    601   *           This method receives currently rotation of the page view.
    602   * Interface Version:
    603   *           1
    604   * Implementation Required:
    605   *           yes
    606   * Parameters:
    607   *       pThis       -   Pointer to the interface structure itself.
    608   *       page        -   Handle to page. Returned by FPDF_LoadPage function.
    609   * Return value:
    610   *       The page rotation. Should be 0(0 degree),1(90 degree),2(180
    611   * degree),3(270 degree), in a clockwise direction.
    612   *
    613   * Note: Unused.
    614   * */
    615   int (*FFI_GetRotation)(struct _FPDF_FORMFILLINFO* pThis, FPDF_PAGE page);
    616 
    617   /**
    618   * Method: FFI_ExecuteNamedAction
    619   *           This method will execute an named action.
    620   * Interface Version:
    621   *           1
    622   * Implementation Required:
    623   *           yes
    624   * Parameters:
    625   *       pThis           -   Pointer to the interface structure itself.
    626   *       namedAction     -   A byte string which indicates the named action,
    627   * terminated by 0.
    628   * Return value:
    629   *       None.
    630   * Comments:
    631   *       See the named actions description of <<PDF Reference, version 1.7>>
    632   * for more details.
    633   * */
    634   void (*FFI_ExecuteNamedAction)(struct _FPDF_FORMFILLINFO* pThis,
    635                                  FPDF_BYTESTRING namedAction);
    636   /**
    637   * @brief This method will be called when a text field is getting or losing a
    638   * focus.
    639   *
    640   * @param[in] pThis      Pointer to the interface structure itself.
    641   * @param[in] value      The string value of the form field, in UTF-16LE
    642   * format.
    643   * @param[in] valueLen   The length of the string value, number of characters
    644   * (not bytes).
    645   * @param[in] is_focus   True if the form field is getting a focus, False for
    646   * losing a focus.
    647   *
    648   * @return None.
    649   *
    650   * @note Currently,only support text field and combobox field.
    651   * */
    652   void (*FFI_SetTextFieldFocus)(struct _FPDF_FORMFILLINFO* pThis,
    653                                 FPDF_WIDESTRING value,
    654                                 FPDF_DWORD valueLen,
    655                                 FPDF_BOOL is_focus);
    656 
    657   /**
    658   * Method: FFI_DoURIAction
    659   *           This action resolves to a uniform resource identifier.
    660   * Interface Version:
    661   *           1
    662   * Implementation Required:
    663   *           No
    664   * Parameters:
    665   *       pThis           -   Pointer to the interface structure itself.
    666   *       bsURI           -   A byte string which indicates the uniform resource
    667   * identifier, terminated by 0.
    668   * Return value:
    669   *       None.
    670   * Comments:
    671   *       See the URI actions description of <<PDF Reference, version 1.7>> for
    672   * more details.
    673   * */
    674   void (*FFI_DoURIAction)(struct _FPDF_FORMFILLINFO* pThis,
    675                           FPDF_BYTESTRING bsURI);
    676 
    677   /**
    678   * Method: FFI_DoGoToAction
    679   *           This action changes the view to a specified destination.
    680   * Interface Version:
    681   *           1
    682   * Implementation Required:
    683   *           No
    684   * Parameters:
    685   *       pThis           -   Pointer to the interface structure itself.
    686   *       nPageIndex      -   The index of the PDF page.
    687   *       zoomMode        -   The zoom mode for viewing page. See below.
    688   *       fPosArray       -   The float array which carries the position info.
    689   *       sizeofArray     -   The size of float array.
    690   *
    691   * PDFZoom values:
    692   *   - XYZ = 1
    693   *   - FITPAGE = 2
    694   *   - FITHORZ = 3
    695   *   - FITVERT = 4
    696   *   - FITRECT = 5
    697   *   - FITBBOX = 6
    698   *   - FITBHORZ = 7
    699   *   - FITBVERT = 8
    700   *
    701   * Return value:
    702   *       None.
    703   * Comments:
    704   *       See the Destinations description of <<PDF Reference, version 1.7>> in
    705   *8.2.1 for more details.
    706   **/
    707   void (*FFI_DoGoToAction)(struct _FPDF_FORMFILLINFO* pThis,
    708                            int nPageIndex,
    709                            int zoomMode,
    710                            float* fPosArray,
    711                            int sizeofArray);
    712 
    713   /**
    714   *   pointer to IPDF_JSPLATFORM interface
    715   **/
    716   IPDF_JSPLATFORM* m_pJsPlatform;
    717 
    718 #ifdef PDF_ENABLE_XFA
    719   /* Version 2. */
    720   /**
    721     * Method: FFI_DisplayCaret
    722     *           This method will show the caret at specified position.
    723     * Interface Version:
    724     *           2
    725     * Implementation Required:
    726     *           yes
    727     * Parameters:
    728     *       pThis           -   Pointer to the interface structure itself.
    729     *       page            -   Handle to page. Returned by FPDF_LoadPage
    730     *function.
    731     *       left            -   Left position of the client area in PDF page
    732     *coordinate.
    733     *       top             -   Top position of the client area in PDF page
    734     *coordinate.
    735     *       right           -   Right position of the client area in PDF page
    736     *coordinate.
    737     *       bottom          -   Bottom position of the client area in PDF page
    738     *coordinate.
    739     * Return value:
    740     *       None.
    741     **/
    742   void (*FFI_DisplayCaret)(struct _FPDF_FORMFILLINFO* pThis,
    743                            FPDF_PAGE page,
    744                            FPDF_BOOL bVisible,
    745                            double left,
    746                            double top,
    747                            double right,
    748                            double bottom);
    749 
    750   /**
    751   * Method: FFI_GetCurrentPageIndex
    752   *           This method will get the current page index.
    753   * Interface Version:
    754   *           2
    755   * Implementation Required:
    756   *           yes
    757   * Parameters:
    758   *       pThis           -   Pointer to the interface structure itself.
    759   *       document        -   Handle to document. Returned by FPDF_LoadDocument
    760   *function.
    761   * Return value:
    762   *       The index of current page.
    763   **/
    764   int (*FFI_GetCurrentPageIndex)(struct _FPDF_FORMFILLINFO* pThis,
    765                                  FPDF_DOCUMENT document);
    766 
    767   /**
    768   * Method: FFI_SetCurrentPage
    769   *           This method will set the current page.
    770   * Interface Version:
    771   *           2
    772   * Implementation Required:
    773   *           yes
    774   * Parameters:
    775   *       pThis           -   Pointer to the interface structure itself.
    776   *       document        -   Handle to document. Returned by FPDF_LoadDocument
    777   *function.
    778   *       iCurPage        -   The index of the PDF page.
    779   * Return value:
    780   *       None.
    781   **/
    782   void (*FFI_SetCurrentPage)(struct _FPDF_FORMFILLINFO* pThis,
    783                              FPDF_DOCUMENT document,
    784                              int iCurPage);
    785 
    786   /**
    787   * Method: FFI_GotoURL
    788   *           This method will link to the specified URL.
    789   * Interface Version:
    790   *           2
    791   * Implementation Required:
    792   *           no
    793   * Parameters:
    794   *       pThis           -   Pointer to the interface structure itself.
    795   *       document        -   Handle to document. Returned by FPDF_LoadDocument
    796   *function.
    797   *       wsURL           -   The string value of the URL, in UTF-16LE format.
    798   * Return value:
    799   *       None.
    800   **/
    801   void (*FFI_GotoURL)(struct _FPDF_FORMFILLINFO* pThis,
    802                       FPDF_DOCUMENT document,
    803                       FPDF_WIDESTRING wsURL);
    804 
    805   /**
    806   * Method: FFI_GetPageViewRect
    807   *           This method will get the current page view rectangle.
    808   * Interface Version:
    809   *           2
    810   * Implementation Required:
    811   *           yes
    812   * Parameters:
    813   *       pThis           -   Pointer to the interface structure itself.
    814   *       page            -   Handle to page. Returned by FPDF_LoadPage
    815   *function.
    816   *       left            -   The pointer to receive left position of the page
    817   *view area in PDF page coordinate.
    818   *       top             -   The pointer to receive top position of the page
    819   *view area in PDF page coordinate.
    820   *       right           -   The pointer to receive right position of the
    821   *client area in PDF page coordinate.
    822   *       bottom          -   The pointer to receive bottom position of the
    823   *client area in PDF page coordinate.
    824   * Return value:
    825   *       None.
    826   **/
    827   void (*FFI_GetPageViewRect)(struct _FPDF_FORMFILLINFO* pThis,
    828                               FPDF_PAGE page,
    829                               double* left,
    830                               double* top,
    831                               double* right,
    832                               double* bottom);
    833 
    834   /**
    835   * Method: FFI_PageEvent
    836   *     This method fires when pages have been added to or deleted from the XFA
    837   *     document.
    838   * Interface Version:
    839   *     2
    840   * Implementation Required:
    841   *     yes
    842   * Parameters:
    843   *     pThis       -   Pointer to the interface structure itself.
    844   *     page_count  -   The number of pages to be added to or deleted from the
    845   *                     document.
    846   *     event_type  -   See FXFA_PAGEVIEWEVENT_* above.
    847   * Return value:
    848   *       None.
    849   * Comments:
    850   *           The pages to be added or deleted always start from the last page
    851   *           of document. This means that if parameter page_count is 2 and
    852   *           event type is FXFA_PAGEVIEWEVENT_POSTADDED, 2 new pages have been
    853   *           appended to the tail of document; If page_count is 2 and
    854   *           event type is FXFA_PAGEVIEWEVENT_POSTREMOVED, the last 2 pages
    855   *           have been deleted.
    856   **/
    857   void (*FFI_PageEvent)(struct _FPDF_FORMFILLINFO* pThis,
    858                         int page_count,
    859                         FPDF_DWORD event_type);
    860 
    861   /**
    862   * Method: FFI_PopupMenu
    863   *           This method will track the right context menu for XFA fields.
    864   * Interface Version:
    865   *           2
    866   * Implementation Required:
    867   *           yes
    868   * Parameters:
    869   *       pThis           -   Pointer to the interface structure itself.
    870   *       page            -   Handle to page. Returned by FPDF_LoadPage
    871   *function.
    872   *       hWidget         -   Handle to XFA fields.
    873   *       menuFlag        -   The menu flags. Please refer to macro definition
    874   *of FXFA_MENU_XXX and this can be one or a combination of these macros.
    875   *       x               -   X position of the client area in PDF page
    876   *coordinate.
    877   *       y               -   Y position of the client area in PDF page
    878   *coordinate.
    879   * Return value:
    880   *       TRUE indicates success; otherwise false.
    881   **/
    882   FPDF_BOOL (*FFI_PopupMenu)(struct _FPDF_FORMFILLINFO* pThis,
    883                              FPDF_PAGE page,
    884                              FPDF_WIDGET hWidget,
    885                              int menuFlag,
    886                              float x,
    887                              float y);
    888 
    889   /**
    890   * Method: FFI_OpenFile
    891   *           This method will open the specified file with the specified mode.
    892   * Interface Version
    893   *           2
    894   * Implementation Required:
    895   *           yes
    896   * Parameters:
    897   *       pThis           -   Pointer to the interface structure itself.
    898   *       fileFlag        -   The file flag.Please refer to macro definition of
    899   *FXFA_SAVEAS_XXX and this can be one of these macros.
    900   *       wsURL           -   The string value of the file URL, in UTF-16LE
    901   *format.
    902   *       mode            -   The mode for open file.
    903   * Return value:
    904   *       The handle to FPDF_FILEHANDLER.
    905   **/
    906   FPDF_FILEHANDLER* (*FFI_OpenFile)(struct _FPDF_FORMFILLINFO* pThis,
    907                                     int fileFlag,
    908                                     FPDF_WIDESTRING wsURL,
    909                                     const char* mode);
    910 
    911   /**
    912   * Method: FFI_EmailTo
    913   *           This method will email the specified file stream to the specified
    914   *contacter.
    915   * Interface Version:
    916   *           2
    917   * Implementation Required:
    918   *           yes
    919   * Parameters:
    920   *       pThis           -   Pointer to the interface structure itself.
    921   *       pFileHandler    -   Handle to the FPDF_FILEHANDLER.
    922   *       pTo             -   A semicolon-delimited list of recipients for the
    923   *message,in UTF-16LE format.
    924   *       pSubject        -   The subject of the message,in UTF-16LE format.
    925   *       pCC             -   A semicolon-delimited list of CC recipients for
    926   *the message,in UTF-16LE format.
    927   *       pBcc            -   A semicolon-delimited list of BCC recipients for
    928   *the message,in UTF-16LE format.
    929   *       pMsg            -   Pointer to the data buffer to be sent.Can be
    930   *NULL,in UTF-16LE format.
    931   * Return value:
    932   *       None.
    933   **/
    934   void (*FFI_EmailTo)(struct _FPDF_FORMFILLINFO* pThis,
    935                       FPDF_FILEHANDLER* fileHandler,
    936                       FPDF_WIDESTRING pTo,
    937                       FPDF_WIDESTRING pSubject,
    938                       FPDF_WIDESTRING pCC,
    939                       FPDF_WIDESTRING pBcc,
    940                       FPDF_WIDESTRING pMsg);
    941 
    942   /**
    943   * Method: FFI_UploadTo
    944   *           This method will get upload the specified file stream to the
    945   *specified URL.
    946   * Interface Version:
    947   *           2
    948   * Implementation Required:
    949   *           yes
    950   * Parameters:
    951   *       pThis           -   Pointer to the interface structure itself.
    952   *       pFileHandler    -   Handle to the FPDF_FILEHANDLER.
    953   *       fileFlag        -   The file flag.Please refer to macro definition of
    954   *FXFA_SAVEAS_XXX and this can be one of these macros.
    955   *       uploadTo        -   Pointer to the URL path, in UTF-16LE format.
    956   * Return value:
    957   *       None.
    958   **/
    959   void (*FFI_UploadTo)(struct _FPDF_FORMFILLINFO* pThis,
    960                        FPDF_FILEHANDLER* fileHandler,
    961                        int fileFlag,
    962                        FPDF_WIDESTRING uploadTo);
    963 
    964   /**
    965   * Method: FFI_GetPlatform
    966   *           This method will get the current platform.
    967   * Interface Version:
    968   *           2
    969   * Implementation Required:
    970   *           yes
    971   * Parameters:
    972   *       pThis           -   Pointer to the interface structure itself.
    973   *       platform        -   Pointer to the data buffer to receive the
    974   *platform.Can be NULL,in UTF-16LE format.
    975   *       length          -   The length of the buffer, number of bytes. Can be
    976   *0.
    977   * Return value:
    978   *       The length of the buffer, number of bytes.
    979   **/
    980   int (*FFI_GetPlatform)(struct _FPDF_FORMFILLINFO* pThis,
    981                          void* platform,
    982                          int length);
    983 
    984   /**
    985   * Method: FFI_GetLanguage
    986   *           This method will get the current language.
    987   * Interface Version:
    988   *           2
    989   * Implementation Required:
    990   *           yes
    991   * Parameters:
    992   *       pThis           -   Pointer to the interface structure itself.
    993   *       language        -   Pointer to the data buffer to receive the current
    994   *language.Can be NULL.
    995   *       length          -   The length of the buffer, number of bytes. Can be
    996   *0.
    997   * Return value:
    998   *       The length of the buffer, number of bytes.
    999   **/
   1000   int (*FFI_GetLanguage)(struct _FPDF_FORMFILLINFO* pThis,
   1001                          void* language,
   1002                          int length);
   1003 
   1004   /**
   1005   * Method: FFI_DownloadFromURL
   1006   *           This method will download the specified file from the URL.
   1007   * Interface Version:
   1008   *           2
   1009   * Implementation Required:
   1010   *           yes
   1011   * Parameters:
   1012   *       pThis           -   Pointer to the interface structure itself.
   1013   *       URL             -   The string value of the file URL, in UTF-16LE
   1014   *format.
   1015   * Return value:
   1016   *       The handle to FPDF_FILEHANDLER.
   1017   **/
   1018   FPDF_LPFILEHANDLER (*FFI_DownloadFromURL)(struct _FPDF_FORMFILLINFO* pThis,
   1019                                              FPDF_WIDESTRING URL);
   1020   /**
   1021   * Method: FFI_PostRequestURL
   1022   *           This method will post the request to the server URL.
   1023   * Interface Version:
   1024   *           2
   1025   * Implementation Required:
   1026   *           yes
   1027   * Parameters:
   1028   *       pThis           -   Pointer to the interface structure itself.
   1029   *       wsURL           -   The string value of the server URL, in UTF-16LE
   1030   *format.
   1031   *       wsData          -   The post data,in UTF-16LE format.
   1032   *       wsContentType   -   The content type of the request data,in UTF-16LE
   1033   *format.
   1034   *       wsEncode        -   The encode type,in UTF-16LE format.
   1035   *       wsHeader        -   The request header,in UTF-16LE format.
   1036   *       response        -   Pointer to the FPDF_BSTR to receive the response
   1037   *data from server,,in UTF-16LE format.
   1038   * Return value:
   1039   *       TRUE indicates success, otherwise FALSE.
   1040   **/
   1041   FPDF_BOOL (*FFI_PostRequestURL)(struct _FPDF_FORMFILLINFO* pThis,
   1042                                     FPDF_WIDESTRING wsURL,
   1043                                     FPDF_WIDESTRING wsData,
   1044                                     FPDF_WIDESTRING wsContentType,
   1045                                     FPDF_WIDESTRING wsEncode,
   1046                                     FPDF_WIDESTRING wsHeader,
   1047                                     FPDF_BSTR* respone);
   1048 
   1049   /**
   1050   * Method: FFI_PutRequestURL
   1051   *           This method will put the request to the server URL.
   1052   * Interface Version:
   1053   *           2
   1054   * Implementation Required:
   1055   *           yes
   1056   * Parameters:
   1057   *       pThis           -   Pointer to the interface structure itself.
   1058   *       wsURL           -   The string value of the server URL, in UTF-16LE
   1059   *format.
   1060   *       wsData          -   The put data, in UTF-16LE format.
   1061   *       wsEncode        -   The encode type, in UTR-16LE format.
   1062   * Return value:
   1063   *       TRUE indicates success, otherwise FALSE.
   1064   **/
   1065   FPDF_BOOL (*FFI_PutRequestURL)(struct _FPDF_FORMFILLINFO* pThis,
   1066                                    FPDF_WIDESTRING wsURL,
   1067                                    FPDF_WIDESTRING wsData,
   1068                                    FPDF_WIDESTRING wsEncode);
   1069 #endif  // PDF_ENABLE_XFA
   1070 } FPDF_FORMFILLINFO;
   1071 
   1072 /**
   1073  * Function: FPDFDOC_InitFormFillEnvironment
   1074  *          Init form fill environment.
   1075  * Comments:
   1076  *          This function should be called before any form fill operation.
   1077  * Parameters:
   1078  *          document        -   Handle to document. Returned by
   1079  *FPDF_LoadDocument function.
   1080  *          pFormFillInfo   -   Pointer to a FPDF_FORMFILLINFO structure.
   1081  * Return Value:
   1082  *          Return handler to the form fill module. NULL means fails.
   1083  **/
   1084 DLLEXPORT FPDF_FORMHANDLE STDCALL
   1085 FPDFDOC_InitFormFillEnvironment(FPDF_DOCUMENT document,
   1086                                 FPDF_FORMFILLINFO* formInfo);
   1087 
   1088 /**
   1089  * Function: FPDFDOC_ExitFormFillEnvironment
   1090  *          Exit form fill environment.
   1091  * Parameters:
   1092  *          hHandle     -   Handle to the form fill module. Returned by
   1093  *FPDFDOC_InitFormFillEnvironment.
   1094  * Return Value:
   1095  *          NULL.
   1096  **/
   1097 DLLEXPORT void STDCALL FPDFDOC_ExitFormFillEnvironment(FPDF_FORMHANDLE hHandle);
   1098 
   1099 /**
   1100  * Function: FORM_OnAfterLoadPage
   1101  *          This method is required for implementing all the form related
   1102  *functions. Should be invoked after user
   1103  *          successfully loaded a PDF page, and method
   1104  *FPDFDOC_InitFormFillEnvironment had been invoked.
   1105  * Parameters:
   1106  *          hHandle     -   Handle to the form fill module. Returned by
   1107  *FPDFDOC_InitFormFillEnvironment.
   1108  * Return Value:
   1109  *          NONE.
   1110  **/
   1111 DLLEXPORT void STDCALL FORM_OnAfterLoadPage(FPDF_PAGE page,
   1112                                             FPDF_FORMHANDLE hHandle);
   1113 
   1114 /**
   1115  * Function: FORM_OnBeforeClosePage
   1116  *          This method is required for implementing all the form related
   1117  *functions. Should be invoked before user
   1118  *          close the PDF page.
   1119  * Parameters:
   1120  *          page        -   Handle to the page. Returned by FPDF_LoadPage
   1121  *function.
   1122  *          hHandle     -   Handle to the form fill module. Returned by
   1123  *FPDFDOC_InitFormFillEnvironment.
   1124  * Return Value:
   1125  *          NONE.
   1126  **/
   1127 DLLEXPORT void STDCALL FORM_OnBeforeClosePage(FPDF_PAGE page,
   1128                                               FPDF_FORMHANDLE hHandle);
   1129 
   1130 /**
   1131 * Function: FORM_DoDocumentJSAction
   1132 *           This method is required for performing Document-level JavaScript
   1133 *action. It should be invoked after the PDF document
   1134 *           had been loaded.
   1135 * Parameters:
   1136 *           hHandle     -   Handle to the form fill module. Returned by
   1137 *FPDFDOC_InitFormFillEnvironment.
   1138 * Return Value:
   1139 *           NONE
   1140 * Comments:
   1141 *           If there is Document-level JavaScript action embedded in the
   1142 *document, this method will execute the javascript action;
   1143 *           otherwise, the method will do nothing.
   1144 **/
   1145 DLLEXPORT void STDCALL FORM_DoDocumentJSAction(FPDF_FORMHANDLE hHandle);
   1146 
   1147 /**
   1148 * Function: FORM_DoDocumentOpenAction
   1149 *           This method is required for performing open-action when the document
   1150 *is opened.
   1151 * Parameters:
   1152 *           hHandle     -   Handle to the form fill module. Returned by
   1153 *FPDFDOC_InitFormFillEnvironment.
   1154 * Return Value:
   1155 *           NONE
   1156 * Comments:
   1157 *           This method will do nothing if there is no open-actions embedded in
   1158 *the document.
   1159 **/
   1160 DLLEXPORT void STDCALL FORM_DoDocumentOpenAction(FPDF_FORMHANDLE hHandle);
   1161 
   1162 // additional actions type of document.
   1163 #define FPDFDOC_AACTION_WC \
   1164   0x10  // WC, before closing document, JavaScript action.
   1165 #define FPDFDOC_AACTION_WS \
   1166   0x11  // WS, before saving document, JavaScript action.
   1167 #define FPDFDOC_AACTION_DS 0x12  // DS, after saving document, JavaScript
   1168                                  // action.
   1169 #define FPDFDOC_AACTION_WP \
   1170   0x13  // WP, before printing document, JavaScript action.
   1171 #define FPDFDOC_AACTION_DP \
   1172   0x14  // DP, after printing document, JavaScript action.
   1173 
   1174 /**
   1175 * Function: FORM_DoDocumentAAction
   1176 *           This method is required for performing the document's
   1177 *additional-action.
   1178 * Parameters:
   1179 *           hHandle     -   Handle to the form fill module. Returned by
   1180 *FPDFDOC_InitFormFillEnvironment.
   1181 *           aaType      -   The type of the additional-actions which defined
   1182 *above.
   1183 * Return Value:
   1184 *           NONE
   1185 * Comments:
   1186 *           This method will do nothing if there is no document
   1187 *additional-action corresponding to the specified aaType.
   1188 **/
   1189 
   1190 DLLEXPORT void STDCALL FORM_DoDocumentAAction(FPDF_FORMHANDLE hHandle,
   1191                                               int aaType);
   1192 
   1193 // Additional-action types of page object
   1194 #define FPDFPAGE_AACTION_OPEN \
   1195   0  // /O -- An action to be performed when the page is opened
   1196 #define FPDFPAGE_AACTION_CLOSE \
   1197   1  // /C -- An action to be performed when the page is closed
   1198 
   1199 /**
   1200 * Function: FORM_DoPageAAction
   1201 *           This method is required for performing the page object's
   1202 *additional-action when opened or closed.
   1203 * Parameters:
   1204 *           page        -   Handle to the page. Returned by FPDF_LoadPage
   1205 *function.
   1206 *           hHandle     -   Handle to the form fill module. Returned by
   1207 *FPDFDOC_InitFormFillEnvironment.
   1208 *           aaType      -   The type of the page object's additional-actions
   1209 *which defined above.
   1210 * Return Value:
   1211 *           NONE
   1212 * Comments:
   1213 *           This method will do nothing if no additional-action corresponding to
   1214 *the specified aaType exists.
   1215 **/
   1216 DLLEXPORT void STDCALL FORM_DoPageAAction(FPDF_PAGE page,
   1217                                           FPDF_FORMHANDLE hHandle,
   1218                                           int aaType);
   1219 
   1220 /**
   1221  * Function: FORM_OnMouseMove
   1222  *          You can call this member function when the mouse cursor moves.
   1223  * Parameters:
   1224  *          hHandle     -   Handle to the form fill module. Returned by
   1225  *FPDFDOC_InitFormFillEnvironment.
   1226  *          page        -   Handle to the page. Returned by FPDF_LoadPage
   1227  *function.
   1228  *          modifier        -   Indicates whether various virtual keys are down.
   1229  *          page_x      -   Specifies the x-coordinate of the cursor in PDF user
   1230  *space.
   1231  *          page_y      -   Specifies the y-coordinate of the cursor in PDF user
   1232  *space.
   1233  * Return Value:
   1234  *          TRUE indicates success; otherwise false.
   1235  **/
   1236 DLLEXPORT FPDF_BOOL STDCALL FORM_OnMouseMove(FPDF_FORMHANDLE hHandle,
   1237                                              FPDF_PAGE page,
   1238                                              int modifier,
   1239                                              double page_x,
   1240                                              double page_y);
   1241 
   1242 /**
   1243  * Function: FORM_OnLButtonDown
   1244  *          You can call this member function when the user presses the left
   1245  *mouse button.
   1246  * Parameters:
   1247  *          hHandle     -   Handle to the form fill module. Returned by
   1248  *FPDFDOC_InitFormFillEnvironment.
   1249  *          page        -   Handle to the page. Returned by FPDF_LoadPage
   1250  *function.
   1251  *          modifier        -   Indicates whether various virtual keys are down.
   1252  *          page_x      -   Specifies the x-coordinate of the cursor in PDF user
   1253  *space.
   1254  *          page_y      -   Specifies the y-coordinate of the cursor in PDF user
   1255  *space.
   1256  * Return Value:
   1257  *          TRUE indicates success; otherwise false.
   1258  **/
   1259 DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonDown(FPDF_FORMHANDLE hHandle,
   1260                                                FPDF_PAGE page,
   1261                                                int modifier,
   1262                                                double page_x,
   1263                                                double page_y);
   1264 
   1265 /**
   1266  * Function: FORM_OnLButtonUp
   1267  *          You can call this member function when the user releases the left
   1268  *mouse button.
   1269  * Parameters:
   1270  *          hHandle     -   Handle to the form fill module. Returned by
   1271  *FPDFDOC_InitFormFillEnvironment.
   1272  *          page        -   Handle to the page. Returned by FPDF_LoadPage
   1273  *function.
   1274  *          modifier    -   Indicates whether various virtual keys are down.
   1275  *          page_x      -   Specifies the x-coordinate of the cursor in device.
   1276  *          page_y      -   Specifies the y-coordinate of the cursor in device.
   1277  * Return Value:
   1278  *          TRUE indicates success; otherwise false.
   1279  **/
   1280 DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonUp(FPDF_FORMHANDLE hHandle,
   1281                                              FPDF_PAGE page,
   1282                                              int modifier,
   1283                                              double page_x,
   1284                                              double page_y);
   1285 
   1286 #ifdef PDF_ENABLE_XFA
   1287 DLLEXPORT FPDF_BOOL STDCALL FORM_OnRButtonDown(FPDF_FORMHANDLE hHandle,
   1288                                                FPDF_PAGE page,
   1289                                                int modifier,
   1290                                                double page_x,
   1291                                                double page_y);
   1292 DLLEXPORT FPDF_BOOL STDCALL FORM_OnRButtonUp(FPDF_FORMHANDLE hHandle,
   1293                                              FPDF_PAGE page,
   1294                                              int modifier,
   1295                                              double page_x,
   1296                                              double page_y);
   1297 #endif  // PDF_ENABLE_XFA
   1298 
   1299 /**
   1300  * Function: FORM_OnKeyDown
   1301  *          You can call this member function when a nonsystem key is pressed.
   1302  * Parameters:
   1303  *          hHandle     -   Handle to the form fill module. Returned by
   1304  *FPDFDOC_InitFormFillEnvironment.
   1305  *          page        -   Handle to the page. Returned by FPDF_LoadPage
   1306  *function.
   1307  *          nKeyCode    -   Indicates whether various virtual keys are down.
   1308  *          modifier    -   Contains the scan code, key-transition code,
   1309  *previous key state, and context code.
   1310  * Return Value:
   1311  *          TRUE indicates success; otherwise false.
   1312  **/
   1313 DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyDown(FPDF_FORMHANDLE hHandle,
   1314                                            FPDF_PAGE page,
   1315                                            int nKeyCode,
   1316                                            int modifier);
   1317 
   1318 /**
   1319  * Function: FORM_OnKeyUp
   1320  *          You can call this member function when a nonsystem key is released.
   1321  * Parameters:
   1322  *          hHandle     -   Handle to the form fill module. Returned by
   1323  *FPDFDOC_InitFormFillEnvironment.
   1324  *          page        -   Handle to the page. Returned by FPDF_LoadPage
   1325  *function.
   1326  *          nKeyCode    -   The virtual-key code of the given key.
   1327  *          modifier    -   Contains the scan code, key-transition code,
   1328  *previous key state, and context code.
   1329  * Return Value:
   1330  *          TRUE indicates success; otherwise false.
   1331  **/
   1332 DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyUp(FPDF_FORMHANDLE hHandle,
   1333                                          FPDF_PAGE page,
   1334                                          int nKeyCode,
   1335                                          int modifier);
   1336 
   1337 /**
   1338  * Function: FORM_OnChar
   1339  *          You can call this member function when a keystroke translates to a
   1340  *nonsystem character.
   1341  * Parameters:
   1342  *          hHandle     -   Handle to the form fill module. Returned by
   1343  *FPDFDOC_InitFormFillEnvironment.
   1344  *          page        -   Handle to the page. Returned by FPDF_LoadPage
   1345  *function.
   1346  *          nChar       -   The character code value of the key.
   1347  *          modifier    -   Contains the scan code, key-transition code,
   1348  *previous key state, and context code.
   1349  * Return Value:
   1350  *          TRUE indicates success; otherwise false.
   1351  **/
   1352 DLLEXPORT FPDF_BOOL STDCALL FORM_OnChar(FPDF_FORMHANDLE hHandle,
   1353                                         FPDF_PAGE page,
   1354                                         int nChar,
   1355                                         int modifier);
   1356 
   1357 /**
   1358  * Function: FORM_ForceToKillFocus.
   1359  *          You can call this member function to force to kill the focus of the
   1360  *form field which got focus.
   1361  *          It would kill the focus on the form field, save the value of form
   1362  *field if it's changed by user.
   1363  * Parameters:
   1364  *          hHandle     -   Handle to the form fill module. Returned by
   1365  *FPDFDOC_InitFormFillEnvironment.
   1366  * Return Value:
   1367  *          TRUE indicates success; otherwise false.
   1368  **/
   1369 DLLEXPORT FPDF_BOOL STDCALL FORM_ForceToKillFocus(FPDF_FORMHANDLE hHandle);
   1370 
   1371 // Field Types
   1372 #define FPDF_FORMFIELD_UNKNOWN 0      // Unknown.
   1373 #define FPDF_FORMFIELD_PUSHBUTTON 1   // push button type.
   1374 #define FPDF_FORMFIELD_CHECKBOX 2     // check box type.
   1375 #define FPDF_FORMFIELD_RADIOBUTTON 3  // radio button type.
   1376 #define FPDF_FORMFIELD_COMBOBOX 4     // combo box type.
   1377 #define FPDF_FORMFIELD_LISTBOX 5      // list box type.
   1378 #define FPDF_FORMFIELD_TEXTFIELD 6    // text field type.
   1379 #ifdef PDF_ENABLE_XFA
   1380 #define FPDF_FORMFIELD_XFA 7          // text field type.
   1381 #endif  // PDF_ENABLE_XFA
   1382 
   1383 /**
   1384  * Function: FPDFPage_HasFormFieldAtPoint
   1385  *     Get the form field type by point.
   1386  * Parameters:
   1387  *     hHandle     -   Handle to the form fill module. Returned by
   1388  *                     FPDFDOC_InitFormFillEnvironment().
   1389  *     page        -   Handle to the page. Returned by FPDF_LoadPage().
   1390  *     page_x      -   X position in PDF "user space".
   1391  *     page_y      -   Y position in PDF "user space".
   1392  * Return Value:
   1393  *     Return the type of the form field; -1 indicates no field.
   1394  *     See field types above.
   1395  **/
   1396 DLLEXPORT int STDCALL FPDFPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle,
   1397                                                    FPDF_PAGE page,
   1398                                                    double page_x,
   1399                                                    double page_y);
   1400 
   1401 /**
   1402  * Function: FPDPage_HasFormFieldAtPoint
   1403  *     DEPRECATED. Please use FPDFPage_HasFormFieldAtPoint.
   1404  **/
   1405 DLLEXPORT int STDCALL FPDPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle,
   1406                                                   FPDF_PAGE page,
   1407                                                   double page_x,
   1408                                                   double page_y);
   1409 
   1410 /**
   1411  * Function: FPDFPage_FormFieldZOrderAtPoint
   1412  *     Get the form field z-order by point.
   1413  * Parameters:
   1414  *     hHandle     -   Handle to the form fill module. Returned by
   1415  *                     FPDFDOC_InitFormFillEnvironment().
   1416  *     page        -   Handle to the page. Returned by FPDF_LoadPage().
   1417  *     page_x      -   X position in PDF "user space".
   1418  *     page_y      -   Y position in PDF "user space".
   1419  * Return Value:
   1420  *     Return the z-order of the form field; -1 indicates no field.
   1421  *     Higher numbers are closer to the front.
   1422  **/
   1423 DLLEXPORT int STDCALL FPDFPage_FormFieldZOrderAtPoint(FPDF_FORMHANDLE hHandle,
   1424                                                       FPDF_PAGE page,
   1425                                                       double page_x,
   1426                                                       double page_y);
   1427 
   1428 /**
   1429  * Function: FPDF_SetFormFieldHighlightColor
   1430  *          Set the highlight color of specified or all the form fields in the
   1431  *document.
   1432  * Parameters:
   1433  *          hHandle     -   Handle to the form fill module. Returned by
   1434  *FPDFDOC_InitFormFillEnvironment.
   1435  *          doc         -   Handle to the document. Returned by
   1436  *FPDF_LoadDocument function.
   1437  *          fieldType   -   A 32-bit integer indicating the type of a form
   1438  *field(defined above).
   1439  *          color       -   The highlight color of the form field.Constructed by
   1440  *0xxxrrggbb.
   1441  * Return Value:
   1442  *          NONE.
   1443  * Comments:
   1444  *          When the parameter fieldType is set to zero, the highlight color
   1445  *will be applied to all the form fields in the
   1446  *          document.
   1447  *          Please refresh the client window to show the highlight immediately
   1448  *if necessary.
   1449  **/
   1450 DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightColor(FPDF_FORMHANDLE hHandle,
   1451                                                        int fieldType,
   1452                                                        unsigned long color);
   1453 
   1454 /**
   1455  * Function: FPDF_SetFormFieldHighlightAlpha
   1456  *          Set the transparency of the form field highlight color in the
   1457  *document.
   1458  * Parameters:
   1459  *          hHandle     -   Handle to the form fill module. Returned by
   1460  *FPDFDOC_InitFormFillEnvironment.
   1461  *          doc         -   Handle to the document. Returned by
   1462  *FPDF_LoadDocument function.
   1463  *          alpha       -   The transparency of the form field highlight color.
   1464  *between 0-255.
   1465  * Return Value:
   1466  *          NONE.
   1467  **/
   1468 DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightAlpha(FPDF_FORMHANDLE hHandle,
   1469                                                        unsigned char alpha);
   1470 
   1471 /**
   1472  * Function: FPDF_RemoveFormFieldHighlight
   1473  *          Remove the form field highlight color in the document.
   1474  * Parameters:
   1475  *          hHandle     -   Handle to the form fill module. Returned by
   1476  *FPDFDOC_InitFormFillEnvironment.
   1477  * Return Value:
   1478  *          NONE.
   1479  * Comments:
   1480  *          Please refresh the client window to remove the highlight immediately
   1481  *if necessary.
   1482  **/
   1483 DLLEXPORT void STDCALL FPDF_RemoveFormFieldHighlight(FPDF_FORMHANDLE hHandle);
   1484 
   1485 /**
   1486 * Function: FPDF_FFLDraw
   1487 *           Render FormFields and popup window on a page to a device independent
   1488 *bitmap.
   1489 * Parameters:
   1490 *           hHandle     -   Handle to the form fill module. Returned by
   1491 *FPDFDOC_InitFormFillEnvironment.
   1492 *           bitmap      -   Handle to the device independent bitmap (as the
   1493 *output buffer).
   1494 *                           Bitmap handle can be created by FPDFBitmap_Create
   1495 *function.
   1496 *           page        -   Handle to the page. Returned by FPDF_LoadPage
   1497 *function.
   1498 *           start_x     -   Left pixel position of the display area in the
   1499 *device coordinate.
   1500 *           start_y     -   Top pixel position of the display area in the device
   1501 *coordinate.
   1502 *           size_x      -   Horizontal size (in pixels) for displaying the page.
   1503 *           size_y      -   Vertical size (in pixels) for displaying the page.
   1504 *           rotate      -   Page orientation: 0 (normal), 1 (rotated 90 degrees
   1505 *clockwise),
   1506 *                               2 (rotated 180 degrees), 3 (rotated 90 degrees
   1507 *counter-clockwise).
   1508 *           flags       -   0 for normal display, or combination of flags
   1509 *defined above.
   1510 * Return Value:
   1511 *           None.
   1512 * Comments:
   1513 *           This function is designed to render annotations that are
   1514 *user-interactive, which are widget annotation (for FormFields) and popup
   1515 *annotation.
   1516 *           With FPDF_ANNOT flag, this function will render popup annotation
   1517 *when users mouse-hover on non-widget annotation. Regardless of FPDF_ANNOT flag,
   1518 *this function will always render widget annotations for FormFields.
   1519 *           In order to implement the FormFill functions, implementation should
   1520 *call this function after rendering functions, such as FPDF_RenderPageBitmap or
   1521 *FPDF_RenderPageBitmap_Start, finish rendering the page contents.
   1522 **/
   1523 DLLEXPORT void STDCALL FPDF_FFLDraw(FPDF_FORMHANDLE hHandle,
   1524                                     FPDF_BITMAP bitmap,
   1525                                     FPDF_PAGE page,
   1526                                     int start_x,
   1527                                     int start_y,
   1528                                     int size_x,
   1529                                     int size_y,
   1530                                     int rotate,
   1531                                     int flags);
   1532 
   1533 #ifdef _SKIA_SUPPORT_
   1534 DLLEXPORT void STDCALL FPDF_FFLRecord(FPDF_FORMHANDLE hHandle,
   1535                                       FPDF_RECORDER recorder,
   1536                                       FPDF_PAGE page,
   1537                                       int start_x,
   1538                                       int start_y,
   1539                                       int size_x,
   1540                                       int size_y,
   1541                                       int rotate,
   1542                                       int flags);
   1543 #endif
   1544 
   1545 #ifdef PDF_ENABLE_XFA
   1546 /**
   1547  * Function: FPDF_HasXFAField
   1548  *                      This method is designed to check whether a pdf document
   1549  *has XFA fields.
   1550  * Parameters:
   1551  *                      document                -       Handle to document.
   1552  *Returned by FPDF_LoadDocument function.
   1553  *                      docType                 -       Document type defined as
   1554  *DOCTYPE_xxx.
   1555  * Return Value:
   1556  *                      TRUE indicates that the input document has XFA fields,
   1557  *otherwise FALSE.
   1558  **/
   1559 DLLEXPORT FPDF_BOOL STDCALL FPDF_HasXFAField(FPDF_DOCUMENT document,
   1560                                              int* docType);
   1561 
   1562 /**
   1563  * Function: FPDF_LoadXFA
   1564  *          If the document consists of XFA fields, there should call this
   1565  *method to load XFA fields.
   1566  * Parameters:
   1567  *          document        -   Handle to document. Returned by
   1568  *FPDF_LoadDocument function.
   1569  * Return Value:
   1570  *          TRUE indicates success,otherwise FALSE.
   1571  **/
   1572 DLLEXPORT FPDF_BOOL STDCALL FPDF_LoadXFA(FPDF_DOCUMENT document);
   1573 
   1574 /**
   1575  * Function: FPDF_Widget_Undo
   1576  *          This method will implement the undo feature for the specified xfa
   1577  *field.
   1578  * Parameters:
   1579  *          document        -   Handle to document. Returned by
   1580  *FPDF_LoadDocument function.
   1581  *          hWidget         -   Handle to the xfa field.
   1582  * Return Value:
   1583  *          None.
   1584  **/
   1585 DLLEXPORT void STDCALL FPDF_Widget_Undo(FPDF_DOCUMENT document,
   1586                                         FPDF_WIDGET hWidget);
   1587 /**
   1588  * Function: FPDF_Widget_Redo
   1589  *          This method will implement the redo feature for the specified xfa
   1590  *field.
   1591  * Parameters:
   1592  *          document        -   Handle to document. Returned by
   1593  *FPDF_LoadDocument function.
   1594  *          hWidget         -   Handle to the xfa field.
   1595  * Return Value:
   1596  *          None.
   1597  **/
   1598 DLLEXPORT void STDCALL FPDF_Widget_Redo(FPDF_DOCUMENT document,
   1599                                         FPDF_WIDGET hWidget);
   1600 /**
   1601  * Function: FPDF_Widget_SelectAll
   1602  *          This method will implement the select all feature for the specified
   1603  *xfa field.
   1604  * Parameters:
   1605  *          document        -   Handle to document. Returned by
   1606  *FPDF_LoadDocument function.
   1607  *          hWidget         -   Handle to the xfa field.
   1608  * Return Value:
   1609  *          None.
   1610  **/
   1611 DLLEXPORT void STDCALL FPDF_Widget_SelectAll(FPDF_DOCUMENT document,
   1612                                              FPDF_WIDGET hWidget);
   1613 /**
   1614  * Function: FPDF_Widget_Copy
   1615  *          This method will implement the copy feature for the specified xfa
   1616  *field.
   1617  * Parameters:
   1618  *          document        -   Handle to document. Returned by
   1619  *FPDF_LoadDocument function.
   1620  *          hWidget         -   Handle to the xfa field.
   1621  *          wsText          -   Pointer to data buffer to receive the copied
   1622  *data, in UTF-16LE format.
   1623  *          size            -   The data buffer size.
   1624  * Return Value:
   1625  *          None.
   1626  **/
   1627 DLLEXPORT void STDCALL FPDF_Widget_Copy(FPDF_DOCUMENT document,
   1628                                         FPDF_WIDGET hWidget,
   1629                                         FPDF_WIDESTRING wsText,
   1630                                         FPDF_DWORD* size);
   1631 /**
   1632  * Function: FPDF_Widget_Cut
   1633  *          This method will implement the cut feature for the specified xfa
   1634  *field.
   1635  * Parameters:
   1636  *          document        -   Handle to document. Returned by
   1637  *FPDF_LoadDocument function.
   1638  *          hWidget         -   Handle to the xfa field.
   1639  *          wsText          -   Pointer to data buffer to receive the cut
   1640  *data,in UTF-16LE format.
   1641  *          size            -   The data buffer size,not the byte number.
   1642  * Return Value:
   1643  *          None.
   1644  **/
   1645 DLLEXPORT void STDCALL FPDF_Widget_Cut(FPDF_DOCUMENT document,
   1646                                        FPDF_WIDGET hWidget,
   1647                                        FPDF_WIDESTRING wsText,
   1648                                        FPDF_DWORD* size);
   1649 /**
   1650  * Function: FPDF_Widget_Paste
   1651  *          This method will implement the paste feature for the specified xfa
   1652  *field.
   1653  * Parameters:
   1654  *          document        -   Handle to document. Returned by
   1655  *FPDF_LoadDocument function.
   1656  *          hWidget         -   Handle to the xfa field.
   1657  *          wsText          -   The paste text buffer, in UTF-16LE format.
   1658  *          size            -   The data buffer size,not the byte number.
   1659  * Return Value:
   1660  *          None.
   1661  **/
   1662 DLLEXPORT void STDCALL FPDF_Widget_Paste(FPDF_DOCUMENT document,
   1663                                          FPDF_WIDGET hWidget,
   1664                                          FPDF_WIDESTRING wsText,
   1665                                          FPDF_DWORD size);
   1666 /**
   1667  * Function: FPDF_Widget_ReplaceSpellCheckWord
   1668  *          This method will implement the spell check feature for the specified
   1669  *xfa field.
   1670  * Parameters:
   1671  *          document        -   Handle to document. Returned by
   1672  *FPDF_LoadDocument function.
   1673  *          hWidget         -   Handle to the xfa field.
   1674  *          x               -   The x value of the specified point.
   1675  *          y               -   The y value of the specified point.
   1676  *          bsText          -   The text buffer needed to be speck check, in
   1677  *UTF-16LE format.
   1678  * Return Value:
   1679  *          None.
   1680  **/
   1681 DLLEXPORT void STDCALL
   1682 FPDF_Widget_ReplaceSpellCheckWord(FPDF_DOCUMENT document,
   1683                                   FPDF_WIDGET hWidget,
   1684                                   float x,
   1685                                   float y,
   1686                                   FPDF_BYTESTRING bsText);
   1687 /**
   1688  * Function: FPDF_Widget_GetSpellCheckWords
   1689  *          This method will implement the spell check feature for the specified
   1690  *xfa field.
   1691  * Parameters:
   1692  *          document        -   Handle to document. Returned by
   1693  *FPDF_LoadDocument function.
   1694  *          hWidget         -   Handle to the xfa field.
   1695  *          x               -   The x value of the specified point.
   1696  *          y               -   The y value of the specified point.
   1697  *          stringHandle    -   Pointer to FPDF_STRINGHANDLE to receive the
   1698  *speck check text buffer, in UTF-16LE format.
   1699  * Return Value:
   1700  *          None.
   1701  **/
   1702 DLLEXPORT void STDCALL
   1703 FPDF_Widget_GetSpellCheckWords(FPDF_DOCUMENT document,
   1704                                FPDF_WIDGET hWidget,
   1705                                float x,
   1706                                float y,
   1707                                FPDF_STRINGHANDLE* stringHandle);
   1708 /**
   1709  * Function: FPDF_StringHandleCounts
   1710  *          This method will get the count of the text buffer.
   1711  * Parameters:
   1712  *          stringHandle    -   Pointer to FPDF_STRINGHANDLE.
   1713  * Return Value:
   1714  *          None.
   1715  **/
   1716 DLLEXPORT int STDCALL FPDF_StringHandleCounts(FPDF_STRINGHANDLE stringHandle);
   1717 /**
   1718  * Function: FPDF_StringHandleGetStringByIndex
   1719  *          This method will get the specified index of the text buffer.
   1720  * Parameters:
   1721  *          stringHandle    -   Pointer to FPDF_STRINGHANDLE.
   1722  *          index           -   The specified index of text buffer.
   1723  *          bsText          -   Pointer to data buffer to receive the text
   1724  *buffer, in UTF-16LE format.
   1725  *          size            -   The byte size of data buffer.
   1726  * Return Value:
   1727  *          TRUE indicates success, otherwise FALSE.
   1728  **/
   1729 DLLEXPORT FPDF_BOOL STDCALL
   1730 FPDF_StringHandleGetStringByIndex(FPDF_STRINGHANDLE stringHandle,
   1731                                   int index,
   1732                                   FPDF_BYTESTRING bsText,
   1733                                   FPDF_DWORD* size);
   1734 /**
   1735  * Function: FPDF_StringHandleRelease
   1736  *          This method will release the FPDF_STRINGHANDLE.
   1737  * Parameters:
   1738  *          stringHandle    -   Pointer to FPDF_STRINGHANDLE.
   1739  * Return Value:
   1740  *          None.
   1741  **/
   1742 DLLEXPORT void STDCALL FPDF_StringHandleRelease(FPDF_STRINGHANDLE stringHandle);
   1743 /**
   1744  * Function: FPDF_StringHandleAddString
   1745  *          This method will add the specified text buffer.
   1746  * Parameters:
   1747  *          stringHandle    -   Pointer to FPDF_STRINGHANDLE.
   1748  *          bsText          -   Pointer to data buffer of the text buffer, in
   1749  *UTF-16LE format.
   1750  *          size            -   The byte size of data buffer.
   1751  * Return Value:
   1752  *          TRUE indicates success, otherwise FALSE.
   1753  **/
   1754 DLLEXPORT FPDF_BOOL STDCALL
   1755 FPDF_StringHandleAddString(FPDF_STRINGHANDLE stringHandle,
   1756                            FPDF_BYTESTRING bsText,
   1757                            FPDF_DWORD size);
   1758 #endif  // PDF_ENABLE_XFA
   1759 
   1760 #ifdef __cplusplus
   1761 }
   1762 #endif
   1763 
   1764 #endif  // PUBLIC_FPDF_FORMFILL_H_
   1765