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