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 _FPDFDOC_H_
8#define _FPDFDOC_H_
9
10#include "fpdfview.h"
11
12// Exported Functions
13#ifdef __cplusplus
14extern "C" {
15#endif
16
17// Function: FPDFBookmark_Find
18//			Find a bookmark in the document, using the bookmark title.
19// Parameters:
20//			document	-	Handle to the document. Returned by FPDF_LoadDocument or FPDF_LoadMemDocument.
21//			title		-	The UTF-16LE encoded Unicode string for the bookmark title to be searched. Can't be NULL.
22// Return value:
23//			Handle to the found bookmark item. NULL if the title can't be found.
24// Comments:
25//			It always returns the first found bookmark if more than one bookmarks have the same title.
26//
27DLLEXPORT FPDF_BOOKMARK STDCALL FPDFBookmark_Find(FPDF_DOCUMENT document, FPDF_WIDESTRING title);
28
29// Function: FPDFBookmark_GetDest
30//			Get the destination associated with a bookmark item.
31// Parameters:
32//			document	-	Handle to the document.
33//			bookmark	-	Handle to the bookmark.
34// Return value:
35//			Handle to the destination data. NULL if no destination is associated with this bookmark.
36//
37DLLEXPORT FPDF_DEST STDCALL FPDFBookmark_GetDest(FPDF_DOCUMENT document, FPDF_BOOKMARK bookmark);
38
39// Function: FPDFBookmark_GetAction
40//			Get the action associated with a bookmark item.
41// Parameters:
42//			bookmark	-	Handle to the bookmark.
43// Return value:
44//			Handle to the action data. NULL if no action is associated with this bookmark. In this case, the
45//			application should try FPDFBookmark_GetDest.
46//
47DLLEXPORT FPDF_ACTION STDCALL FPDFBookmark_GetAction(FPDF_BOOKMARK bookmark);
48
49#define PDFACTION_UNSUPPORTED		0		// Unsupported action type.
50#define PDFACTION_GOTO				1		// Go to a destination within current document.
51#define PDFACTION_REMOTEGOTO		2		// Go to a destination within another document.
52#define PDFACTION_URI				3		// Universal Resource Identifier, including web pages and
53											// other Internet based resources.
54#define PDFACTION_LAUNCH			4		// Launch an application or open a file.
55
56// Function: FPDFAction_GetType
57//			Get type of an action.
58// Parameters:
59//			action		-	Handle to the action.
60// Return value:
61//			A type number as defined above.
62//
63DLLEXPORT unsigned long STDCALL FPDFAction_GetType(FPDF_ACTION action);
64
65// Function: FPDFAction_GetDest
66//			Get destination of an action.
67// Parameters:
68//			document	-	Handle to the document.
69//			action		-	Handle to the action. It must be a GOTO or REMOTEGOTO action.
70// Return value:
71//			Handle to the destination data.
72// Comments:
73//			In case of remote goto action, the application should first use FPDFAction_GetFilePath to
74//			get file path, then load that particular document, and use its document handle to call this
75//			function.
76//
77DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document, FPDF_ACTION action);
78
79// Function: FPDFAction_GetURIPath
80//			Get URI path of a URI action.
81// Parameters:
82//			document	-	Handle to the document.
83//			action		-	Handle to the action. Must be a URI action.
84//			buffer		-	A buffer for output the path string. Can be NULL.
85//			buflen		-	The length of the buffer, number of bytes. Can be 0.
86// Return value:
87//			Number of bytes the URI path consumes, including trailing zeros.
88// Comments:
89//			The URI path is always encoded in 7-bit ASCII.
90//
91//			The return value always indicated number of bytes required for the buffer, even when there is
92//			no buffer specified, or the buffer size is less then required. In this case, the buffer will not
93//			be modified.
94//
95DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document, FPDF_ACTION action,
96													  void* buffer, unsigned long buflen);
97
98// Function: FPDFDest_GetPageIndex
99//			Get page index of a destination.
100// Parameters:
101//			document	-	Handle to the document.
102//			dest		-	Handle to the destination.
103// Return value:
104//			The page index. Starting from 0 for the first page.
105//
106DLLEXPORT unsigned long STDCALL FPDFDest_GetPageIndex(FPDF_DOCUMENT document, FPDF_DEST dest);
107
108// Function: FPDFLink_GetLinkAtPoint
109//			Find a link at specified point on a document page.
110// Parameters:
111//			page		-	Handle to the document page.
112//			x			-	The x coordinate of the point, specified in page coordinate system.
113//			y			-	The y coordinate of the point, specified in page coordinate system.
114// Return value:
115//			Handle to the link. NULL if no link found at that point.
116// Comments:
117//			The point coordinates are specified in page coordinate system. You can convert coordinates
118//			from screen system to page system using FPDF_DeviceToPage functions.
119//
120DLLEXPORT FPDF_LINK STDCALL FPDFLink_GetLinkAtPoint(FPDF_PAGE page, double x, double y);
121
122// Function: FPDFLink_GetDest
123//			Get destination info of a link.
124// Parameters:
125//			document	-	Handle to the document.
126//			link		-	Handle to the link. Returned by FPDFLink_GetLinkAtPoint.
127// Return value:
128//			Handle to the destination. NULL if there is no destination associated with the link, in this case
129//			the application should try FPDFLink_GetAction.
130//
131DLLEXPORT FPDF_DEST STDCALL FPDFLink_GetDest(FPDF_DOCUMENT document, FPDF_LINK link);
132
133// Function: FPDFLink_GetAction
134//			Get action info of a link.
135// Parameters:
136//			link		-	Handle to the link.
137// Return value:
138//			Handle to the action. NULL if there is no action associated with the link.
139//
140DLLEXPORT FPDF_ACTION STDCALL FPDFLink_GetAction(FPDF_LINK link);
141
142// Function: FPDFLink_Enumerate
143//			This function would enumerate all the link annotations in a single PDF page.
144// Parameters:
145//			page[in]			-	Handle to the page.
146//			startPos[in,out]	-	The start position to enumerate the link annotations, which should be specified to start from
147//								-	0 for the first call, and would receive the next position for enumerating to start from.
148//			linkAnnot[out]		-	Receive the link handle.
149// Return value:
150//			TRUE if succceed, else False;
151//
152DLLEXPORT FPDF_BOOL STDCALL FPDFLink_Enumerate(FPDF_PAGE page, int* startPos, FPDF_LINK* linkAnnot);
153
154// Function: FPDFLink_GetAnnotRect
155//			Get the annotation rectangle. (Specified by the ��Rect�� entry of annotation dictionary).
156// Parameters:
157//			linkAnnot[in]		-	Handle to the link annotation.
158//			rect[out]			-	The annotation rect.
159// Return value:
160//			TRUE if succceed, else False;
161//
162DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetAnnotRect(FPDF_LINK linkAnnot, FS_RECTF* rect);
163
164// Function: FPDFLink_CountQuadPoints
165//			Get the count of quadrilateral points to the link annotation.
166// Parameters:
167//			linkAnnot[in]		-	Handle to the link annotation.
168// Return value:
169//			The count of quadrilateral points.
170//
171DLLEXPORT int STDCALL FPDFLink_CountQuadPoints(FPDF_LINK linkAnnot);
172
173/* _FS_DEF_STRUCTURE_QUADPOINTSF_ */
174#ifndef _FS_DEF_STRUCTURE_QUADPOINTSF_
175#define _FS_DEF_STRUCTURE_QUADPOINTSF_
176typedef struct _FS_QUADPOINTSF
177{
178	FS_FLOAT  x1;
179	FS_FLOAT  y1;
180	FS_FLOAT  x2;
181	FS_FLOAT  y2;
182	FS_FLOAT  x3;
183	FS_FLOAT  y3;
184	FS_FLOAT  x4;
185	FS_FLOAT  y4;
186} FS_QUADPOINTSF;
187#endif /* _FS_DEF_STRUCTURE_QUADPOINTSF_ */
188
189// Function: FPDFLink_GetQuadPoints
190//			Get the quadrilateral points for the specified index in the link annotation.
191// Parameters:
192//			linkAnnot[in]		-	Handle to the link annotation.
193//			quadIndex[in]		-	The specified quad points index.
194//			quadPoints[out]		-	Receive the quadrilateral points.
195// Return value:
196//			True if succeed, else False.
197//
198DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetQuadPoints(FPDF_LINK linkAnnot, int quadIndex, FS_QUADPOINTSF* quadPoints);
199
200// Function: FPDF_GetMetaText
201//			Get a text from meta data of the document. Result is encoded in UTF-16LE.
202// Parameters:
203//			doc			-	Handle to a document
204//			tag			-	The tag for the meta data. Currently, It can be "Title", "Author",
205//							"Subject", "Keywords", "Creator", "Producer", "CreationDate", or "ModDate".
206//							For detailed explanation of these tags and their respective values,
207//							please refer to PDF Reference 1.6, section 10.2.1, "Document Information Dictionary".
208//			buffer		-	A buffer for output the title. Can be NULL.
209//			buflen		-	The length of the buffer, number of bytes. Can be 0.
210// Return value:
211//			Number of bytes the title consumes, including trailing zeros.
212// Comments:
213//			No matter on what platform, the title is always output in UTF-16LE encoding, which means the buffer
214//			can be regarded as an array of WORD (on Intel and compatible CPUs), each WORD represent the Unicode of
215//			a character (some special Unicode may take 2 WORDs). The string is followed by two bytes of zero
216//			indicating end of the string.
217//
218//			The return value always indicated number of bytes required for the buffer, even when there is
219//			no buffer specified, or the buffer size is less then required. In this case, the buffer will not
220//			be modified.
221//
222DLLEXPORT unsigned long STDCALL FPDF_GetMetaText(FPDF_DOCUMENT doc, FPDF_BYTESTRING tag,
223												 void* buffer, unsigned long buflen);
224
225
226#ifdef __cplusplus
227};
228#endif
229
230#endif	// _FPDFDOC_H_
231