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