• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
8 #ifndef _FPDFORMFILL_H
9 #define _FPDFORMFILL_H
10 #include "fpdfview.h"
11 
12 typedef void* FPDF_FORMHANDLE;
13 
14 // Exported Functions
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18 
19 typedef struct _IPDF_JsPlatform
20 {
21 /**
22 * Version number of the interface. Currently must be 1.
23 	**/
24 	int version;
25 
26 	/**
27 	* Method: app_alert
28 	*			pop up a dialog to show warning or hint.
29 	* Interface Version:
30 	*			1
31 	* Implementation Required:
32 	*			yes
33 	* Parameters:
34 	*			pThis		-	Pointer to the interface structure itself
35 	*			Msg			-	A string containing the message to be displayed.
36 	*			Title		-   The title of the dialog.
37 	*			Type		-	The stype of button group.
38 	*							0-OK(default);
39 	*							1-OK,Cancel;
40 	*							2-Yes,NO;
41 	*							3-Yes, NO, Cancel.
42 	*           nIcon		-   The Icon type.
43 	*							0-Error(default);
44 	*							1-Warning;
45 	*							2-Question;
46 	*							3-Status.
47 	* Return Value:
48 	*			The return value could be the folowing type:
49 	*							1-OK;
50 	*							2-Cancel;
51 	*							3-NO;
52 	*							4-Yes;
53 	*/
54 	int (*app_alert)(struct _IPDF_JsPlatform* pThis, FPDF_WIDESTRING Msg, FPDF_WIDESTRING Title, int Type, int Icon);
55 
56 	/**
57 	* Method: app_beep
58 	*			Causes the system to play a sound.
59 	* Interface Version:
60 	*			1
61 	* Implementation Required:
62 	*			yes
63 	* Parameters:
64 	*			pThis		-	Pointer to the interface structure itself
65 	*			nType		-	The sound type.
66 	*							0 - Error
67 	*							1 - Warning
68 	*							2 - Question
69 	*							3 - Status
70 	*							4 - Default (default value)
71 	* Return Value:
72 	*			None
73 	*/
74 	void (*app_beep)(struct _IPDF_JsPlatform* pThis,  int nType);
75 
76 
77 	/**
78 	* Method: app_response
79 	*			Displays a dialog box containing a question and an entry field for the user to reply to the question.
80 	* Interface Version:
81 	*			1
82 	* Implementation Required:
83 	*			yes
84 	* Parameters:
85 	*			pThis		-	Pointer to the interface structure itself
86 	*			Question	-	The question to be posed to the user.
87 	*			Title		-	The title of the dialog box.
88 	*			Default		-	A default value for the answer to the question. If not specified, no default value is presented.
89 	*			cLabel		-	A short string to appear in front of and on the same line as the edit text field.
90 	*			bPassword	-	If true, indicates that the user's response should show as asterisks (*) or bullets (?) to mask the response, which might be sensitive information. The default is false.
91 	*			response	-	A string buffer allocated by SDK, to receive the user's response.
92 	*			length		-   The length of the buffer, number of bytes. Currently, It's always be 2048.
93 	* Return Value:
94 	*			Number of bytes the user input text consumes, not including trailing zeros. If the text exceed 2048 bytes,
95 	*			the exceeded part will be ignored.
96 	* Comments:
97 	*			No matter on what platform, the response should be always input in UTF-16LE encoding.
98 	*			The return value always indicated number of bytes required for the buffer, even when there is
99 	*			no buffer specified, or the buffer size is less then required. In this case, the buffer will not
100 	*			be modified.
101 	*/
102 	int (*app_response)(struct _IPDF_JsPlatform* pThis, FPDF_WIDESTRING Question, FPDF_WIDESTRING Title, FPDF_WIDESTRING Default, FPDF_WIDESTRING cLabel, FPDF_BOOL bPassword, void* response, int length);
103 
104 
105 
106 	/*
107 	* Method: Doc_getFilePath
108 	*			Get the file path of the current document.
109 	* Interface Version:
110 	*			1
111 	* Implementation Required:
112 	*			yes
113 	* Parameters:
114 	*			pThis		-	Pointer to the interface structure itself
115 	*			filePath	-	The string buffer to receive the file path. Can be NULL.
116 	*			length		-   The length of the buffer, number of bytes. Can be 0.
117 	* Return Value:
118 	*		Number of bytes the filePath consumes, including trailing zeros.
119 	* Comments:
120 	*		The filePath should be always input in local encoding.
121 	*
122 	*		The return value always indicated number of bytes required for the buffer, even when there is
123 	*		no buffer specified, or the buffer size is less then required. In this case, the buffer will not
124 	*		be modified.
125 	*/
126 	int (*Doc_getFilePath)(struct _IPDF_JsPlatform* pThis, void* filePath, int length);
127 
128 
129 	/*
130 	* Method: Doc_mail
131 	*			Mails the data buffer as an attachment to all recipients, with or without user interaction.
132 	* Interface Version:
133 	*			1
134 	* Implementation Required:
135 	*			yes
136 	* Parameters:
137 	*			pThis		-	Pointer to the interface structure itself
138 	*			mailData	-	Pointer to the data buffer to be sent.Can be NULL.
139 	*			length		-	The size,in bytes, of the buffer pointed by mailData parameter.Can be 0.
140 	*			bUI			-   If true, the rest of the parameters are used in a compose-new-message window that is displayed to the user. If false, the cTo parameter is required and all others are optional.
141 	*			To			-	A semicolon-delimited list of recipients for the message.
142 	*			Subject		-   The subject of the message. The length limit is 64 KB.
143 	*			CC			-	A semicolon-delimited list of CC recipients for the message.
144 	*			BCC			-   A semicolon-delimited list of BCC recipients for the message.
145 	*			Msg			-   The content of the message. The length limit is 64 KB.
146 	* Return Value:
147 	*			None.
148 	* Comments:
149 	*			If the parameter mailData is NULL or length is 0, the current document will be mailed as an attachment to all recipients.
150 	*/
151 	void (*Doc_mail)(struct _IPDF_JsPlatform* pThis,void* mailData, int length,FPDF_BOOL bUI, FPDF_WIDESTRING To, FPDF_WIDESTRING Subject, FPDF_WIDESTRING CC, FPDF_WIDESTRING BCC, FPDF_WIDESTRING Msg);
152 
153 
154 	/*
155 	* Method: Doc_print
156 	*			Prints all or a specific number of pages of the document.
157 	* Interface Version:
158 	*			1
159 	* Implementation Required:
160 	*			yes
161 	* Parameters:
162 	*			pThis		-	Pointer to the interface structure itself.
163 	*			bUI			-	If true, will cause a UI to be presented to the user to obtain printing information and confirm the action.
164 	*			nStart		-	A 0-based index that defines the start of an inclusive range of pages.
165 	*			nEnd		-   A 0-based index that defines the end of an inclusive page range.
166 	*			bSilent		-   If true, suppresses the cancel dialog box while the document is printing. The default is false.
167 	*			bShrinkToFit	-	If true, the page is shrunk (if necessary) to fit within the imageable area of the printed page.
168 	*			bPrintAsImage	-	If true, print pages as an image.
169 	*			bReverse	-	If true, print from nEnd to nStart.
170 	*			bAnnotations	-	If true (the default), annotations are printed.
171 	*/
172 	void (*Doc_print)(struct _IPDF_JsPlatform* pThis, FPDF_BOOL bUI, int nStart, int nEnd, FPDF_BOOL bSilent ,FPDF_BOOL bShrinkToFit,FPDF_BOOL bPrintAsImage ,FPDF_BOOL bReverse ,FPDF_BOOL bAnnotations);
173 
174 	/*
175 	* Method: Doc_submitForm
176 	*			Send the form data to a specified URL.
177 	* Interface Version:
178 	*			1
179 	* Implementation Required:
180 	*			yes
181 	* Parameters:
182 	*			pThis		-	Pointer to the interface structure itself
183 	*			formData	-	Pointer to the data buffer to be sent.
184 	*			length		-	The size,in bytes, of the buffer pointed by formData parameter.
185 	*			URL			-	The URL to send to.
186 	* Return Value:
187 	*			None.
188 	*
189 	*/
190 	void (*Doc_submitForm)(struct _IPDF_JsPlatform* pThis,void* formData, int length, FPDF_WIDESTRING URL);
191 
192 	/*
193 	* Method: Doc_gotoPage
194 	*			Jump to a specified page.
195 	* Interface Version:
196 	*			1
197 	* Implementation Required:
198 	*			yes
199 	* Parameters:
200 	*			pThis		-	Pointer to the interface structure itself
201 	*			nPageNum	-	The specified page number, zero for the first page.
202 	* Return Value:
203 	*			None.
204 	*
205 	*/
206 	void (*Doc_gotoPage)(struct _IPDF_JsPlatform* pThis, int nPageNum);
207 	/*
208 	* Method: Field_browse
209 	*			Show a file selection dialog, and return the selected file path.
210 	* Interface Version:
211 	*			1
212 	* Implementation Required:
213 	*			yes
214 	* Parameters:
215 	*			pThis		-	Pointer to the interface structure itself.
216 	*			filePath	-	Pointer to the data buffer to receive the file path.Can be NULL.
217 	*			length		-   The length of the buffer, number of bytes. Can be 0.
218 	* Return Value:
219 	*		Number of bytes the filePath consumes, including trailing zeros.
220 	* Comments:
221 	*		The filePath shoule be always input in local encoding.
222 	*/
223 	int  (*Field_browse)(struct _IPDF_JsPlatform* pThis,void* filePath, int length);
224 
225 	/**
226 	*	pointer to FPDF_FORMFILLINFO interface.
227 	**/
228 	void*	m_pFormfillinfo;
229 } IPDF_JSPLATFORM;
230 
231 // Flags for Cursor type
232 #define FXCT_ARROW	0
233 #define FXCT_NESW	1
234 #define FXCT_NWSE	2
235 #define FXCT_VBEAM	3
236 #define FXCT_HBEAM	4
237 #define FXCT_HAND	5
238 
239 /**
240  * Declares of a pointer type to the callback function for the FFI_SetTimer method.
241  * Parameters:
242  *			idEvent		-	Identifier of the timer.
243  * Return value:
244  *			None.
245  **/
246 typedef void	(*TimerCallback)(int idEvent);
247 
248 /**
249  * Declares of a struct type to the local system time.
250 **/
251 typedef struct _FPDF_SYSTEMTIME
252 {
253     unsigned short wYear;			/* years since 1900 */
254     unsigned short wMonth;			/* months since January - [0,11] */
255     unsigned short wDayOfWeek;		/* days since Sunday - [0,6] */
256     unsigned short wDay;			/* day of the month - [1,31] */
257     unsigned short wHour;			/* hours since midnight - [0,23] */
258     unsigned short wMinute;			/* minutes after the hour - [0,59] */
259     unsigned short wSecond;			/* seconds after the minute - [0,59] */
260     unsigned short wMilliseconds;	/* milliseconds after the second - [0,999] */
261 }FPDF_SYSTEMTIME;
262 
263 
264 typedef struct  _FPDF_FORMFILLINFO
265 {
266 	/**
267 	 * Version number of the interface. Currently must be 1.
268 	 **/
269 	int	version;
270 
271 		/**
272 	 * Method: Release
273 	 *			Give implementation a chance to release any data after the interface is no longer used
274 	 * Interface Version:
275 	 *			1
276 	 * Implementation Required:
277 	 *			No
278 	 * Comments:
279 	 *			Called by Foxit SDK during the final cleanup process.
280 	 * Parameters:
281 	 *			pThis		-	Pointer to the interface structure itself
282 	 * Return Value:
283 	 *			None
284 	 */
285 
286 	void (*Release)(struct _FPDF_FORMFILLINFO* pThis);
287 
288 	/**
289 	 * Method: FFI_Invalidate
290 	 *			Invalidate the client area within the specified rectangle.
291 	 * Interface Version:
292 	 *			1
293 	 * Implementation Required:
294 		*			yes
295 	 * Parameters:
296 	 *			pThis		-	Pointer to the interface structure itself.
297 	 *			page		-	Handle to the page. Returned by FPDF_LoadPage function.
298 	 *			left		-	Left position of the client area in PDF page coordinate.
299 	 *			top			-	Top  position of the client area in PDF page coordinate.
300 	 *			right		-	Right position of the client area in PDF page  coordinate.
301 	 *			bottom		-	Bottom position of the client area in PDF page coordinate.
302 	 * Return Value:
303 	 *			None.
304 	 *
305 	 *comments:
306 	 *			All positions are measured in PDF "user space".
307 	 *			Implementation should call FPDF_RenderPageBitmap() function for repainting a specified page area.
308 	*/
309 	void (*FFI_Invalidate)(struct _FPDF_FORMFILLINFO* pThis,FPDF_PAGE page, double left, double top, double right, double bottom);
310 
311 	/**
312 	 * Method: FFI_OutputSelectedRect
313 	 *			When user is taking the mouse to select texts on a form field, this callback function will keep
314 	 *			returning the selected areas to the implementation.
315 	 *
316 	 * Interface Version:
317 	 *			1
318 	 * Implementation Required:
319 	 *			No
320 	 * Parameters:
321 	 *			pThis		-	Pointer to the interface structure itself.
322 	 *			page		-	Handle to the page. Returned by FPDF_LoadPage function.
323 	 *			left		-	Left position of the client area in PDF page coordinate.
324 	 *			top			-	Top  position of the client area in PDF page coordinate.
325 	 *			right		-	Right position of the client area in PDF page  coordinate.
326 	 *			bottom		-	Bottom position of the client area in PDF page coordinate.
327 	 * Return Value:
328 	 *			None.
329 	 *
330 	 * comments:
331 	 *			This CALLBACK function is useful for implementing special text selection effect. Implementation should
332 	 *			first records the returned rectangles, then draw them one by one at the painting period, last,remove all
333 	 *			the recorded rectangles when finish painting.
334 	*/
335 	void (*FFI_OutputSelectedRect)(struct _FPDF_FORMFILLINFO* pThis,FPDF_PAGE page, double left, double top, double right, double bottom);
336 
337 	/**
338 	* Method: FFI_SetCursor
339 	*			Set the Cursor shape.
340 	* Interface Version:
341 	*			1
342 	* Implementation Required:
343 	*			yes
344 	* Parameters:
345 	*		pThis		-	Pointer to the interface structure itself.
346 	* 		nCursorType	-	Cursor type. see Flags for Cursor type for the details.
347 	* 	Return value:
348 	* 		None.
349 	* */
350 	void (*FFI_SetCursor)(struct _FPDF_FORMFILLINFO* pThis, int nCursorType);
351 
352 	/**
353 	* Method: FFI_SetTimer
354 	*			This method installs a system timer. A time-out value is specified,
355 	*			and every time a time-out occurs, the system passes a message to
356 	*			the TimerProc callback function.
357 	* Interface Version:
358 	*			1
359 	* Implementation Required:
360 	*			yes
361 	* Parameters:
362 	*		pThis		-	Pointer to the interface structure itself.
363 	* 		uElapse		-	Specifies the time-out value, in milliseconds.
364 	* 		lpTimerFunc	-	A pointer to the callback function-TimerCallback.
365 	* 	Return value:
366 	* 		The timer identifier of the new timer if the function is successful.
367 	*		An application passes this value to the FFI_KillTimer method to kill
368 	*		the timer. Nonzero if it is successful; otherwise, it is zero.
369 	* */
370 	int  (*FFI_SetTimer)(struct _FPDF_FORMFILLINFO* pThis, int uElapse, TimerCallback lpTimerFunc);
371 
372 	/**
373 	* Method: FFI_KillTimer
374 	*			This method kills the timer event identified by nIDEvent, set by an earlier call to FFI_SetTimer.
375 	* Interface Version:
376 	*			1
377 	* Implementation Required:
378 	*			yes
379 	* Parameters:
380 	*		pThis		-	Pointer to the interface structure itself.
381 	* 		nTimerID	-	The timer ID return by FFI_SetTimer function.
382 	* 	Return value:
383 	* 		None.
384 	* */
385 	void (*FFI_KillTimer)(struct _FPDF_FORMFILLINFO* pThis, int nTimerID);
386 
387 
388 	/**
389 	* Method: FFI_GetLocalTime
390 	*			This method receives the current local time on the system.
391 	* Interface Version:
392 	*			1
393 	* Implementation Required:
394 	*			yes
395 	* Parameters:
396 	*		pThis		-	Pointer to the interface structure itself.
397 	* 	Return value:
398 	* 		None.
399 	* */
400 	FPDF_SYSTEMTIME (*FFI_GetLocalTime)(struct _FPDF_FORMFILLINFO* pThis);
401 
402 	/**
403 	* Method: FFI_OnChange
404 	*			This method will be invoked to notify implementation when the value of any FormField on the document had been changed.
405 	* Interface Version:
406 	*			1
407 	* Implementation Required:
408 	*			no
409 	* Parameters:
410 	*		pThis		-	Pointer to the interface structure itself.
411 	* 	Return value:
412 	* 		None.
413 	* */
414 	void (*FFI_OnChange)(struct _FPDF_FORMFILLINFO* pThis);
415 
416 	/**
417 	* Method: FFI_GetPage
418 	*			This method receives the page pointer associated with a specified page index.
419 	* Interface Version:
420 	*			1
421 	* Implementation Required:
422 	*			yes
423 	* Parameters:
424 	*		pThis		-	Pointer to the interface structure itself.
425 	*		document	-	Handle to document. Returned by FPDF_LoadDocument function.
426 	*		nPageIndex  -	Index number of the page. 0 for the first page.
427 	* Return value:
428 	* 		Handle to the page. Returned by FPDF_LoadPage function.
429 	* Comments:
430 	*		In some cases, the document-level JavaScript action may refer to a page which hadn't been loaded yet.
431 	*		To successfully run the javascript action, implementation need to load the page for SDK.
432 	* */
433 	FPDF_PAGE	(*FFI_GetPage)(struct _FPDF_FORMFILLINFO* pThis, FPDF_DOCUMENT document, int nPageIndex);
434 
435 	/**
436 	* Method: FFI_GetCurrentPage
437 	*		This method receives the current page pointer.
438 	* Interface Version:
439 	*			1
440 	* Implementation Required:
441 	*			yes
442 	* Parameters:
443 	*		pThis		-	Pointer to the interface structure itself.
444 	*		document	-	Handle to document. Returned by FPDF_LoadDocument function.
445 	* Return value:
446 	* 		Handle to the page. Returned by FPDF_LoadPage function.
447 	* */
448 	FPDF_PAGE	(*FFI_GetCurrentPage)(struct _FPDF_FORMFILLINFO* pThis, FPDF_DOCUMENT document);
449 
450 	/**
451 	* Method: FFI_GetRotation
452 	*			This method receives currently rotation of the page view.
453 	* Interface Version:
454 	*			1
455 	* Implementation Required:
456 	*			yes
457 	* Parameters:
458 	*		pThis		-	Pointer to the interface structure itself.
459 	*		page		-	Handle to page. Returned by FPDF_LoadPage function.
460 	* Return value:
461 	* 		The page rotation. Should be 0(0 degree),1(90 degree),2(180 degree),3(270 degree), in a clockwise direction.
462 	* */
463 	int 	(*FFI_GetRotation)(struct _FPDF_FORMFILLINFO* pThis, FPDF_PAGE page);
464 
465 	/**
466 	* Method: FFI_ExecuteNamedAction
467 	*			This method will execute an named action.
468 	* Interface Version:
469 	*			1
470 	* Implementation Required:
471 	*			yes
472 	* Parameters:
473 	*		pThis			-	Pointer to the interface structure itself.
474 	*		namedAction		-	A byte string which indicates the named action, terminated by 0.
475 	* Return value:
476 	* 		None.
477 	* Comments:
478 	*		See the named actions description of <<PDF Reference, version 1.7>> for more details.
479 	* */
480 	void 	(*FFI_ExecuteNamedAction)(struct _FPDF_FORMFILLINFO* pThis, FPDF_BYTESTRING namedAction);
481 	/**
482 	* @brief This method will be called when a text field is getting or losing a focus.
483 	*
484 	* @param[in] pThis		Pointer to the interface structure itself.
485 	* @param[in] value		The string value of the form field, in UTF-16LE format.
486 	* @param[in] valueLen	The length of the string value, number of characters (not bytes).
487 	* @param[in] is_focus	True if the form field is getting a focus, False for losing a focus.
488 	*
489 	* @return None.
490 	*
491 	* @note Currently,only support text field and combobox field.
492 	* */
493 	void	(*FFI_SetTextFieldFocus)(struct _FPDF_FORMFILLINFO* pThis, FPDF_WIDESTRING value, FPDF_DWORD valueLen, FPDF_BOOL is_focus);
494 
495 
496 	/**
497 	* Method: FFI_DoURIAction
498 	*			This action resolves to a uniform resource identifier.
499 	* Interface Version:
500 	*			1
501 	* Implementation Required:
502 	*			No
503 	* Parameters:
504 	*		pThis			-	Pointer to the interface structure itself.
505 	*		bsURI			-	A byte string which indicates the uniform resource identifier, terminated by 0.
506 	* Return value:
507 	* 		None.
508 	* Comments:
509 	*		See the URI actions description of <<PDF Reference, version 1.7>> for more details.
510 	* */
511 	void	(*FFI_DoURIAction)(struct _FPDF_FORMFILLINFO* pThis, FPDF_BYTESTRING bsURI);
512 
513 	/**
514 	* Method: FFI_DoGoToAction
515 	*			This action changes the view to a specified destination.
516 	* Interface Version:
517 	*			1
518 	* Implementation Required:
519 	*			No
520 	* Parameters:
521 	*		pThis			-	Pointer to the interface structure itself.
522 	*		nPageIndex		-	The index of the PDF page.
523 	*		zoomMode		-	The zoom mode for viewing page.See Macros "PDFZOOM_XXX" defined in "fpdfdoc.h".
524 	*		fPosArray		-	The float array which carries the position info.
525 	*		sizeofArray		-	The size of float array.
526 	* Return value:
527 	* 		None.
528 	* Comments:
529 	*		See the Destinations description of <<PDF Reference, version 1.7>> in 8.2.1 for more details.
530 	**/
531 	void	(*FFI_DoGoToAction)(struct _FPDF_FORMFILLINFO* pThis, int nPageIndex, int zoomMode, float* fPosArray, int sizeofArray);
532 	/**
533 	*	pointer to IPDF_JSPLATFORM interface
534 	**/
535 	IPDF_JSPLATFORM*	m_pJsPlatform;
536 
537 } FPDF_FORMFILLINFO;
538 
539 
540 
541 /**
542  * Function: FPDFDOC_InitFormFillEnviroument
543  *			Init form fill environment.
544  * Comments:
545  *			This function should be called before any form fill operation.
546  * Parameters:
547  *			document		-	Handle to document. Returned by FPDF_LoadDocument function.
548  *			pFormFillInfo	-	Pointer to a FPDF_FORMFILLINFO structure.
549  * Return Value:
550  *			Return handler to the form fill module. NULL means fails.
551  **/
552 DLLEXPORT FPDF_FORMHANDLE STDCALL FPDFDOC_InitFormFillEnviroument(FPDF_DOCUMENT document, FPDF_FORMFILLINFO* formInfo);
553 
554 /**
555  * Function: FPDFDOC_ExitFormFillEnviroument
556  *			Exit form fill environment.
557  * Parameters:
558  *			hHandle		-	Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.
559  * Return Value:
560  *			NULL.
561  **/
562 DLLEXPORT void STDCALL FPDFDOC_ExitFormFillEnviroument(FPDF_FORMHANDLE hHandle);
563 
564 /**
565  * Function: FORM_OnAfterLoadPage
566  *			This method is required for implementing all the form related functions. Should be invoked after user
567  *			successfully loaded a PDF page, and method FPDFDOC_InitFormFillEnviroument had been invoked.
568  * Parameters:
569  *			hHandle		-	Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.
570  * Return Value:
571  *			NONE.
572  **/
573 DLLEXPORT void STDCALL FORM_OnAfterLoadPage(FPDF_PAGE page, FPDF_FORMHANDLE hHandle);
574 
575 /**
576  * Function: FORM_OnBeforeClosePage
577  *			This method is required for implementing all the form related functions. Should be invoked before user
578  *			close the PDF page.
579  * Parameters:
580  *			page		-	Handle to the page. Returned by FPDF_LoadPage function.
581  *			hHandle		-	Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.
582  * Return Value:
583  *			NONE.
584  **/
585 DLLEXPORT void STDCALL FORM_OnBeforeClosePage(FPDF_PAGE page, FPDF_FORMHANDLE hHandle);
586 
587 /**
588 * Function: FORM_DoDocumentJSAction
589 *			This method is required for performing Document-level JavaScript action. It should be invoked after the PDF document
590 *			had been loaded.
591 * Parameters:
592 *			hHandle		-	Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.
593 * Return Value:
594 *			NONE
595 * Comments:
596 *			If there is Document-level JavaScript action embedded in the document, this method will execute the javascript action;
597 *			otherwise, the method will do nothing.
598 **/
599 DLLEXPORT void STDCALL FORM_DoDocumentJSAction(FPDF_FORMHANDLE hHandle);
600 
601 
602 /**
603 * Function: FORM_DoDocumentOpenAction
604 *			This method is required for performing open-action when the document is opened.
605 * Parameters:
606 *			hHandle		-	Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.
607 * Return Value:
608 *			NONE
609 * Comments:
610 *			This method will do nothing if there is no open-actions embedded in the document.
611 **/
612 DLLEXPORT void STDCALL FORM_DoDocumentOpenAction(FPDF_FORMHANDLE hHandle);
613 
614 
615 // additional actions type of document.
616 #define FPDFDOC_AACTION_WC		0x10		//WC, before closing document, JavaScript action.
617 #define FPDFDOC_AACTION_WS		0x11		//WS, before saving document, JavaScript action.
618 #define FPDFDOC_AACTION_DS		0x12		//DS, after saving document, JavaScript action.
619 #define FPDFDOC_AACTION_WP		0x13		//WP, before printing document, JavaScript action.
620 #define FPDFDOC_AACTION_DP		0x14		//DP, after printing document, JavaScript action.
621 /**
622 * Function: FORM_DoDocumentAAction
623 *			This method is required for performing the document's additional-action.
624 * Parameters:
625 *			hHandle		-	Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.
626 *			aaType	    -   The type of the additional-actions which defined above.
627 * Return Value:
628 *			NONE
629 * Comments:
630 *			This method will do nothing if there is no document additional-action corresponding to the specified aaType.
631 **/
632 
633 DLLEXPORT void STDCALL FORM_DoDocumentAAction(FPDF_FORMHANDLE hHandle, int aaType);
634 
635 // Additional-action types of page object
636 #define FPDFPAGE_AACTION_OPEN		0		// /O -- An action to be performed when the page is opened
637 #define FPDFPAGE_AACTION_CLOSE		1		// /C -- An action to be performed when the page is closed
638 
639 /**
640 * Function: FORM_DoPageAAction
641 *			This method is required for performing the page object's additional-action when opened or closed.
642 * Parameters:
643 *			page		-	Handle to the page. Returned by FPDF_LoadPage function.
644 *			hHandle		-	Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.
645 *			aaType	    -   The type of the page object's additional-actions which defined above.
646 * Return Value:
647 *			NONE
648 * Comments:
649 *			This method will do nothing if no additional-action corresponding to the specified aaType exists.
650 **/
651 DLLEXPORT void STDCALL FORM_DoPageAAction(FPDF_PAGE page, FPDF_FORMHANDLE hHandle, int aaType);
652 
653 /**
654  * Function: FORM_OnMouseMove
655  *			You can call this member function when the mouse cursor moves.
656  * Parameters:
657  *			hHandle		-	Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.
658  *			page		-	Handle to the page. Returned by FPDF_LoadPage function.
659  *			modifier		-	Indicates whether various virtual keys are down.
660  *			page_x		-	Specifies the x-coordinate of the cursor in PDF user space.
661  *			page_y		-	Specifies the y-coordinate of the cursor in PDF user space.
662  * Return Value:
663  *			TRUE indicates success; otherwise false.
664  **/
665 DLLEXPORT FPDF_BOOL STDCALL FORM_OnMouseMove(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int modifier, double page_x, double page_y);
666 
667 /**
668  * Function: FORM_OnLButtonDown
669  *			You can call this member function when the user presses the left mouse button.
670  * Parameters:
671  *			hHandle		-	Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.
672  *			page		-	Handle to the page. Returned by FPDF_LoadPage function.
673  *			modifier		-	Indicates whether various virtual keys are down.
674  *			page_x		-	Specifies the x-coordinate of the cursor in PDF user space.
675  *			page_y		-	Specifies the y-coordinate of the cursor in PDF user space.
676  * Return Value:
677  *			TRUE indicates success; otherwise false.
678  **/
679 DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonDown(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int modifier, double page_x, double page_y);
680 
681 /**
682  * Function: FORM_OnLButtonUp
683  *			You can call this member function when the user releases the left mouse button.
684  * Parameters:
685  *			hHandle		-	Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.
686  *			page		-	Handle to the page. Returned by FPDF_LoadPage function.
687  *			modifier	-	Indicates whether various virtual keys are down.
688  *			page_x		-	Specifies the x-coordinate of the cursor in device.
689  *			page_y		-	Specifies the y-coordinate of the cursor in device.
690  * Return Value:
691  *			TRUE indicates success; otherwise false.
692  **/
693 DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonUp(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int modifier, double page_x, double page_y);
694 
695 /**
696  * Function: FORM_OnKeyDown
697  *			You can call this member function when a nonsystem key is pressed.
698  * Parameters:
699  *			hHandle		-	Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.
700  *			page		-	Handle to the page. Returned by FPDF_LoadPage function.
701  *			nKeyCode	-	Indicates whether various virtual keys are down.
702  *			modifier	-	Contains the scan code, key-transition code, previous key state, and context code.
703  * Return Value:
704  *			TRUE indicates success; otherwise false.
705  **/
706 DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyDown(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int nKeyCode, int modifier);
707 
708 /**
709  * Function: FORM_OnKeyUp
710  *			You can call this member function when a nonsystem key is released.
711  * Parameters:
712  *			hHandle		-	Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.
713  *			page		-	Handle to the page. Returned by FPDF_LoadPage function.
714  *			nKeyCode	-	The virtual-key code of the given key.
715  *			modifier	-	Contains the scan code, key-transition code, previous key state, and context code.
716  * Return Value:
717  *			TRUE indicates success; otherwise false.
718  **/
719 DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyUp(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int nKeyCode, int modifier);
720 
721 /**
722  * Function: FORM_OnChar
723  *			You can call this member function when a keystroke translates to a nonsystem character.
724  * Parameters:
725  *			hHandle		-	Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.
726  *			page		-	Handle to the page. Returned by FPDF_LoadPage function.
727  *			nChar		-	The character code value of the key.
728  *			modifier	-	Contains the scan code, key-transition code, previous key state, and context code.
729  * Return Value:
730  *			TRUE indicates success; otherwise false.
731  **/
732 DLLEXPORT FPDF_BOOL STDCALL FORM_OnChar(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int nChar, int modifier);
733 
734 /**
735  * Function: FORM_ForceToKillFocus.
736  *			You can call this member function to force to kill the focus of the form field which got focus.
737  *			It would kill the focus on the form field, save the value of form field if it's changed by user.
738  * Parameters:
739  *			hHandle		-	Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.
740  * Return Value:
741  *			TRUE indicates success; otherwise false.
742  **/
743 DLLEXPORT FPDF_BOOL STDCALL FORM_ForceToKillFocus(FPDF_FORMHANDLE hHandle);
744 
745 // Field Types
746 #define FPDF_FORMFIELD_UNKNOWN		0		// Unknown.
747 #define FPDF_FORMFIELD_PUSHBUTTON	1		// push button type.
748 #define FPDF_FORMFIELD_CHECKBOX		2		// check box type.
749 #define FPDF_FORMFIELD_RADIOBUTTON	3		// radio button type.
750 #define FPDF_FORMFIELD_COMBOBOX		4		// combo box type.
751 #define FPDF_FORMFIELD_LISTBOX		5		// list box type.
752 #define FPDF_FORMFIELD_TEXTFIELD	6		// text field type.
753 
754 /**
755  * Function: FPDPage_HasFormFieldAtPoint
756  *			Check the form filed position by point.
757  * Parameters:
758  *			hHandle		-	Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.
759  *			page		-	Handle to the page. Returned by FPDF_LoadPage function.
760  *			page_x		-	X position in PDF "user space".
761  *			page_y		-	Y position in PDF "user space".
762  * Return Value:
763  *			Return the type of the formfiled; -1 indicates no fields.
764  **/
765 DLLEXPORT int STDCALL FPDPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle,FPDF_PAGE page,double page_x, double page_y);
766 
767 /**
768  * Function: FPDF_SetFormFieldHighlightColor
769  *			Set the highlight color of specified or all the form fields in the document.
770  * Parameters:
771  *			hHandle		-	Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.
772  *			doc			-	Handle to the document. Returned by FPDF_LoadDocument function.
773  *			fieldType	-	A 32-bit integer indicating the type of a form field(defined above).
774  *			color		-	The highlight color of the form field.Constructed by 0xxxrrggbb.
775  * Return Value:
776  *			NONE.
777  * Comments:
778  *			When the parameter fieldType is set to zero, the highlight color will be applied to all the form fields in the
779  *			document.
780  *			Please refresh the client window to show the highlight immediately if necessary.
781  **/
782 DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightColor(FPDF_FORMHANDLE hHandle, int fieldType, unsigned long color);
783 
784 /**
785  * Function: FPDF_SetFormFieldHighlightAlpha
786  *			Set the transparency of the form field highlight color in the document.
787  * Parameters:
788  *			hHandle		-	Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.
789  *			doc			-	Handle to the document. Returned by FPDF_LoadDocument function.
790  *			alpha		-	The transparency of the form field highlight color. between 0-255.
791  * Return Value:
792  *			NONE.
793  **/
794 DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightAlpha(FPDF_FORMHANDLE hHandle, unsigned char alpha);
795 
796 
797 /**
798  * Function: FPDF_RemoveFormFieldHighlight
799  *			Remove the form field highlight color in the document.
800  * Parameters:
801  *			hHandle		-	Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.
802  * Return Value:
803  *			NONE.
804  * Comments:
805  *			Please refresh the client window to remove the highlight immediately if necessary.
806  **/
807 DLLEXPORT void STDCALL FPDF_RemoveFormFieldHighlight(FPDF_FORMHANDLE hHandle);
808 
809 /**
810 * Function: FPDF_FFLDraw
811 *			Render FormFeilds on a page to a device independent bitmap.
812 * Parameters:
813 *			hHandle		-	Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnviroument.
814 *			bitmap		-	Handle to the device independent bitmap (as the output buffer).
815 *							Bitmap handle can be created by FPDFBitmap_Create function.
816 *			page		-	Handle to the page. Returned by FPDF_LoadPage function.
817 *			start_x		-	Left pixel position of the display area in the device coordinate.
818 *			start_y		-	Top pixel position of the display area in the device coordinate.
819 *			size_x		-	Horizontal size (in pixels) for displaying the page.
820 *			size_y		-	Vertical size (in pixels) for displaying the page.
821 *			rotate		-	Page orientation: 0 (normal), 1 (rotated 90 degrees clockwise),
822 *								2 (rotated 180 degrees), 3 (rotated 90 degrees counter-clockwise).
823 *			flags		-	0 for normal display, or combination of flags defined above.
824 * Return Value:
825 *			None.
826 * Comments:
827 *			This method is designed to only render annotations and FormFields on the page.
828 *			Without FPDF_ANNOT specified for flags, Rendering functions such as FPDF_RenderPageBitmap or FPDF_RenderPageBitmap_Start will only render page contents(without annotations) to a bitmap.
829 *			In order to implement the FormFill functions,Implementation should call this method after rendering functions finish rendering the page contents.
830 **/
831 DLLEXPORT void STDCALL FPDF_FFLDraw(FPDF_FORMHANDLE hHandle,FPDF_BITMAP bitmap, FPDF_PAGE page, int start_x, int start_y,
832 						int size_x, int size_y, int rotate, int flags);
833 
834 
835 
836 #ifdef __cplusplus
837 };
838 #endif
839 
840 #endif //_FPDFORMFILL_H
841 
842