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
14extern "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//
25DLLEXPORT 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//
35DLLEXPORT 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//
54DLLEXPORT 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//
66DLLEXPORT 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//
76DLLEXPORT 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//
86DLLEXPORT 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//
102DLLEXPORT 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//
116DLLEXPORT 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//
134DLLEXPORT 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//
145DLLEXPORT 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//
159DLLEXPORT 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//
170DLLEXPORT 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//
179DLLEXPORT 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//
191DLLEXPORT 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//
201DLLEXPORT 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//
210DLLEXPORT 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_
215typedef 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//
237DLLEXPORT 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//
261DLLEXPORT 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