Merge to XFA: Fix a bunch of -Wunused-but-set-variable warnings.
[pdfium.git] / fpdfsdk / include / fpdfformfill.h
index 0e7556e..5191fd7 100644 (file)
-// Copyright 2014 PDFium Authors. All rights reserved.\r
-// Use of this source code is governed by a BSD-style license that can be\r
-// found in the LICENSE file.\r
\r
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
-\r
-\r
-#ifndef _FPDFORMFILL_H\r
-#define _FPDFORMFILL_H\r
-#include "fpdfview.h"\r
-\r
-typedef void* FPDF_FORMHANDLE;\r
-\r
-// Exported Functions\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-typedef struct _IPDF_JsPlatform\r
-{\r
-/**\r
-* Version number of the interface. Currently must be 1.\r
-       **/\r
-       int version;\r
-       \r
-       /** \r
-       * Method: app_alert\r
-       *                       pop up a dialog to show warning or hint.\r
-       * Interface Version:\r
-       *                       1\r
-       * Implementation Required:\r
-       *                       yes\r
-       * Parameters:\r
-       *                       pThis           -       Pointer to the interface structure itself\r
-       *                       Msg                     -       A string containing the message to be displayed.\r
-       *                       Title           -   The title of the dialog.\r
-       *                       Type            -       The stype of button group. \r
-       *                                                       0-OK(default);\r
-       *                                                       1-OK,Cancel;\r
-       *                                                       2-Yes,NO; \r
-       *                                                       3-Yes, NO, Cancel.\r
-       *           nIcon               -   The Icon type. \r
-       *                                                       0-Error(default);\r
-       *                                                       1-Warning;\r
-       *                                                       2-Question;\r
-       *                                                       3-Status.\r
-       * Return Value:\r
-       *                       The return value could be the folowing type:\r
-       *                                                       1-OK;\r
-       *                                                       2-Cancel; \r
-       *                                                       3-NO;\r
-       *                                                       4-Yes;\r
-       */\r
-       int (*app_alert)(struct _IPDF_JsPlatform* pThis, FPDF_WIDESTRING Msg, FPDF_WIDESTRING Title, int Type, int Icon);\r
-       \r
-       /** \r
-       * Method: app_beep\r
-       *                       Causes the system to play a sound. \r
-       * Interface Version:\r
-       *                       1\r
-       * Implementation Required:\r
-       *                       yes\r
-       * Parameters:\r
-       *                       pThis           -       Pointer to the interface structure itself\r
-       *                       nType           -       The sound type.\r
-       *                                                       0 - Error\r
-       *                                                       1 - Warning\r
-       *                                                       2 - Question\r
-       *                                                       3 - Status\r
-       *                                                       4 - Default (default value)\r
-       * Return Value:\r
-       *                       None\r
-       */\r
-       void (*app_beep)(struct _IPDF_JsPlatform* pThis,  int nType);\r
-       \r
-       \r
-       /** \r
-       * Method: app_response\r
-       *                       Displays a dialog box containing a question and an entry field for the user to reply to the question.  \r
-       * Interface Version:\r
-       *                       1\r
-       * Implementation Required:\r
-       *                       yes\r
-       * Parameters:\r
-       *                       pThis           -       Pointer to the interface structure itself\r
-       *                       Question        -       The question to be posed to the user.\r
-       *                       Title           -       The title of the dialog box.\r
-       *                       Default         -       A default value for the answer to the question. If not specified, no default value is presented.\r
-       *                       cLabel          -       A short string to appear in front of and on the same line as the edit text field. \r
-       *                       bPassword       -       If true, indicates that the user's response should show as asterisks (*) or bullets (?) to mask the response, which might be sensitive information. The default is false.               \r
-       *                       response        -       A string buffer allocated by SDK, to receive the user's response. \r
-       *                       length          -   The length of the buffer, number of bytes. Currently, It's always be 2048.\r
-       * Return Value:\r
-       *                       Number of bytes the user input text consumes, not including trailing zeros. If the text exceed 2048 bytes,\r
-       *                       the exceeded part will be ignored.\r
-       * Comments:\r
-       *                       No matter on what platform, the response should be always input in UTF-16LE encoding.\r
-       *                       The return value always indicated number of bytes required for the buffer, even when there is\r
-       *                       no buffer specified, or the buffer size is less then required. In this case, the buffer will not\r
-       *                       be modified.\r
-       */\r
-       int (*app_response)(struct _IPDF_JsPlatform* pThis, FPDF_WIDESTRING Question, FPDF_WIDESTRING Title, FPDF_WIDESTRING Default, FPDF_WIDESTRING cLabel, FPDF_BOOL bPassword, void* response, int length);\r
-       \r
-       \r
-       \r
-       /*\r
-       * Method: Doc_getFilePath\r
-       *                       Get the file path of the current document. \r
-       * Interface Version:\r
-       *                       1\r
-       * Implementation Required:\r
-       *                       yes\r
-       * Parameters:\r
-       *                       pThis           -       Pointer to the interface structure itself\r
-       *                       filePath        -       The string buffer to receive the file path. Can be NULL.\r
-       *                       length          -   The length of the buffer, number of bytes. Can be 0.\r
-       * Return Value:\r
-       *               Number of bytes the filePath consumes, including trailing zeros.\r
-       * Comments:\r
-       *               The filePath should be always input in local encoding.\r
-       *\r
-       *               The return value always indicated number of bytes required for the buffer, even when there is\r
-       *               no buffer specified, or the buffer size is less then required. In this case, the buffer will not\r
-       *               be modified.\r
-       */\r
-       int (*Doc_getFilePath)(struct _IPDF_JsPlatform* pThis, void* filePath, int length);\r
-       \r
-       \r
-       /*\r
-       * Method: Doc_mail\r
-       *                       Mails the data buffer as an attachment to all recipients, with or without user interaction. \r
-       * Interface Version:\r
-       *                       1\r
-       * Implementation Required:\r
-       *                       yes\r
-       * Parameters:\r
-       *                       pThis           -       Pointer to the interface structure itself\r
-       *                       mailData        -       Pointer to the data buffer to be sent.Can be NULL.\r
-       *                       length          -       The size,in bytes, of the buffer pointed by mailData parameter.Can be 0.\r
-       *                       bUI                     -   If true, the rest of the parameters are used in a compose-new-message window that is displayed to the user. If false, the cTo parameter is required and all others are optional.\r
-       *                       To                      -       A semicolon-delimited list of recipients for the message.\r
-       *                       Subject         -   The subject of the message. The length limit is 64 KB.\r
-       *                       CC                      -       A semicolon-delimited list of CC recipients for the message. \r
-       *                       BCC                     -   A semicolon-delimited list of BCC recipients for the message. \r
-       *                       Msg                     -   The content of the message. The length limit is 64 KB.\r
-       * Return Value:\r
-       *                       None.\r
-       * Comments:\r
-       *                       If the parameter mailData is NULL or length is 0, the current document will be mailed as an attachment to all recipients.\r
-       */\r
-       void (*Doc_mail)(struct _IPDF_JsPlatform* pThis,void* mailData, int length,FPDF_BOOL bUI, FPDF_WIDESTRING To, FPDF_WIDESTRING Subject, FPDF_WIDESTRING CC, FPDF_WIDESTRING BCC, FPDF_WIDESTRING Msg); \r
-       \r
-\r
-       /*\r
-       * Method: Doc_print\r
-       *                       Prints all or a specific number of pages of the document.\r
-       * Interface Version:\r
-       *                       1\r
-       * Implementation Required:\r
-       *                       yes\r
-       * Parameters:\r
-       *                       pThis           -       Pointer to the interface structure itself.\r
-       *                       bUI                     -       If true, will cause a UI to be presented to the user to obtain printing information and confirm the action.\r
-       *                       nStart          -       A 0-based index that defines the start of an inclusive range of pages.\r
-       *                       nEnd            -   A 0-based index that defines the end of an inclusive page range.\r
-       *                       bSilent         -   If true, suppresses the cancel dialog box while the document is printing. The default is false.\r
-       *                       bShrinkToFit    -       If true, the page is shrunk (if necessary) to fit within the imageable area of the printed page.\r
-       *                       bPrintAsImage   -       If true, print pages as an image.\r
-       *                       bReverse        -       If true, print from nEnd to nStart.\r
-       *                       bAnnotations    -       If true (the default), annotations are printed.\r
-       */\r
-       void (*Doc_print)(struct _IPDF_JsPlatform* pThis, FPDF_BOOL bUI, int nStart, int nEnd, FPDF_BOOL bSilent ,FPDF_BOOL bShrinkToFit,FPDF_BOOL bPrintAsImage ,FPDF_BOOL bReverse ,FPDF_BOOL bAnnotations);\r
-\r
-       /*\r
-       * Method: Doc_submitForm\r
-       *                       Send the form data to a specified URL.\r
-       * Interface Version:\r
-       *                       1\r
-       * Implementation Required:\r
-       *                       yes\r
-       * Parameters:\r
-       *                       pThis           -       Pointer to the interface structure itself\r
-       *                       formData        -       Pointer to the data buffer to be sent.\r
-       *                       length          -       The size,in bytes, of the buffer pointed by formData parameter.\r
-       *                       URL                     -       The URL to send to.\r
-       * Return Value:\r
-       *                       None.\r
-       *\r
-       */\r
-       void (*Doc_submitForm)(struct _IPDF_JsPlatform* pThis,void* formData, int length, FPDF_WIDESTRING URL);\r
-       \r
-       /*\r
-       * Method: Doc_gotoPage\r
-       *                       Jump to a specified page.\r
-       * Interface Version:\r
-       *                       1\r
-       * Implementation Required:\r
-       *                       yes\r
-       * Parameters:\r
-       *                       pThis           -       Pointer to the interface structure itself\r
-       *                       nPageNum        -       The specified page number, zero for the first page.\r
-       * Return Value:\r
-       *                       None.\r
-       *\r
-       */\r
-       void (*Doc_gotoPage)(struct _IPDF_JsPlatform* pThis, int nPageNum);\r
-       /*\r
-       * Method: Field_browse\r
-       *                       Show a file selection dialog, and return the selected file path.\r
-       * Interface Version:\r
-       *                       1\r
-       * Implementation Required:\r
-       *                       yes\r
-       * Parameters:\r
-       *                       pThis           -       Pointer to the interface structure itself.\r
-       *                       filePath        -       Pointer to the data buffer to receive the file path.Can be NULL.\r
-       *                       length          -   The length of the buffer, number of bytes. Can be 0.\r
-       * Return Value:\r
-       *               Number of bytes the filePath consumes, including trailing zeros.\r
-       * Comments:\r
-       *               The filePath shoule be always input in local encoding.\r
-       */\r
-       int  (*Field_browse)(struct _IPDF_JsPlatform* pThis,void* filePath, int length);\r
-\r
-       /**\r
-       *       pointer to FPDF_FORMFILLINFO interface.\r
-       **/\r
-       void*   m_pFormfillinfo;\r
-} IPDF_JSPLATFORM;\r
-\r
-// Flags for Cursor type\r
-#define FXCT_ARROW     0\r
-#define FXCT_NESW      1               \r
-#define FXCT_NWSE      2               \r
-#define FXCT_VBEAM     3               \r
-#define FXCT_HBEAM     4       \r
-#define FXCT_HAND      5\r
-\r
-/**\r
- * Declares of a pointer type to the callback function for the FFI_SetTimer method.\r
- * Parameters:\r
- *                     idEvent         -       Identifier of the timer. \r
- * Return value:\r
- *                     None. \r
- **/   \r
-typedef void   (*TimerCallback)(int idEvent);\r
-\r
-/**\r
- * Declares of a struct type to the local system time.\r
-**/\r
-typedef struct _FPDF_SYSTEMTIME \r
-{\r
-    unsigned short wYear;                      /* years since 1900 */\r
-    unsigned short wMonth;                     /* months since January - [0,11] */\r
-    unsigned short wDayOfWeek;         /* days since Sunday - [0,6] */\r
-    unsigned short wDay;                       /* day of the month - [1,31] */\r
-    unsigned short wHour;                      /* hours since midnight - [0,23] */\r
-    unsigned short wMinute;                    /* minutes after the hour - [0,59] */\r
-    unsigned short wSecond;                    /* seconds after the minute - [0,59] */\r
-    unsigned short wMilliseconds;      /* milliseconds after the second - [0,999] */\r
-}FPDF_SYSTEMTIME;\r
-\r
-\r
-typedef struct  _FPDF_FORMFILLINFO\r
-{\r
-       /**\r
-        * Version number of the interface. Currently must be 1.\r
-        **/\r
-       int     version;\r
-\r
-               /** \r
-        * Method: Release\r
-        *                      Give implementation a chance to release any data after the interface is no longer used\r
-        * Interface Version:\r
-        *                      1\r
-        * Implementation Required:\r
-        *                      No\r
-        * Comments:\r
-        *                      Called by Foxit SDK during the final cleanup process.\r
-        * Parameters:\r
-        *                      pThis           -       Pointer to the interface structure itself\r
-        * Return Value:\r
-        *                      None\r
-        */\r
-\r
-       void (*Release)(struct _FPDF_FORMFILLINFO* pThis);\r
-\r
-       /** \r
-        * Method: FFI_Invalidate\r
-        *                      Invalidate the client area within the specified rectangle.\r
-        * Interface Version:\r
-        *                      1\r
-        * Implementation Required:\r
-               *                       yes\r
-        * Parameters:\r
-        *                      pThis           -       Pointer to the interface structure itself.\r
-        *                      page            -       Handle to the page. Returned by FPDF_LoadPage function.\r
-        *                      left            -       Left position of the client area in PDF page coordinate.\r
-        *                      top                     -       Top  position of the client area in PDF page coordinate.\r
-        *                      right           -       Right position of the client area in PDF page  coordinate.\r
-        *                      bottom          -       Bottom position of the client area in PDF page coordinate.\r
-        * Return Value:\r
-        *                      None.\r
-        *\r
-        *comments:\r
-        *                      All positions are measured in PDF "user space".\r
-        *                      Implementation should call FPDF_RenderPageBitmap() function for repainting a specified page area.\r
-       */\r
-       void (*FFI_Invalidate)(struct _FPDF_FORMFILLINFO* pThis,FPDF_PAGE page, double left, double top, double right, double bottom);\r
-       \r
-       /** \r
-        * Method: FFI_OutputSelectedRect\r
-        *                      When user is taking the mouse to select texts on a form field, this callback function will keep \r
-        *                      returning the selected areas to the implementation.\r
-        *\r
-        * Interface Version:\r
-        *                      1\r
-        * Implementation Required:\r
-        *                      No\r
-        * Parameters:\r
-        *                      pThis           -       Pointer to the interface structure itself.\r
-        *                      page            -       Handle to the page. Returned by FPDF_LoadPage function.\r
-        *                      left            -       Left position of the client area in PDF page coordinate.\r
-        *                      top                     -       Top  position of the client area in PDF page coordinate.\r
-        *                      right           -       Right position of the client area in PDF page  coordinate.\r
-        *                      bottom          -       Bottom position of the client area in PDF page coordinate.\r
-        * Return Value:\r
-        *                      None.\r
-        *\r
-        * comments:\r
-        *                      This CALLBACK function is useful for implementing special text selection effect. Implementation should\r
-        *                      first records the returned rectangles, then draw them one by one at the painting period, last,remove all \r
-        *                      the recorded rectangles when finish painting.\r
-       */\r
-       void (*FFI_OutputSelectedRect)(struct _FPDF_FORMFILLINFO* pThis,FPDF_PAGE page, double left, double top, double right, double bottom);\r
-\r
-       /** \r
-       * Method: FFI_SetCursor\r
-       *                       Set the Cursor shape.\r
-       * Interface Version:\r
-       *                       1\r
-       * Implementation Required:\r
-       *                       yes\r
-       * Parameters:\r
-       *               pThis           -       Pointer to the interface structure itself.\r
-       *               nCursorType     -       Cursor type. see Flags for Cursor type for the details.\r
-       *       Return value:\r
-       *               None.\r
-       * */\r
-       void (*FFI_SetCursor)(struct _FPDF_FORMFILLINFO* pThis, int nCursorType);\r
-\r
-       /** \r
-       * Method: FFI_SetTimer\r
-       *                       This method installs a system timer. A time-out value is specified, \r
-       *                       and every time a time-out occurs, the system passes a message to\r
-       *                       the TimerProc callback function. \r
-       * Interface Version:\r
-       *                       1\r
-       * Implementation Required:\r
-       *                       yes\r
-       * Parameters:\r
-       *               pThis           -       Pointer to the interface structure itself.\r
-       *               uElapse         -       Specifies the time-out value, in milliseconds.\r
-       *               lpTimerFunc     -       A pointer to the callback function-TimerCallback.\r
-       *       Return value:\r
-       *               The timer identifier of the new timer if the function is successful.\r
-       *               An application passes this value to the FFI_KillTimer method to kill \r
-       *               the timer. Nonzero if it is successful; otherwise, it is zero.\r
-       * */\r
-       int  (*FFI_SetTimer)(struct _FPDF_FORMFILLINFO* pThis, int uElapse, TimerCallback lpTimerFunc);\r
-\r
-       /** \r
-       * Method: FFI_KillTimer\r
-       *                       This method kills the timer event identified by nIDEvent, set by an earlier call to FFI_SetTimer. \r
-       * Interface Version:\r
-       *                       1\r
-       * Implementation Required:\r
-       *                       yes\r
-       * Parameters:\r
-       *               pThis           -       Pointer to the interface structure itself.\r
-       *               nTimerID        -       The timer ID return by FFI_SetTimer function.\r
-       *       Return value:\r
-       *               None.\r
-       * */\r
-       void (*FFI_KillTimer)(struct _FPDF_FORMFILLINFO* pThis, int nTimerID);\r
-\r
-\r
-       /** \r
-       * Method: FFI_GetLocalTime\r
-       *                       This method receives the current local time on the system. \r
-       * Interface Version:\r
-       *                       1\r
-       * Implementation Required:\r
-       *                       yes\r
-       * Parameters:\r
-       *               pThis           -       Pointer to the interface structure itself.\r
-       *       Return value:\r
-       *               None.\r
-       * */\r
-       FPDF_SYSTEMTIME (*FFI_GetLocalTime)(struct _FPDF_FORMFILLINFO* pThis);\r
-\r
-       /** \r
-       * Method: FFI_OnChange\r
-       *                       This method will be invoked to notify implementation when the value of any FormField on the document had been changed.\r
-       * Interface Version:\r
-       *                       1\r
-       * Implementation Required:\r
-       *                       no\r
-       * Parameters:\r
-       *               pThis           -       Pointer to the interface structure itself.\r
-       *       Return value:\r
-       *               None.\r
-       * */\r
-       void (*FFI_OnChange)(struct _FPDF_FORMFILLINFO* pThis);\r
-\r
-       /** \r
-       * Method: FFI_GetPage\r
-       *                       This method receives the page pointer associated with a specified page index.\r
-       * Interface Version:\r
-       *                       1\r
-       * Implementation Required:\r
-       *                       yes\r
-       * Parameters:\r
-       *               pThis           -       Pointer to the interface structure itself.\r
-       *               document        -       Handle to document. Returned by FPDF_LoadDocument function.\r
-       *               nPageIndex  -   Index number of the page. 0 for the first page.\r
-       * Return value:\r
-       *               Handle to the page. Returned by FPDF_LoadPage function.\r
-       * Comments:\r
-       *               In some cases, the document-level JavaScript action may refer to a page which hadn't been loaded yet.\r
-       *               To successfully run the javascript action, implementation need to load the page for SDK.\r
-       * */\r
-       FPDF_PAGE       (*FFI_GetPage)(struct _FPDF_FORMFILLINFO* pThis, FPDF_DOCUMENT document, int nPageIndex);\r
-\r
-       /** \r
-       * Method: FFI_GetCurrentPage\r
-       *               This method receives the current page pointer.\r
-       * Interface Version:\r
-       *                       1\r
-       * Implementation Required:\r
-       *                       yes\r
-       * Parameters:\r
-       *               pThis           -       Pointer to the interface structure itself.\r
-       *               document        -       Handle to document. Returned by FPDF_LoadDocument function.\r
-       * Return value:\r
-       *               Handle to the page. Returned by FPDF_LoadPage function.\r
-       * */\r
-       FPDF_PAGE       (*FFI_GetCurrentPage)(struct _FPDF_FORMFILLINFO* pThis, FPDF_DOCUMENT document);\r
-\r
-       /** \r
-       * Method: FFI_GetRotation\r
-       *                       This method receives currently rotation of the page view.\r
-       * Interface Version:\r
-       *                       1\r
-       * Implementation Required:\r
-       *                       yes\r
-       * Parameters:\r
-       *               pThis           -       Pointer to the interface structure itself.\r
-       *               page            -       Handle to page. Returned by FPDF_LoadPage function.\r
-       * Return value:\r
-       *               The page rotation. Should be 0(0 degree),1(90 degree),2(180 degree),3(270 degree), in a clockwise direction.\r
-       * */\r
-       int     (*FFI_GetRotation)(struct _FPDF_FORMFILLINFO* pThis, FPDF_PAGE page);\r
-\r
-       /** \r
-       * Method: FFI_ExecuteNamedAction\r
-       *                       This method will execute an named action.\r
-       * Interface Version:\r
-       *                       1\r
-       * Implementation Required:\r
-       *                       yes\r
-       * Parameters:\r
-       *               pThis                   -       Pointer to the interface structure itself.\r
-       *               namedAction             -       A byte string which indicates the named action, terminated by 0.\r
-       * Return value:\r
-       *               None.\r
-       * Comments:\r
-       *               See the named actions description of <<PDF Reference, version 1.7>> for more details.  \r
-       * */\r
-       void    (*FFI_ExecuteNamedAction)(struct _FPDF_FORMFILLINFO* pThis, FPDF_BYTESTRING namedAction);\r
-       /** \r
-       * @brief This method will be called when a text field is getting or losing a focus.\r
-       *\r
-       * @param[in] pThis              Pointer to the interface structure itself.\r
-       * @param[in] value              The string value of the form field, in UTF-16LE format.\r
-       * @param[in] valueLen   The length of the string value, number of characters (not bytes).\r
-       * @param[in] is_focus   True if the form field is getting a focus, False for losing a focus.\r
-       *\r
-       * @return None.\r
-       *\r
-       * @note Currently,only support text field and combobox field.\r
-       * */\r
-       void    (*FFI_SetTextFieldFocus)(struct _FPDF_FORMFILLINFO* pThis, FPDF_WIDESTRING value, FPDF_DWORD valueLen, FPDF_BOOL is_focus);\r
-\r
-       \r
-       /** \r
-       * Method: FFI_DoURIAction\r
-       *                       This action resolves to a uniform resource identifier. \r
-       * Interface Version:\r
-       *                       1\r
-       * Implementation Required:\r
-       *                       No\r
-       * Parameters:\r
-       *               pThis                   -       Pointer to the interface structure itself.\r
-       *               bsURI                   -       A byte string which indicates the uniform resource identifier, terminated by 0.\r
-       * Return value:\r
-       *               None.\r
-       * Comments:\r
-       *               See the URI actions description of <<PDF Reference, version 1.7>> for more details.  \r
-       * */\r
-       void    (*FFI_DoURIAction)(struct _FPDF_FORMFILLINFO* pThis, FPDF_BYTESTRING bsURI);\r
-       \r
-       /** \r
-       * Method: FFI_DoGoToAction\r
-       *                       This action changes the view to a specified destination.\r
-       * Interface Version:\r
-       *                       1\r
-       * Implementation Required:\r
-       *                       No\r
-       * Parameters:\r
-       *               pThis                   -       Pointer to the interface structure itself.\r
-       *               nPageIndex              -       The index of the PDF page.\r
-       *               zoomMode                -       The zoom mode for viewing page.See Macros "PDFZOOM_XXX" defined in "fpdfdoc.h". \r
-       *               fPosArray               -       The float array which carries the position info.\r
-       *               sizeofArray             -       The size of float array.\r
-       * Return value:\r
-       *               None.\r
-       * Comments:\r
-       *               See the Destinations description of <<PDF Reference, version 1.7>> in 8.2.1 for more details.  \r
-       **/\r
-       void    (*FFI_DoGoToAction)(struct _FPDF_FORMFILLINFO* pThis, int nPageIndex, int zoomMode, float* fPosArray, int sizeofArray);\r
-       /**\r
-       *       pointer to IPDF_JSPLATFORM interface\r
-       **/\r
-       IPDF_JSPLATFORM*        m_pJsPlatform;\r
-\r
-} FPDF_FORMFILLINFO;\r
-\r
-\r
-\r
-/**\r
- * Function: FPDFDOC_InitFormFillEnviroument\r
- *                     Init form fill environment. \r
- * Comments:\r
- *                     This function should be called before any form fill operation.\r
- * Parameters:\r
- *                     document                -       Handle to document. Returned by FPDF_LoadDocument function.\r
- *                     pFormFillInfo   -       Pointer to a FPDF_FORMFILLINFO structure.\r
- * Return Value:\r
- *                     Return handler to the form fill module. NULL means fails. \r
- **/\r
-DLLEXPORT FPDF_FORMHANDLE STDCALL FPDFDOC_InitFormFillEnviroument(FPDF_DOCUMENT document, FPDF_FORMFILLINFO* formInfo);\r
-\r
-/**\r
- * Function: FPDFDOC_ExitFormFillEnviroument\r
- *                     Exit form fill environment. \r
- * Parameters:\r
- *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.\r
- * Return Value:\r
- *                     NULL.\r
- **/\r
-DLLEXPORT void STDCALL FPDFDOC_ExitFormFillEnviroument(FPDF_FORMHANDLE hHandle);\r
-\r
-/**\r
- * Function: FORM_OnAfterLoadPage\r
- *                     This method is required for implementing all the form related functions. Should be invoked after user \r
- *                     successfully loaded a PDF page, and method FPDFDOC_InitFormFillEnviroument had been invoked.\r
- * Parameters:\r
- *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.\r
- * Return Value:\r
- *                     NONE.\r
- **/\r
-DLLEXPORT void STDCALL FORM_OnAfterLoadPage(FPDF_PAGE page, FPDF_FORMHANDLE hHandle);\r
-\r
-/**\r
- * Function: FORM_OnBeforeClosePage\r
- *                     This method is required for implementing all the form related functions. Should be invoked before user \r
- *                     close the PDF page.\r
- * Parameters:\r
- *                     page            -       Handle to the page. Returned by FPDF_LoadPage function.\r
- *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.\r
- * Return Value:\r
- *                     NONE.\r
- **/\r
-DLLEXPORT void STDCALL FORM_OnBeforeClosePage(FPDF_PAGE page, FPDF_FORMHANDLE hHandle);\r
-\r
-/**\r
-* Function: FORM_DoDocumentJSAction\r
-*                      This method is required for performing Document-level JavaScript action. It should be invoked after the PDF document\r
-*                      had been loaded.\r
-* Parameters:\r
-*                      hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.\r
-* Return Value:\r
-*                      NONE\r
-* Comments:\r
-*                      If there is Document-level JavaScript action embedded in the document, this method will execute the javascript action;\r
-*                      otherwise, the method will do nothing.\r
-**/\r
-DLLEXPORT void STDCALL FORM_DoDocumentJSAction(FPDF_FORMHANDLE hHandle);\r
-\r
-\r
-/**\r
-* Function: FORM_DoDocumentOpenAction\r
-*                      This method is required for performing open-action when the document is opened.\r
-* Parameters:\r
-*                      hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.\r
-* Return Value:\r
-*                      NONE\r
-* Comments:\r
-*                      This method will do nothing if there is no open-actions embedded in the document. \r
-**/\r
-DLLEXPORT void STDCALL FORM_DoDocumentOpenAction(FPDF_FORMHANDLE hHandle);\r
-\r
-\r
-// additional actions type of document.\r
-#define FPDFDOC_AACTION_WC             0x10            //WC, before closing document, JavaScript action.\r
-#define FPDFDOC_AACTION_WS             0x11            //WS, before saving document, JavaScript action.\r
-#define FPDFDOC_AACTION_DS             0x12            //DS, after saving document, JavaScript action.\r
-#define FPDFDOC_AACTION_WP             0x13            //WP, before printing document, JavaScript action.\r
-#define FPDFDOC_AACTION_DP             0x14            //DP, after printing document, JavaScript action. \r
-/**\r
-* Function: FORM_DoDocumentAAction\r
-*                      This method is required for performing the document's additional-action.\r
-* Parameters:\r
-*                      hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.\r
-*                      aaType      -   The type of the additional-actions which defined above.\r
-* Return Value:\r
-*                      NONE\r
-* Comments:\r
-*                      This method will do nothing if there is no document additional-action corresponding to the specified aaType.\r
-**/\r
-\r
-DLLEXPORT void STDCALL FORM_DoDocumentAAction(FPDF_FORMHANDLE hHandle, int aaType);\r
-\r
-// Additional-action types of page object\r
-#define FPDFPAGE_AACTION_OPEN          0               // /O -- An action to be performed when the page is opened\r
-#define FPDFPAGE_AACTION_CLOSE         1               // /C -- An action to be performed when the page is closed\r
-\r
-/**\r
-* Function: FORM_DoPageAAction\r
-*                      This method is required for performing the page object's additional-action when opened or closed.\r
-* Parameters:\r
-*                      page            -       Handle to the page. Returned by FPDF_LoadPage function.\r
-*                      hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.\r
-*                      aaType      -   The type of the page object's additional-actions which defined above.\r
-* Return Value:\r
-*                      NONE\r
-* Comments:\r
-*                      This method will do nothing if no additional-action corresponding to the specified aaType exists.\r
-**/\r
-DLLEXPORT void STDCALL FORM_DoPageAAction(FPDF_PAGE page, FPDF_FORMHANDLE hHandle, int aaType);\r
-\r
-/**\r
- * Function: FORM_OnMouseMove\r
- *                     You can call this member function when the mouse cursor moves. \r
- * Parameters:\r
- *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.\r
- *                     page            -       Handle to the page. Returned by FPDF_LoadPage function.\r
- *                     modifier                -       Indicates whether various virtual keys are down. \r
- *                     page_x          -       Specifies the x-coordinate of the cursor in PDF user space. \r
- *                     page_y          -       Specifies the y-coordinate of the cursor in PDF user space.\r
- * Return Value:\r
- *                     TRUE indicates success; otherwise false.\r
- **/\r
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnMouseMove(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int modifier, double page_x, double page_y);\r
-\r
-/**\r
- * Function: FORM_OnLButtonDown\r
- *                     You can call this member function when the user presses the left mouse button.\r
- * Parameters:\r
- *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.\r
- *                     page            -       Handle to the page. Returned by FPDF_LoadPage function.\r
- *                     modifier                -       Indicates whether various virtual keys are down. \r
- *                     page_x          -       Specifies the x-coordinate of the cursor in PDF user space. \r
- *                     page_y          -       Specifies the y-coordinate of the cursor in PDF user space.\r
- * Return Value:\r
- *                     TRUE indicates success; otherwise false.\r
- **/\r
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonDown(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int modifier, double page_x, double page_y);\r
-\r
-/**\r
- * Function: FORM_OnLButtonUp\r
- *                     You can call this member function when the user releases the left mouse button.\r
- * Parameters:\r
- *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.\r
- *                     page            -       Handle to the page. Returned by FPDF_LoadPage function.\r
- *                     modifier        -       Indicates whether various virtual keys are down. \r
- *                     page_x          -       Specifies the x-coordinate of the cursor in device. \r
- *                     page_y          -       Specifies the y-coordinate of the cursor in device.\r
- * Return Value:\r
- *                     TRUE indicates success; otherwise false.\r
- **/\r
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonUp(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int modifier, double page_x, double page_y);\r
-\r
-/**\r
- * Function: FORM_OnKeyDown\r
- *                     You can call this member function when a nonsystem key is pressed. \r
- * Parameters:\r
- *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.\r
- *                     page            -       Handle to the page. Returned by FPDF_LoadPage function.\r
- *                     nKeyCode        -       Indicates whether various virtual keys are down. \r
- *                     modifier        -       Contains the scan code, key-transition code, previous key state, and context code.\r
- * Return Value:\r
- *                     TRUE indicates success; otherwise false.\r
- **/\r
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyDown(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int nKeyCode, int modifier);\r
-\r
-/**\r
- * Function: FORM_OnKeyUp\r
- *                     You can call this member function when a nonsystem key is released. \r
- * Parameters:\r
- *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.\r
- *                     page            -       Handle to the page. Returned by FPDF_LoadPage function.\r
- *                     nKeyCode        -       The virtual-key code of the given key.\r
- *                     modifier        -       Contains the scan code, key-transition code, previous key state, and context code.\r
- * Return Value:\r
- *                     TRUE indicates success; otherwise false.\r
- **/\r
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyUp(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int nKeyCode, int modifier);\r
-\r
-/**\r
- * Function: FORM_OnChar\r
- *                     You can call this member function when a keystroke translates to a nonsystem character.\r
- * Parameters:\r
- *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.\r
- *                     page            -       Handle to the page. Returned by FPDF_LoadPage function.\r
- *                     nChar           -       The character code value of the key.  \r
- *                     modifier        -       Contains the scan code, key-transition code, previous key state, and context code.\r
- * Return Value:\r
- *                     TRUE indicates success; otherwise false.\r
- **/\r
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnChar(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int nChar, int modifier);\r
-\r
-/**\r
- * Function: FORM_ForceToKillFocus.\r
- *                     You can call this member function to force to kill the focus of the form field which got focus.\r
- *                     It would kill the focus on the form field, save the value of form field if it's changed by user.\r
- * Parameters:\r
- *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.\r
- * Return Value:\r
- *                     TRUE indicates success; otherwise false.\r
- **/\r
-DLLEXPORT FPDF_BOOL STDCALL FORM_ForceToKillFocus(FPDF_FORMHANDLE hHandle);\r
-\r
-// Field Types\r
-#define FPDF_FORMFIELD_UNKNOWN         0               // Unknown.\r
-#define FPDF_FORMFIELD_PUSHBUTTON      1               // push button type.\r
-#define FPDF_FORMFIELD_CHECKBOX                2               // check box type.\r
-#define FPDF_FORMFIELD_RADIOBUTTON     3               // radio button type.\r
-#define FPDF_FORMFIELD_COMBOBOX                4               // combo box type.\r
-#define FPDF_FORMFIELD_LISTBOX         5               // list box type.\r
-#define FPDF_FORMFIELD_TEXTFIELD       6               // text field type.\r
-\r
-/**\r
- * Function: FPDPage_HasFormFieldAtPoint\r
- *                     Check the form filed position by point.\r
- * Parameters:\r
- *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.\r
- *                     page            -       Handle to the page. Returned by FPDF_LoadPage function.\r
- *                     page_x          -       X position in PDF "user space".\r
- *                     page_y          -       Y position in PDF "user space".\r
- * Return Value:\r
- *                     Return the type of the formfiled; -1 indicates no fields.\r
- **/\r
-DLLEXPORT int STDCALL FPDPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle,FPDF_PAGE page,double page_x, double page_y);\r
-\r
-/**\r
- * Function: FPDF_SetFormFieldHighlightColor\r
- *                     Set the highlight color of specified or all the form fields in the document.\r
- * Parameters:\r
- *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.\r
- *                     doc                     -       Handle to the document. Returned by FPDF_LoadDocument function.\r
- *                     fieldType       -       A 32-bit integer indicating the type of a form field(defined above).\r
- *                     color           -       The highlight color of the form field.Constructed by 0xxxrrggbb.\r
- * Return Value:\r
- *                     NONE.\r
- * Comments:\r
- *                     When the parameter fieldType is set to zero, the highlight color will be applied to all the form fields in the \r
- *                     document.\r
- *                     Please refresh the client window to show the highlight immediately if necessary.\r
- **/\r
-DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightColor(FPDF_FORMHANDLE hHandle, int fieldType, unsigned long color);\r
-\r
-/**\r
- * Function: FPDF_SetFormFieldHighlightAlpha\r
- *                     Set the transparency of the form field highlight color in the document.\r
- * Parameters:\r
- *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.\r
- *                     doc                     -       Handle to the document. Returned by FPDF_LoadDocument function.\r
- *                     alpha           -       The transparency of the form field highlight color. between 0-255.\r
- * Return Value:\r
- *                     NONE.\r
- **/\r
-DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightAlpha(FPDF_FORMHANDLE hHandle, unsigned char alpha);\r
-\r
-\r
-/**\r
- * Function: FPDF_RemoveFormFieldHighlight\r
- *                     Remove the form field highlight color in the document.\r
- * Parameters:\r
- *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.\r
- * Return Value:\r
- *                     NONE.\r
- * Comments:\r
- *                     Please refresh the client window to remove the highlight immediately if necessary.\r
- **/\r
-DLLEXPORT void STDCALL FPDF_RemoveFormFieldHighlight(FPDF_FORMHANDLE hHandle);\r
-\r
-/**\r
-* Function: FPDF_FFLDraw\r
-*                      Render FormFeilds on a page to a device independent bitmap.                     \r
-* Parameters:\r
-*                      hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.\r
-*                      bitmap          -       Handle to the device independent bitmap (as the output buffer).\r
-*                                                      Bitmap handle can be created by FPDFBitmap_Create function.\r
-*                      page            -       Handle to the page. Returned by FPDF_LoadPage function.\r
-*                      start_x         -       Left pixel position of the display area in the device coordinate.\r
-*                      start_y         -       Top pixel position of the display area in the device coordinate.\r
-*                      size_x          -       Horizontal size (in pixels) for displaying the page.\r
-*                      size_y          -       Vertical size (in pixels) for displaying the page.\r
-*                      rotate          -       Page orientation: 0 (normal), 1 (rotated 90 degrees clockwise),\r
-*                                                              2 (rotated 180 degrees), 3 (rotated 90 degrees counter-clockwise).\r
-*                      flags           -       0 for normal display, or combination of flags defined above. \r
-* Return Value:\r
-*                      None.\r
-* Comments: \r
-*                      This method is designed to only render annotations and FormFields on the page. \r
-*                      Without FPDF_ANNOT specified for flags, Rendering functions such as FPDF_RenderPageBitmap or FPDF_RenderPageBitmap_Start will only render page contents(without annotations) to a bitmap.\r
-*                      In order to implement the FormFill functions,Implementation should call this method after rendering functions finish rendering the page contents.\r
-**/\r
-DLLEXPORT void STDCALL FPDF_FFLDraw(FPDF_FORMHANDLE hHandle,FPDF_BITMAP bitmap, FPDF_PAGE page, int start_x, int start_y, \r
-                                               int size_x, int size_y, int rotate, int flags);\r
-\r
-\r
-\r
-#ifdef __cplusplus\r
-};\r
-#endif\r
-\r
-#endif //_FPDFORMFILL_H\r
-\r
+// Copyright 2014 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+
+#ifndef _FPDFORMFILL_H
+#define _FPDFORMFILL_H
+#include "fpdfview.h"
+
+typedef void* FPDF_FORMHANDLE;
+
+#define DOCTYPE_PDF          0 //Normal pdf Document
+#define DOCTYPE_DYNIMIC_XFA  1 //Dynimic xfa Document Type
+#define DOCTYPE_STATIC_XFA   2 //Static xfa Document Type
+
+// Exported Functions
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _IPDF_JsPlatform
+{
+/**
+* Version number of the interface. Currently must be 1.
+       **/
+       int version;
+       
+       /** 
+       * Method: app_alert
+       *                       pop up a dialog to show warning or hint.
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *                       pThis           -       Pointer to the interface structure itself
+       *                       Msg                     -       A string containing the message to be displayed.
+       *                       Title           -   The title of the dialog.
+       *                       Type            -       The stype of button group. 
+       *                                                       0-OK(default);
+       *                                                       1-OK,Cancel;
+       *                                                       2-Yes,NO; 
+       *                                                       3-Yes, NO, Cancel.
+       *           nIcon               -   The Icon type. 
+       *                                                       0-Error(default);
+       *                                                       1-Warning;
+       *                                                       2-Question;
+       *                                                       3-Status.
+       *                                                       4-Asterisk
+
+       * Return Value:
+       *                       The return value could be the folowing type:
+       *                                                       1-OK;
+       *                                                       2-Cancel; 
+       *                                                       3-NO;
+       *                                                       4-Yes;
+       */
+       int (*app_alert)(struct _IPDF_JsPlatform* pThis, FPDF_WIDESTRING Msg, FPDF_WIDESTRING Title, int Type, int Icon);
+       
+       /** 
+       * Method: app_beep
+       *                       Causes the system to play a sound. 
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *                       pThis           -       Pointer to the interface structure itself
+       *                       nType           -       The sound type.
+       *                                                       0 - Error
+       *                                                       1 - Warning
+       *                                                       2 - Question
+       *                                                       3 - Status
+       *                                                       4 - Default (default value)
+       * Return Value:
+       *                       None
+       */
+       void (*app_beep)(struct _IPDF_JsPlatform* pThis,  int nType);
+
+       /** 
+       * Method: app_response
+       *                       Displays a dialog box containing a question and an entry field for the user to reply to the question.
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *                       pThis           -       Pointer to the interface structure itself
+       *                       Question        -       The question to be posed to the user.
+       *                       Title           -       The title of the dialog box.
+       *                       Default         -       A default value for the answer to the question. If not specified, no default value is presented.
+       *                       cLabel          -       A short string to appear in front of and on the same line as the edit text field.
+       *                       bPassword       -       If true, indicates that the user's response should show as asterisks (*) or bullets (?) to mask the response, which might be sensitive information. The default is false.
+       *                       response        -       A string buffer allocated by SDK, to receive the user's response.
+       *                       length          -   The length of the buffer, number of bytes. Currently, It's always be 2048.
+       * Return Value:
+       *               Number of bytes the complete user input would actually require, not including trailing zeros, regardless of the value of the length
+       *               parameter or the presence of the response buffer.
+       * Comments:
+       *               No matter on what platform, the response buffer should be always written using UTF-16LE encoding. If a response buffer is
+       *               present and the size of the user input exceeds the capacity of the buffer as specified by the length parameter, only the
+       *               first "length" bytes of the user input are to be written to the buffer.
+       */
+       int (*app_response)(struct _IPDF_JsPlatform* pThis, FPDF_WIDESTRING Question, FPDF_WIDESTRING Title, FPDF_WIDESTRING Default, FPDF_WIDESTRING cLabel, FPDF_BOOL bPassword, void* response, int length);
+
+       /*
+       * Method: Doc_getFilePath
+       *                       Get the file path of the current document. 
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *                       pThis           -       Pointer to the interface structure itself
+       *                       filePath        -       The string buffer to receive the file path. Can be NULL.
+       *                       length          -   The length of the buffer, number of bytes. Can be 0.
+       * Return Value:
+       *               Number of bytes the filePath consumes, including trailing zeros.
+       * Comments:
+       *               The filePath should be always input in local encoding.
+       *
+       *               The return value always indicated number of bytes required for the buffer, even when there is
+       *               no buffer specified, or the buffer size is less then required. In this case, the buffer will not
+       *               be modified.
+       */
+       int (*Doc_getFilePath)(struct _IPDF_JsPlatform* pThis, void* filePath, int length);
+       
+       
+       /*
+       * Method: Doc_mail
+       *                       Mails the data buffer as an attachment to all recipients, with or without user interaction. 
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *                       pThis           -       Pointer to the interface structure itself
+       *                       mailData        -       Pointer to the data buffer to be sent.Can be NULL.
+       *                       length          -       The size,in bytes, of the buffer pointed by mailData parameter.Can be 0.
+       *                       bUI                     -   If true, the rest of the parameters are used in a compose-new-message window that is displayed to the user. If false, the cTo parameter is required and all others are optional.
+       *                       To                      -       A semicolon-delimited list of recipients for the message.
+       *                       Subject         -   The subject of the message. The length limit is 64 KB.
+       *                       CC                      -       A semicolon-delimited list of CC recipients for the message. 
+       *                       BCC                     -   A semicolon-delimited list of BCC recipients for the message. 
+       *                       Msg                     -   The content of the message. The length limit is 64 KB.
+       * Return Value:
+       *                       None.
+       * Comments:
+       *                       If the parameter mailData is NULL or length is 0, the current document will be mailed as an attachment to all recipients.
+       */
+       void (*Doc_mail)(struct _IPDF_JsPlatform* pThis,void* mailData, int length,FPDF_BOOL bUI, FPDF_WIDESTRING To, FPDF_WIDESTRING Subject, FPDF_WIDESTRING CC, FPDF_WIDESTRING BCC, FPDF_WIDESTRING Msg); 
+       
+
+       /*
+       * Method: Doc_print
+       *                       Prints all or a specific number of pages of the document.
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *                       pThis           -       Pointer to the interface structure itself.
+       *                       bUI                     -       If true, will cause a UI to be presented to the user to obtain printing information and confirm the action.
+       *                       nStart          -       A 0-based index that defines the start of an inclusive range of pages.
+       *                       nEnd            -   A 0-based index that defines the end of an inclusive page range.
+       *                       bSilent         -   If true, suppresses the cancel dialog box while the document is printing. The default is false.
+       *                       bShrinkToFit    -       If true, the page is shrunk (if necessary) to fit within the imageable area of the printed page.
+       *                       bPrintAsImage   -       If true, print pages as an image.
+       *                       bReverse        -       If true, print from nEnd to nStart.
+       *                       bAnnotations    -       If true (the default), annotations are printed.
+       */
+       void (*Doc_print)(struct _IPDF_JsPlatform* pThis, FPDF_BOOL bUI, int nStart, int nEnd, FPDF_BOOL bSilent ,FPDF_BOOL bShrinkToFit,FPDF_BOOL bPrintAsImage ,FPDF_BOOL bReverse ,FPDF_BOOL bAnnotations);
+
+       /*
+       * Method: Doc_submitForm
+       *                       Send the form data to a specified URL.
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *                       pThis           -       Pointer to the interface structure itself
+       *                       formData        -       Pointer to the data buffer to be sent.
+       *                       length          -       The size,in bytes, of the buffer pointed by formData parameter.
+       *                       URL                     -       The URL to send to.
+       * Return Value:
+       *                       None.
+       *
+       */
+       void (*Doc_submitForm)(struct _IPDF_JsPlatform* pThis,void* formData, int length, FPDF_WIDESTRING URL);
+       
+       /*
+       * Method: Doc_gotoPage
+       *                       Jump to a specified page.
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *                       pThis           -       Pointer to the interface structure itself
+       *                       nPageNum        -       The specified page number, zero for the first page.
+       * Return Value:
+       *                       None.
+       *
+       */
+       void (*Doc_gotoPage)(struct _IPDF_JsPlatform* pThis, int nPageNum);
+       /*
+       * Method: Field_browse
+       *                       Show a file selection dialog, and return the selected file path.
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *                       pThis           -       Pointer to the interface structure itself.
+       *                       filePath        -       Pointer to the data buffer to receive the file path.Can be NULL.
+       *                       length          -   The length of the buffer, number of bytes. Can be 0.
+       * Return Value:
+       *               Number of bytes the filePath consumes, including trailing zeros.
+       * Comments:
+       *               The filePath shoule be always input in local encoding.
+       */
+       int  (*Field_browse)(struct _IPDF_JsPlatform* pThis, void* filePath, int length);
+
+       /**
+       *       pointer to FPDF_FORMFILLINFO interface.
+       **/
+       void*   m_pFormfillinfo;
+} IPDF_JSPLATFORM;
+
+// Flags for Cursor type
+#define FXCT_ARROW     0
+#define FXCT_NESW      1               
+#define FXCT_NWSE      2               
+#define FXCT_VBEAM     3               
+#define FXCT_HBEAM     4       
+#define FXCT_HAND      5
+
+/**
+ * Declares of a pointer type to the callback function for the FFI_SetTimer method.
+ * Parameters:
+ *                     idEvent         -       Identifier of the timer. 
+ * Return value:
+ *                     None. 
+ **/   
+typedef void   (*TimerCallback)(int idEvent);
+
+/**
+ * Declares of a struct type to the local system time.
+**/
+typedef struct _FPDF_SYSTEMTIME 
+{
+    unsigned short wYear;                      /* years since 1900 */
+    unsigned short wMonth;                     /* months since January - [0,11] */
+    unsigned short wDayOfWeek;         /* days since Sunday - [0,6] */
+    unsigned short wDay;                       /* day of the month - [1,31] */
+    unsigned short wHour;                      /* hours since midnight - [0,23] */
+    unsigned short wMinute;                    /* minutes after the hour - [0,59] */
+    unsigned short wSecond;                    /* seconds after the minute - [0,59] */
+    unsigned short wMilliseconds;      /* milliseconds after the second - [0,999] */
+}FPDF_SYSTEMTIME;
+
+//XFA
+/**
+ * @name Pageview  event flags
+ */
+/*@{*/
+/** @brief After a new pageview is added. */
+#define  FXFA_PAGEVIEWEVENT_POSTADDED          1
+/** @brief After a pageview is removed. */
+#define  FXFA_PAGEVIEWEVENT_POSTREMOVED        3
+/*@}*/
+
+// menu
+/**
+ * @name Macro Definitions for Right Context Menu Features Of XFA Fields
+ */
+/*@{*/
+#define         FXFA_MEMU_COPY                 1
+#define  FXFA_MEMU_CUT                 2
+#define  FXFA_MEMU_SELECTALL   4
+#define  FXFA_MEMU_UNDO                        8
+#define  FXFA_MEMU_REDO                        16
+#define  FXFA_MEMU_PASTE               32
+/*@}*/
+
+// file type
+/**
+ * @name Macro Definitions for File Type.
+ */
+/*@{*/
+#define FXFA_SAVEAS_XML                1
+#define FXFA_SAVEAS_XDP                2
+/*@}*/
+
+typedef struct  _FPDF_FORMFILLINFO
+{
+       /**
+        * Version number of the interface. Currently must be 2 (with XFA module).
+        **/
+       int     version;
+
+               /** 
+        * Method: Release
+        *                      Give implementation a chance to release any data after the interface is no longer used
+        * Interface Version:
+        *                      1
+        * Implementation Required:
+        *                      No
+        * Comments:
+        *                      Called by Foxit SDK during the final cleanup process.
+        * Parameters:
+        *                      pThis           -       Pointer to the interface structure itself
+        * Return Value:
+        *                      None
+        */
+
+       void (*Release)(struct _FPDF_FORMFILLINFO* pThis);
+
+       /** 
+        * Method: FFI_Invalidate
+        *                      Invalidate the client area within the specified rectangle.
+        * Interface Version:
+        *                      1
+        * Implementation Required:
+               *                       yes
+        * Parameters:
+        *                      pThis           -       Pointer to the interface structure itself.
+        *                      page            -       Handle to the page. Returned by FPDF_LoadPage function.
+        *                      left            -       Left position of the client area in PDF page coordinate.
+        *                      top                     -       Top  position of the client area in PDF page coordinate.
+        *                      right           -       Right position of the client area in PDF page  coordinate.
+        *                      bottom          -       Bottom position of the client area in PDF page coordinate.
+        * Return Value:
+        *                      None.
+        *
+        *comments:
+        *                      All positions are measured in PDF "user space".
+        *                      Implementation should call FPDF_RenderPageBitmap() function for repainting a specified page area.
+       */
+       void (*FFI_Invalidate)(struct _FPDF_FORMFILLINFO* pThis,FPDF_PAGE page, double left, double top, double right, double bottom);
+       
+       /** 
+        * Method: FFI_OutputSelectedRect
+        *                      When user is taking the mouse to select texts on a form field, this callback function will keep 
+        *                      returning the selected areas to the implementation.
+        *
+        * Interface Version:
+        *                      1
+        * Implementation Required:
+        *                      No
+        * Parameters:
+        *                      pThis           -       Pointer to the interface structure itself.
+        *                      page            -       Handle to the page. Returned by FPDF_LoadPage function.
+        *                      left            -       Left position of the client area in PDF page coordinate.
+        *                      top                     -       Top  position of the client area in PDF page coordinate.
+        *                      right           -       Right position of the client area in PDF page  coordinate.
+        *                      bottom          -       Bottom position of the client area in PDF page coordinate.
+        * Return Value:
+        *                      None.
+        *
+        * comments:
+        *                      This CALLBACK function is useful for implementing special text selection effect. Implementation should
+        *                      first records the returned rectangles, then draw them one by one at the painting period, last,remove all 
+        *                      the recorded rectangles when finish painting.
+       */
+       void (*FFI_OutputSelectedRect)(struct _FPDF_FORMFILLINFO* pThis,FPDF_PAGE page, double left, double top, double right, double bottom);
+
+       /** 
+       * Method: FFI_SetCursor
+       *                       Set the Cursor shape.
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *               pThis           -       Pointer to the interface structure itself.
+       *               nCursorType     -       Cursor type. see Flags for Cursor type for the details.
+       *       Return value:
+       *               None.
+       * */
+       void (*FFI_SetCursor)(struct _FPDF_FORMFILLINFO* pThis, int nCursorType);
+
+       /** 
+       * Method: FFI_SetTimer
+       *                       This method installs a system timer. A time-out value is specified, 
+       *                       and every time a time-out occurs, the system passes a message to
+       *                       the TimerProc callback function. 
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *               pThis           -       Pointer to the interface structure itself.
+       *               uElapse         -       Specifies the time-out value, in milliseconds.
+       *               lpTimerFunc     -       A pointer to the callback function-TimerCallback.
+       *       Return value:
+       *               The timer identifier of the new timer if the function is successful.
+       *               An application passes this value to the FFI_KillTimer method to kill 
+       *               the timer. Nonzero if it is successful; otherwise, it is zero.
+       * */
+       int  (*FFI_SetTimer)(struct _FPDF_FORMFILLINFO* pThis, int uElapse, TimerCallback lpTimerFunc);
+
+       /** 
+       * Method: FFI_KillTimer
+       *                       This method kills the timer event identified by nIDEvent, set by an earlier call to FFI_SetTimer. 
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *               pThis           -       Pointer to the interface structure itself.
+       *               nTimerID        -       The timer ID return by FFI_SetTimer function.
+       *       Return value:
+       *               None.
+       * */
+       void (*FFI_KillTimer)(struct _FPDF_FORMFILLINFO* pThis, int nTimerID);
+
+
+       /** 
+       * Method: FFI_GetLocalTime
+       *                       This method receives the current local time on the system. 
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *               pThis           -       Pointer to the interface structure itself.
+       *       Return value:
+       *               None.
+       * */
+       FPDF_SYSTEMTIME (*FFI_GetLocalTime)(struct _FPDF_FORMFILLINFO* pThis);
+
+       /** 
+       * Method: FFI_OnChange
+       *                       This method will be invoked to notify implementation when the value of any FormField on the document had been changed.
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       no
+       * Parameters:
+       *               pThis           -       Pointer to the interface structure itself.
+       *       Return value:
+       *               None.
+       * */
+       void (*FFI_OnChange)(struct _FPDF_FORMFILLINFO* pThis);
+
+       /** 
+       * Method: FFI_GetPage
+       *                       This method receives the page pointer associated with a specified page index.
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *               pThis           -       Pointer to the interface structure itself.
+       *               document        -       Handle to document. Returned by FPDF_LoadDocument function.
+       *               nPageIndex  -   Index number of the page. 0 for the first page.
+       * Return value:
+       *               Handle to the page. Returned by FPDF_LoadPage function.
+       * Comments:
+       *               In some cases, the document-level JavaScript action may refer to a page which hadn't been loaded yet.
+       *               To successfully run the javascript action, implementation need to load the page for SDK.
+       * */
+       FPDF_PAGE       (*FFI_GetPage)(struct _FPDF_FORMFILLINFO* pThis, FPDF_DOCUMENT document, int nPageIndex);
+
+       /** 
+       * Method: FFI_GetCurrentPage
+       *               This method receives the current page pointer.
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *               pThis           -       Pointer to the interface structure itself.
+       *               document        -       Handle to document. Returned by FPDF_LoadDocument function.
+       * Return value:
+       *               Handle to the page. Returned by FPDF_LoadPage function.
+       * */
+       FPDF_PAGE       (*FFI_GetCurrentPage)(struct _FPDF_FORMFILLINFO* pThis, FPDF_DOCUMENT document);
+
+       /** 
+       * Method: FFI_GetRotation
+       *                       This method receives currently rotation of the page view.
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *               pThis           -       Pointer to the interface structure itself.
+       *               page            -       Handle to page. Returned by FPDF_LoadPage function.
+       * Return value:
+       *               The page rotation. Should be 0(0 degree),1(90 degree),2(180 degree),3(270 degree), in a clockwise direction.
+       * */
+       int     (*FFI_GetRotation)(struct _FPDF_FORMFILLINFO* pThis, FPDF_PAGE page);
+
+       /** 
+       * Method: FFI_ExecuteNamedAction
+       *                       This method will execute an named action.
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *               pThis                   -       Pointer to the interface structure itself.
+       *               namedAction             -       A byte string which indicates the named action, terminated by 0.
+       * Return value:
+       *               None.
+       * Comments:
+       *               See the named actions description of <<PDF Reference, version 1.7>> for more details.  
+       * */
+       void    (*FFI_ExecuteNamedAction)(struct _FPDF_FORMFILLINFO* pThis, FPDF_BYTESTRING namedAction);
+       /** 
+       * @brief This method will be called when a text field is getting or losing a focus.
+       *
+       * @param[in] pThis              Pointer to the interface structure itself.
+       * @param[in] value              The string value of the form field, in UTF-16LE format.
+       * @param[in] valueLen   The length of the string value, number of characters (not bytes).
+       * @param[in] is_focus   True if the form field is getting a focus, False for losing a focus.
+       *
+       * @return None.
+       *
+       * @note Currently,only support text field and combobox field.
+       * */
+       void    (*FFI_SetTextFieldFocus)(struct _FPDF_FORMFILLINFO* pThis, FPDF_WIDESTRING value, FPDF_DWORD valueLen, FPDF_BOOL is_focus);
+
+       
+       /** 
+       * Method: FFI_DoURIAction
+       *                       This action resolves to a uniform resource identifier. 
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       No
+       * Parameters:
+       *               pThis                   -       Pointer to the interface structure itself.
+       *               bsURI                   -       A byte string which indicates the uniform resource identifier, terminated by 0.
+       * Return value:
+       *               None.
+       * Comments:
+       *               See the URI actions description of <<PDF Reference, version 1.7>> for more details.  
+       * */
+       void    (*FFI_DoURIAction)(struct _FPDF_FORMFILLINFO* pThis, FPDF_BYTESTRING bsURI);
+       
+       /** 
+       * Method: FFI_DoGoToAction
+       *                       This action changes the view to a specified destination.
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       No
+       * Parameters:
+       *               pThis                   -       Pointer to the interface structure itself.
+       *               nPageIndex              -       The index of the PDF page.
+       *               zoomMode                -       The zoom mode for viewing page.See Macros "PDFZOOM_XXX" defined in "fpdfdoc.h". 
+       *               fPosArray               -       The float array which carries the position info.
+       *               sizeofArray             -       The size of float array.
+       * Return value:
+       *               None.
+       * Comments:
+       *               See the Destinations description of <<PDF Reference, version 1.7>> in 8.2.1 for more details.  
+       **/
+       void    (*FFI_DoGoToAction)(struct _FPDF_FORMFILLINFO* pThis, int nPageIndex, int zoomMode, float* fPosArray, int sizeofArray);
+
+  /**
+  *   pointer to IPDF_JSPLATFORM interface
+  **/
+  IPDF_JSPLATFORM*     m_pJsPlatform;
+
+  /**
+       * Method: FFI_DisplayCaret
+       *                       This method will show the caret at specified position.
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *               pThis                   -       Pointer to the interface structure itself.
+       *               page                    -       Handle to page. Returned by FPDF_LoadPage function.
+       *               left                    -       Left position of the client area in PDF page coordinate. 
+       *               top                             -       Top position of the client area in PDF page coordinate.
+       *               right                   -       Right position of the client area in PDF page coordinate.
+       *               bottom                  -       Bottom position of the client area in PDF page coordinate.
+       * Return value:
+       *               None.
+       **/
+       void    (*FFI_DisplayCaret)(struct _FPDF_FORMFILLINFO* pThis, FPDF_PAGE page, FPDF_BOOL bVisible, double left, double top, double right, double bottom);
+       /** 
+       * Method: FFI_GetCurrentPageIndex
+       *                       This method will get the current page index.
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *               pThis                   -       Pointer to the interface structure itself.
+       *               document                -       Handle to document. Returned by FPDF_LoadDocument function.
+       * Return value:
+       *               The index of current page.
+       **/
+       int             (*FFI_GetCurrentPageIndex)(struct _FPDF_FORMFILLINFO* pThis, FPDF_DOCUMENT document);
+       /** 
+       * Method: FFI_SetCurrentPage
+       *                       This method will set the current page.
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *               pThis                   -       Pointer to the interface structure itself.
+       *               document                -       Handle to document. Returned by FPDF_LoadDocument function.
+       *               iCurPage                -       The index of the PDF page.
+       * Return value:
+       *               None.
+       **/
+       void    (*FFI_SetCurrentPage)(struct _FPDF_FORMFILLINFO* pThis, FPDF_DOCUMENT document, int iCurPage);
+       /** 
+       * Method: FFI_GotoURL
+       *                       This method will link to the specified URL.
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       no
+       * Parameters:
+       *               pThis                   -       Pointer to the interface structure itself.
+       *               document                -       Handle to document. Returned by FPDF_LoadDocument function.
+       *               wsURL                   -       The string value of the URL, in UTF-16LE format.
+       * Return value:
+       *               None.
+       **/
+       void    (*FFI_GotoURL)(struct _FPDF_FORMFILLINFO* pThis, FPDF_DOCUMENT document, FPDF_WIDESTRING wsURL);
+       /** 
+       * Method: FFI_GetPageViewRect
+       *                       This method will get the current page view rectangle.
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *               pThis                   -       Pointer to the interface structure itself.
+       *               page                    -       Handle to page. Returned by FPDF_LoadPage function.
+       *               left                    -       The pointer to receive left position of the page view area in PDF page coordinate. 
+       *               top                             -       The pointer to receive top position of the page view area in PDF page coordinate.
+       *               right                   -       The pointer to receive right position of the client area in PDF page coordinate.
+       *               bottom                  -       The pointer to receive bottom position of the client area in PDF page coordinate.
+       * Return value:
+       *               None.
+       **/
+       void    (*FFI_GetPageViewRect)(struct _FPDF_FORMFILLINFO* pThis, FPDF_PAGE page, double* left, double* top, double* right, double* bottom);
+       /** 
+       * Method: FFI_PopupMenu
+       *                       This method will track the right context menu for XFA fields.
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *               pThis                   -       Pointer to the interface structure itself.
+       *               page                    -       Handle to page. Returned by FPDF_LoadPage function.
+       *               hWidget                 -       Handle to XFA fields.
+       *               menuFlag                -       The menu flags. Please refer to macro definition of FXFA_MEMU_XXX and this can be one or a combination of these macros.
+       *               x                               -       X position of the client area in PDF page coordinate.
+       *               y                               -       Y position of the client area in PDF page coordinate.
+       * Return value:
+       *               TRUE indicates success; otherwise false.
+       **/
+       FPDF_BOOL (*FFI_PopupMenu)(struct _FPDF_FORMFILLINFO* pThis, FPDF_PAGE page, FPDF_WIDGET hWidget, int menuFlag, float x, float y);
+       /** 
+       * Method: FFI_OpenFile
+       *                       This method will open the specified file with the specified mode.
+       * Interface Version
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *               pThis                   -       Pointer to the interface structure itself.
+       *               fileFlag                -       The file flag.Please refer to macro definition of FXFA_SAVEAS_XXX and this can be one of these macros.
+       *               wsURL                   -       The string value of the file URL, in UTF-16LE format.
+       *               mode                    -       The mode for open file.
+       * Return value:
+       *               The handle to FPDF_FILEHANDLER.
+       **/
+       FPDF_FILEHANDLER* (*FFI_OpenFile)(struct _FPDF_FORMFILLINFO* pThis, int fileFlag, FPDF_WIDESTRING wsURL, const char* mode);
+       /** 
+       * Method: FFI_EmailTo
+       *                       This method will email the specified file stream to the specified contacter.
+       * Interface Version:
+       *                       1
+       * Implementation Required:
+       *                       yes
+       * Parameters:
+       *               pThis                   -       Pointer to the interface structure itself.
+       *               pFileHandler    -       Handle to the FPDF_FILEHANDLER.
+       *               pTo                             -       A semicolon-delimited list of recipients for the message,in UTF-16LE format.
+       *               pSubject                -   The subject of the message,in UTF-16LE format. 
+       *               pCC                             -       A semicolon-delimited list of CC recipients for the message,in UTF-16LE format.
+       *               pBcc                    -       A semicolon-delimited list of BCC recipients for the message,in UTF-16LE format. 
+       *               pMsg                    -       Pointer to the data buffer to be sent.Can be NULL,in UTF-16LE format.
+       * Return value:
+       *               None.
+       **/
+       void    (*FFI_EmailTo)(struct _FPDF_FORMFILLINFO* pThis, FPDF_FILEHANDLER* fileHandler, FPDF_WIDESTRING pTo, FPDF_WIDESTRING pSubject, FPDF_WIDESTRING pCC, FPDF_WIDESTRING pBcc, FPDF_WIDESTRING pMsg);
+       /** 
+       * Method: FFI_UploadTo
+       *                       This method will get upload the specified file stream to the specified URL.
+       * Interface Version:
+       *                       1
+       * Implementation Required: 
+       *                       yes
+       * Parameters:
+       *               pThis                   -       Pointer to the interface structure itself.
+       *               pFileHandler    -       Handle to the FPDF_FILEHANDLER.
+       *               fileFlag                -       The file flag.Please refer to macro definition of FXFA_SAVEAS_XXX and this can be one of these macros.
+       *               uploadTo                -       Pointer to the URL path, in UTF-16LE format.
+       * Return value:
+       *               None.
+       **/
+       void    (*FFI_UploadTo)(struct _FPDF_FORMFILLINFO* pThis, FPDF_FILEHANDLER* fileHandler, int fileFlag, FPDF_WIDESTRING uploadTo);
+       
+       /** 
+       * Method: FFI_GetPlatform
+       *                       This method will get the current platform.
+       * Interface Version:
+       *                       1
+       * Implementation Required: 
+       *                       yes
+       * Parameters:
+       *               pThis                   -       Pointer to the interface structure itself.
+       *               platform                -       Pointer to the data buffer to receive the platform.Can be NULL,in UTF-16LE format.
+       *               length                  -   The length of the buffer, number of bytes. Can be 0.
+       * Return value:
+       *               The length of the buffer, number of bytes.
+       **/
+       int             (*FFI_GetPlatform)(struct _FPDF_FORMFILLINFO* pThis, void* platform, int length);
+       /** 
+       * Method: FFI_GetLanguage
+       *                       This method will get the current language.
+       * Interface Version:
+       *                       1
+       * Implementation Required: 
+       *                       yes
+       * Parameters:
+       *               pThis                   -       Pointer to the interface structure itself.
+       *               language                -       Pointer to the data buffer to receive the current language.Can be NULL.
+       *               length                  -   The length of the buffer, number of bytes. Can be 0.
+       * Return value:
+       *               The length of the buffer, number of bytes.
+       **/
+       int             (*FFI_GetLanguage)(struct _FPDF_FORMFILLINFO* pThis, void* language, int length);
+       /** 
+       * Method: FFI_DownloadFromURL
+       *                       This method will download the specified file from the URL.
+       * Interface Version:
+       *                       1
+       * Implementation Required: 
+       *                       yes
+       * Parameters:
+       *               pThis                   -       Pointer to the interface structure itself.
+       *               URL                             -       The string value of the file URL, in UTF-16LE format.
+       * Return value:
+       *               The handle to FPDF_FILEHANDLER.
+       **/
+       FPDF_LPFILEHANDLER      (*FFI_DownloadFromURL)(struct _FPDF_FORMFILLINFO* pThis, FPDF_WIDESTRING URL);
+       /** 
+       * Method: FFI_PostRequestURL
+       *                       This method will post the request to the server URL.
+       * Interface Version:
+       *                       1
+       * Implementation Required: 
+       *                       yes
+       * Parameters:
+       *               pThis                   -       Pointer to the interface structure itself.
+       *               wsURL                   -       The string value of the server URL, in UTF-16LE format.
+       *               wsData                  -       The post data,in UTF-16LE format.
+       *               wsContentType   -       The content type of the request data,in UTF-16LE format.
+       *               wsEncode                -       The encode type,in UTF-16LE format.
+       *               wsHeader                -       The request header,in UTF-16LE format.
+       *               response                -       Pointer to the FPDF_BSTR to receive the response data from server,,in UTF-16LE format.
+       * Return value:
+       *               TRUE indicates success, otherwise FALSE.
+       **/
+       FPDF_BOOL       (*FFI_PostRequestURL)(struct _FPDF_FORMFILLINFO* pThis, FPDF_WIDESTRING wsURL, FPDF_WIDESTRING wsData, FPDF_WIDESTRING wsContentType, FPDF_WIDESTRING wsEncode, FPDF_WIDESTRING wsHeader, FPDF_BSTR* respone);
+       /** 
+       * Method: FFI_PutRequestURL
+       *                       This method will put the request to the server URL.
+       * Interface Version:
+       *                       1
+       * Implementation Required: 
+       *                       yes
+       * Parameters:
+       *               pThis                   -       Pointer to the interface structure itself.
+       *               wsURL                   -       The string value of the server URL, in UTF-16LE format.
+       *               wsData                  -       The put data, in UTF-16LE format.
+       *               wsEncode                -       The encode type, in UTR-16LE format.
+       * Return value:
+       *               TRUE indicates success, otherwise FALSE.
+       **/
+       FPDF_BOOL       (*FFI_PutRequestURL)(struct _FPDF_FORMFILLINFO* pThis, FPDF_WIDESTRING wsURL, FPDF_WIDESTRING wsData, FPDF_WIDESTRING wsEncode);
+
+} FPDF_FORMFILLINFO;
+
+
+
+/**
+ * Function: FPDFDOC_InitFormFillEnvironment
+ *                     Init form fill environment. 
+ * Comments:
+ *                     This function should be called before any form fill operation.
+ * Parameters:
+ *                     document                -       Handle to document. Returned by FPDF_LoadDocument function.
+ *                     pFormFillInfo   -       Pointer to a FPDF_FORMFILLINFO structure.
+ * Return Value:
+ *                     Return handler to the form fill module. NULL means fails. 
+ **/
+DLLEXPORT FPDF_FORMHANDLE STDCALL FPDFDOC_InitFormFillEnvironment(FPDF_DOCUMENT document, FPDF_FORMFILLINFO* formInfo);
+
+/**
+ * Function: FPDFDOC_ExitFormFillEnvironment
+ *                     Exit form fill environment. 
+ * Parameters:
+ *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+ * Return Value:
+ *                     NULL.
+ **/
+DLLEXPORT void STDCALL FPDFDOC_ExitFormFillEnvironment(FPDF_FORMHANDLE hHandle);
+
+/**
+ * Function: FORM_OnAfterLoadPage
+ *                     This method is required for implementing all the form related functions. Should be invoked after user 
+ *                     successfully loaded a PDF page, and method FPDFDOC_InitFormFillEnvironment had been invoked.
+ * Parameters:
+ *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+ * Return Value:
+ *                     NONE.
+ **/
+DLLEXPORT void STDCALL FORM_OnAfterLoadPage(FPDF_PAGE page, FPDF_FORMHANDLE hHandle);
+
+/**
+ * Function: FORM_OnBeforeClosePage
+ *                     This method is required for implementing all the form related functions. Should be invoked before user 
+ *                     close the PDF page.
+ * Parameters:
+ *                     page            -       Handle to the page. Returned by FPDF_LoadPage function.
+ *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+ * Return Value:
+ *                     NONE.
+ **/
+DLLEXPORT void STDCALL FORM_OnBeforeClosePage(FPDF_PAGE page, FPDF_FORMHANDLE hHandle);
+
+/**
+* Function: FORM_DoDocumentJSAction
+*                      This method is required for performing Document-level JavaScript action. It should be invoked after the PDF document
+*                      had been loaded.
+* Parameters:
+*                      hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+* Return Value:
+*                      NONE
+* Comments:
+*                      If there is Document-level JavaScript action embedded in the document, this method will execute the javascript action;
+*                      otherwise, the method will do nothing.
+**/
+DLLEXPORT void STDCALL FORM_DoDocumentJSAction(FPDF_FORMHANDLE hHandle);
+
+
+/**
+* Function: FORM_DoDocumentOpenAction
+*                      This method is required for performing open-action when the document is opened.
+* Parameters:
+*                      hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+* Return Value:
+*                      NONE
+* Comments:
+*                      This method will do nothing if there is no open-actions embedded in the document. 
+**/
+DLLEXPORT void STDCALL FORM_DoDocumentOpenAction(FPDF_FORMHANDLE hHandle);
+
+
+// additional actions type of document.
+#define FPDFDOC_AACTION_WC             0x10            //WC, before closing document, JavaScript action.
+#define FPDFDOC_AACTION_WS             0x11            //WS, before saving document, JavaScript action.
+#define FPDFDOC_AACTION_DS             0x12            //DS, after saving document, JavaScript action.
+#define FPDFDOC_AACTION_WP             0x13            //WP, before printing document, JavaScript action.
+#define FPDFDOC_AACTION_DP             0x14            //DP, after printing document, JavaScript action. 
+/**
+* Function: FORM_DoDocumentAAction
+*                      This method is required for performing the document's additional-action.
+* Parameters:
+*                      hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+*                      aaType      -   The type of the additional-actions which defined above.
+* Return Value:
+*                      NONE
+* Comments:
+*                      This method will do nothing if there is no document additional-action corresponding to the specified aaType.
+**/
+
+DLLEXPORT void STDCALL FORM_DoDocumentAAction(FPDF_FORMHANDLE hHandle, int aaType);
+
+// Additional-action types of page object
+#define FPDFPAGE_AACTION_OPEN          0               // /O -- An action to be performed when the page is opened
+#define FPDFPAGE_AACTION_CLOSE         1               // /C -- An action to be performed when the page is closed
+
+/**
+* Function: FORM_DoPageAAction
+*                      This method is required for performing the page object's additional-action when opened or closed.
+* Parameters:
+*                      page            -       Handle to the page. Returned by FPDF_LoadPage function.
+*                      hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+*                      aaType      -   The type of the page object's additional-actions which defined above.
+* Return Value:
+*                      NONE
+* Comments:
+*                      This method will do nothing if no additional-action corresponding to the specified aaType exists.
+**/
+DLLEXPORT void STDCALL FORM_DoPageAAction(FPDF_PAGE page, FPDF_FORMHANDLE hHandle, int aaType);
+
+/**
+ * Function: FORM_OnMouseMove
+ *                     You can call this member function when the mouse cursor moves. 
+ * Parameters:
+ *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+ *                     page            -       Handle to the page. Returned by FPDF_LoadPage function.
+ *                     modifier                -       Indicates whether various virtual keys are down. 
+ *                     page_x          -       Specifies the x-coordinate of the cursor in PDF user space. 
+ *                     page_y          -       Specifies the y-coordinate of the cursor in PDF user space.
+ * Return Value:
+ *                     TRUE indicates success; otherwise false.
+ **/
+DLLEXPORT FPDF_BOOL STDCALL FORM_OnMouseMove(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int modifier, double page_x, double page_y);
+
+/**
+ * Function: FORM_OnLButtonDown
+ *                     You can call this member function when the user presses the left mouse button.
+ * Parameters:
+ *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+ *                     page            -       Handle to the page. Returned by FPDF_LoadPage function.
+ *                     modifier                -       Indicates whether various virtual keys are down. 
+ *                     page_x          -       Specifies the x-coordinate of the cursor in PDF user space. 
+ *                     page_y          -       Specifies the y-coordinate of the cursor in PDF user space.
+ * Return Value:
+ *                     TRUE indicates success; otherwise false.
+ **/
+DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonDown(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int modifier, double page_x, double page_y);
+
+/**
+ * Function: FORM_OnLButtonUp
+ *                     You can call this member function when the user releases the left mouse button.
+ * Parameters:
+ *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+ *                     page            -       Handle to the page. Returned by FPDF_LoadPage function.
+ *                     modifier        -       Indicates whether various virtual keys are down. 
+ *                     page_x          -       Specifies the x-coordinate of the cursor in device. 
+ *                     page_y          -       Specifies the y-coordinate of the cursor in device.
+ * Return Value:
+ *                     TRUE indicates success; otherwise false.
+ **/
+DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonUp(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int modifier, double page_x, double page_y);
+
+DLLEXPORT FPDF_BOOL STDCALL FORM_OnRButtonDown(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int modifier, double page_x, double page_y);
+DLLEXPORT FPDF_BOOL STDCALL FORM_OnRButtonUp(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int modifier, double page_x, double page_y);
+
+/**
+ * Function: FORM_OnKeyDown
+ *                     You can call this member function when a nonsystem key is pressed. 
+ * Parameters:
+ *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+ *                     page            -       Handle to the page. Returned by FPDF_LoadPage function.
+ *                     nKeyCode        -       Indicates whether various virtual keys are down. 
+ *                     modifier        -       Contains the scan code, key-transition code, previous key state, and context code.
+ * Return Value:
+ *                     TRUE indicates success; otherwise false.
+ **/
+DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyDown(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int nKeyCode, int modifier);
+
+/**
+ * Function: FORM_OnKeyUp
+ *                     You can call this member function when a nonsystem key is released. 
+ * Parameters:
+ *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+ *                     page            -       Handle to the page. Returned by FPDF_LoadPage function.
+ *                     nKeyCode        -       The virtual-key code of the given key.
+ *                     modifier        -       Contains the scan code, key-transition code, previous key state, and context code.
+ * Return Value:
+ *                     TRUE indicates success; otherwise false.
+ **/
+DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyUp(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int nKeyCode, int modifier);
+
+/**
+ * Function: FORM_OnChar
+ *                     You can call this member function when a keystroke translates to a nonsystem character.
+ * Parameters:
+ *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+ *                     page            -       Handle to the page. Returned by FPDF_LoadPage function.
+ *                     nChar           -       The character code value of the key.  
+ *                     modifier        -       Contains the scan code, key-transition code, previous key state, and context code.
+ * Return Value:
+ *                     TRUE indicates success; otherwise false.
+ **/
+DLLEXPORT FPDF_BOOL STDCALL FORM_OnChar(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int nChar, int modifier);
+
+/**
+ * Function: FORM_ForceToKillFocus.
+ *                     You can call this member function to force to kill the focus of the form field which got focus.
+ *                     It would kill the focus on the form field, save the value of form field if it's changed by user.
+ * Parameters:
+ *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+ * Return Value:
+ *                     TRUE indicates success; otherwise false.
+ **/
+DLLEXPORT FPDF_BOOL STDCALL FORM_ForceToKillFocus(FPDF_FORMHANDLE hHandle);
+
+// Field Types
+#define FPDF_FORMFIELD_UNKNOWN         0               // Unknown.
+#define FPDF_FORMFIELD_PUSHBUTTON      1               // push button type.
+#define FPDF_FORMFIELD_CHECKBOX                2               // check box type.
+#define FPDF_FORMFIELD_RADIOBUTTON     3               // radio button type.
+#define FPDF_FORMFIELD_COMBOBOX                4               // combo box type.
+#define FPDF_FORMFIELD_LISTBOX         5               // list box type.
+#define FPDF_FORMFIELD_TEXTFIELD       6               // text field type.
+#define FPDF_FORMFIELD_XFA                     7               // text field type.
+/**
+ * Function: FPDPage_HasFormFieldAtPoint
+ *                     Check the form filed position by point.
+ * Parameters:
+ *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+ *                     page            -       Handle to the page. Returned by FPDF_LoadPage function.
+ *                     page_x          -       X position in PDF "user space".
+ *                     page_y          -       Y position in PDF "user space".
+ * Return Value:
+ *                     Return the type of the formfiled; -1 indicates no fields.
+ **/
+DLLEXPORT int STDCALL FPDPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle,FPDF_PAGE page,double page_x, double page_y);
+
+/**
+ * Function: FPDF_SetFormFieldHighlightColor
+ *                     Set the highlight color of specified or all the form fields in the document.
+ * Parameters:
+ *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+ *                     doc                     -       Handle to the document. Returned by FPDF_LoadDocument function.
+ *                     fieldType       -       A 32-bit integer indicating the type of a form field(defined above).
+ *                     color           -       The highlight color of the form field.Constructed by 0xxxrrggbb.
+ * Return Value:
+ *                     NONE.
+ * Comments:
+ *                     When the parameter fieldType is set to zero, the highlight color will be applied to all the form fields in the 
+ *                     document.
+ *                     Please refresh the client window to show the highlight immediately if necessary.
+ **/
+DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightColor(FPDF_FORMHANDLE hHandle, int fieldType, unsigned long color);
+
+/**
+ * Function: FPDF_SetFormFieldHighlightAlpha
+ *                     Set the transparency of the form field highlight color in the document.
+ * Parameters:
+ *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+ *                     doc                     -       Handle to the document. Returned by FPDF_LoadDocument function.
+ *                     alpha           -       The transparency of the form field highlight color. between 0-255.
+ * Return Value:
+ *                     NONE.
+ **/
+DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightAlpha(FPDF_FORMHANDLE hHandle, unsigned char alpha);
+
+
+/**
+ * Function: FPDF_RemoveFormFieldHighlight
+ *                     Remove the form field highlight color in the document.
+ * Parameters:
+ *                     hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+ * Return Value:
+ *                     NONE.
+ * Comments:
+ *                     Please refresh the client window to remove the highlight immediately if necessary.
+ **/
+DLLEXPORT void STDCALL FPDF_RemoveFormFieldHighlight(FPDF_FORMHANDLE hHandle);
+
+/**
+* Function: FPDF_FFLDraw
+*                      Render FormFeilds on a page to a device independent bitmap.                     
+* Parameters:
+*                      hHandle         -       Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+*                      bitmap          -       Handle to the device independent bitmap (as the output buffer).
+*                                                      Bitmap handle can be created by FPDFBitmap_Create function.
+*                      page            -       Handle to the page. Returned by FPDF_LoadPage function.
+*                      start_x         -       Left pixel position of the display area in the device coordinate.
+*                      start_y         -       Top pixel position of the display area in the device coordinate.
+*                      size_x          -       Horizontal size (in pixels) for displaying the page.
+*                      size_y          -       Vertical size (in pixels) for displaying the page.
+*                      rotate          -       Page orientation: 0 (normal), 1 (rotated 90 degrees clockwise),
+*                                                              2 (rotated 180 degrees), 3 (rotated 90 degrees counter-clockwise).
+*                      flags           -       0 for normal display, or combination of flags defined above. 
+* Return Value:
+*                      None.
+* Comments: 
+*                      This method is designed to only render annotations and FormFields on the page. 
+*                      Without FPDF_ANNOT specified for flags, Rendering functions such as FPDF_RenderPageBitmap or FPDF_RenderPageBitmap_Start will only render page contents(without annotations) to a bitmap.
+*                      In order to implement the FormFill functions,Implementation should call this method after rendering functions finish rendering the page contents.
+**/
+DLLEXPORT void STDCALL FPDF_FFLDraw(FPDF_FORMHANDLE hHandle,FPDF_BITMAP bitmap, FPDF_PAGE page, int start_x, int start_y, 
+                                               int size_x, int size_y, int rotate, int flags);
+/**
+ * Function: FPDF_HasXFAField
+ *                      This method is designed to check whether a pdf document has XFA fields.
+ * Parameters:
+ *                      document                -       Handle to document. Returned by FPDF_LoadDocument function.
+ *                      docType                 -       Document type defined as DOCTYPE_xxx.
+ * Return Value:
+ *                      TRUE indicates that the input document has XFA fields, otherwise FALSE.
+ **/
+DLLEXPORT FPDF_BOOL STDCALL FPDF_HasXFAField(FPDF_DOCUMENT document, int& docType);
+
+/**
+ * Function: FPDF_LoadXFA
+ *                     If the document consists of XFA fields, there should call this method to load XFA fields.
+ * Parameters:
+ *                     document                -       Handle to document. Returned by FPDF_LoadDocument function.
+ * Return Value:
+ *                     TRUE indicates success,otherwise FALSE.
+ **/
+DLLEXPORT FPDF_BOOL STDCALL FPDF_LoadXFA(FPDF_DOCUMENT document);
+
+/**
+ * Function: FPDF_Widget_Undo
+ *                     This method will implement the undo feature for the specified xfa field.
+ * Parameters:
+ *                     document                -       Handle to document. Returned by FPDF_LoadDocument function.
+ *                     hWidget                 -       Handle to the xfa field.
+ * Return Value:
+ *                     None.
+ **/
+DLLEXPORT void STDCALL FPDF_Widget_Undo(FPDF_DOCUMENT document, FPDF_WIDGET hWidget);
+/**
+ * Function: FPDF_Widget_Redo
+ *                     This method will implement the redo feature for the specified xfa field.
+ * Parameters:
+ *                     document                -       Handle to document. Returned by FPDF_LoadDocument function.
+ *                     hWidget                 -       Handle to the xfa field.
+ * Return Value:
+ *                     None.
+ **/
+DLLEXPORT void STDCALL FPDF_Widget_Redo(FPDF_DOCUMENT document, FPDF_WIDGET hWidget);
+/**
+ * Function: FPDF_Widget_SelectAll
+ *                     This method will implement the select all feature for the specified xfa field.
+ * Parameters:
+ *                     document                -       Handle to document. Returned by FPDF_LoadDocument function.
+ *                     hWidget                 -       Handle to the xfa field.
+ * Return Value:
+ *                     None.
+ **/
+DLLEXPORT void STDCALL FPDF_Widget_SelectAll(FPDF_DOCUMENT document, FPDF_WIDGET hWidget);
+/**
+ * Function: FPDF_Widget_Copy
+ *                     This method will implement the copy feature for the specified xfa field.
+ * Parameters:
+ *                     document                -       Handle to document. Returned by FPDF_LoadDocument function.
+ *                     hWidget                 -       Handle to the xfa field.
+ *                     wsText                  -       Pointer to data buffer to receive the copied data, in UTF-16LE format.
+ *                     size                    -       The data buffer size.
+ * Return Value:
+ *                     None.
+ **/
+DLLEXPORT void STDCALL FPDF_Widget_Copy(FPDF_DOCUMENT document, FPDF_WIDGET hWidget, FPDF_WIDESTRING wsText, FPDF_DWORD* size);
+/**
+ * Function: FPDF_Widget_Cut
+ *                     This method will implement the cut feature for the specified xfa field.
+ * Parameters:
+ *                     document                -       Handle to document. Returned by FPDF_LoadDocument function.
+ *                     hWidget                 -       Handle to the xfa field.
+ *                     wsText                  -       Pointer to data buffer to receive the cut data,in UTF-16LE format.
+ *                     size                    -       The data buffer size,not the byte number.
+ * Return Value:
+ *                     None.
+ **/
+DLLEXPORT void STDCALL FPDF_Widget_Cut(FPDF_DOCUMENT document, FPDF_WIDGET hWidget, FPDF_WIDESTRING wsText, FPDF_DWORD* size);
+/**
+ * Function: FPDF_Widget_Paste
+ *                     This method will implement the paste feature for the specified xfa field.
+ * Parameters:
+ *                     document                -       Handle to document. Returned by FPDF_LoadDocument function.
+ *                     hWidget                 -       Handle to the xfa field.
+ *                     wsText                  -       The paste text buffer, in UTF-16LE format.
+ *                     size                    -       The data buffer size,not the byte number.
+ * Return Value:
+ *                     None.
+ **/
+DLLEXPORT void STDCALL FPDF_Widget_Paste(FPDF_DOCUMENT document, FPDF_WIDGET hWidget, FPDF_WIDESTRING wsText, FPDF_DWORD size);
+/**
+ * Function: FPDF_Widget_ReplaceSpellCheckWord
+ *                     This method will implement the spell check feature for the specified xfa field.
+ * Parameters:
+ *                     document                -       Handle to document. Returned by FPDF_LoadDocument function.
+ *                     hWidget                 -       Handle to the xfa field.
+ *                     x                               -       The x value of the specified point.
+ *                     y                               -       The y value of the specified point.
+ *                     bsText                  -       The text buffer needed to be speck check, in UTF-16LE format.
+ * Return Value:
+ *                     None.
+ **/
+DLLEXPORT void STDCALL FPDF_Widget_ReplaceSpellCheckWord(FPDF_DOCUMENT document, FPDF_WIDGET hWidget, float x, float y, FPDF_BYTESTRING bsText);
+/**
+ * Function: FPDF_Widget_GetSpellCheckWords
+ *                     This method will implement the spell check feature for the specified xfa field.
+ * Parameters:
+ *                     document                -       Handle to document. Returned by FPDF_LoadDocument function.
+ *                     hWidget                 -       Handle to the xfa field.
+ *                     x                               -       The x value of the specified point.
+ *                     y                               -       The y value of the specified point.
+ *                     stringHandle    -       Pointer to FPDF_STRINGHANDLE to receive the speck check text buffer, in UTF-16LE format.
+ * Return Value:
+ *                     None.
+ **/
+DLLEXPORT void STDCALL FPDF_Widget_GetSpellCheckWords(FPDF_DOCUMENT document, FPDF_WIDGET hWidget, float x, float y, FPDF_STRINGHANDLE* stringHandle);
+/**
+ * Function: FPDF_StringHandleCounts
+ *                     This method will get the count of the text buffer.
+ * Parameters:
+ *                     stringHandle    -       Pointer to FPDF_STRINGHANDLE.
+ * Return Value:
+ *                     None.
+ **/
+DLLEXPORT int STDCALL FPDF_StringHandleCounts(FPDF_STRINGHANDLE stringHandle);
+/**
+ * Function: FPDF_StringHandleGetStringByIndex
+ *                     This method will get the specified index of the text buffer.
+ * Parameters:
+ *                     stringHandle    -       Pointer to FPDF_STRINGHANDLE.
+ *                     index                   -       The specified index of text buffer.
+ *                     bsText                  -       Pointer to data buffer to receive the text buffer, in UTF-16LE format.
+ *                     size                    -       The byte size of data buffer.
+ * Return Value:
+ *                     TRUE indicates success, otherwise FALSE.
+ **/
+DLLEXPORT FPDF_BOOL STDCALL FPDF_StringHandleGetStringByIndex(FPDF_STRINGHANDLE stringHandle, int index, FPDF_BYTESTRING bsText, FPDF_DWORD* size);
+/**
+ * Function: FPDF_StringHandleRelease
+ *                     This method will release the FPDF_STRINGHANDLE.
+ * Parameters:
+ *                     stringHandle    -       Pointer to FPDF_STRINGHANDLE.
+ * Return Value:
+ *                     None.
+ **/
+DLLEXPORT void STDCALL FPDF_StringHandleRelease(FPDF_STRINGHANDLE stringHandle);
+/**
+ * Function: FPDF_StringHandleAddString
+ *                     This method will add the specified text buffer.
+ * Parameters:
+ *                     stringHandle    -       Pointer to FPDF_STRINGHANDLE.
+ *                     bsText                  -       Pointer to data buffer of the text buffer, in UTF-16LE format.
+ *                     size                    -       The byte size of data buffer.
+ * Return Value:
+ *                     TRUE indicates success, otherwise FALSE.
+ **/
+DLLEXPORT FPDF_BOOL STDCALL FPDF_StringHandleAddString(FPDF_STRINGHANDLE stringHandle, FPDF_BYTESTRING bsText, FPDF_DWORD size);
+
+#ifdef __cplusplus
+};
+#endif
+
+#endif //_FPDFORMFILL_H
+