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