blob: 317a355f6224708f437e9e09aae68324dd86cc8a [file] [log] [blame]
Svet Ganove6986e12015-06-04 14:52:15 -07001// 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_DATAAVAIL_H_
8#define PUBLIC_FPDF_DATAAVAIL_H_
9
10#include <stddef.h> // For size_t.
11
12#include "fpdfview.h"
13
14/** The result of the process which check linearized PDF. */
15#define FSDK_IS_LINEARIZED 1
16#define FSDK_NOT_LINEARIZED 0
17#define FSDK_UNKNOW_LINEARIZED -1
18
19
20#ifdef __cplusplus
21extern "C" {
22#endif
23
24/**
25 * Interface: FX_FILEAVAIL
26 * Interface for checking whether the section of the file is available.
27 */
28typedef struct _FX_FILEAVAIL {
29 /**
30 * Version number of the interface. Currently must be 1.
31 */
32 int version;
33
34 /**
35 * Method: IsDataAvail
36 * Report whether the specified data section is available. A section is available only if all bytes in the section is available.
37 * Interface Version:
38 * 1
39 * Implementation Required:
40 * Yes
41 * Parameters:
42 * pThis - Pointer to the interface structure itself.
43 * offset - The offset of the data section in the file.
44 * size - The size of the data section
45 * Return Value:
46 * true means the specified data section is available.
47 * Comments:
48 * Called by Foxit SDK to check whether the data section is ready.
49 */
50 FPDF_BOOL (*IsDataAvail)(struct _FX_FILEAVAIL* pThis, size_t offset, size_t size);
51} FX_FILEAVAIL;
52
53typedef void* FPDF_AVAIL;
54
55/**
56* Function: FPDFAvail_Create
57* Create a document availability provider.
58*
59* Parameters:
60* file_avail - Pointer to file availability interface to check availability of file data.
61* file - Pointer to a file access interface for reading data from file.
62* Return value:
63* A handle to the document availability provider. NULL for error.
64* Comments:
65* Application must call FPDFAvail_Destroy when done with the availability provider.
66*/
67DLLEXPORT FPDF_AVAIL STDCALL FPDFAvail_Create(FX_FILEAVAIL* file_avail, FPDF_FILEACCESS* file);
68
69/**
70* Function: FPDFAvail_Destroy
71* Destroy a document availibity provider.
72*
73* Parameters:
74* avail - Handle to document availability provider returned by FPDFAvail_Create
75* Return Value:
76* None.
77*/
78DLLEXPORT void STDCALL FPDFAvail_Destroy(FPDF_AVAIL avail);
79
80/**
81 * Interface: FX_DOWNLOADHINTS
82 * Download hints interface. Used to receive hints for further downloading.
83 */
84typedef struct _FX_DOWNLOADHINTS {
85 /**
86 * Version number of the interface. Currently must be 1.
87 */
88 int version;
89
90 /**
91 * Method: AddSegment
92 * Add a section to be downloaded.
93 * Interface Version:
94 * 1
95 * Implementation Required:
96 * Yes
97 * Parameters:
98 * pThis - Pointer to the interface structure itself.
99 * offset - The offset of the hint reported to be downloaded.
100 * size - The size of the hint reported to be downloaded.
101 * Return Value:
102 * None.
103 * Comments:
104 * Called by Foxit SDK to report some downloading hints for download manager.
105 * The position and size of section may be not accurate, part of the section might be already available.
106 * The download manager must deal with that to maximize download efficiency.
107 */
108 void (*AddSegment)(struct _FX_DOWNLOADHINTS* pThis, size_t offset, size_t size);
109} FX_DOWNLOADHINTS;
110
111/**
112* Function: FPDFAvail_IsDocAvail
113* Check whether the document is ready for loading, if not, get download hints.
114*
115* Parameters:
116* avail - Handle to document availability provider returned by FPDFAvail_Create
117* hints - Pointer to a download hints interface, receiving generated hints
118* Return value:
119* Non-zero for page is fully available, 0 for page not yet available.
120* Comments:
121* The application should call this function whenever new data arrived, and process all the
122* generated download hints if any, until the function returns non-zero value. Then the
123* application can call FPDFAvail_GetDocument() to get a document handle.
124*/
125DLLEXPORT int STDCALL FPDFAvail_IsDocAvail(FPDF_AVAIL avail, FX_DOWNLOADHINTS* hints);
126
127/**
128* Function: FPDFAvail_GetDocument
129* Get document from the availability provider.
130*
131* Parameters:
132* avail - Handle to document availability provider returned by FPDFAvail_Create
133* password - Optional password for decrypting the PDF file.
134* Return value:
135* Handle to the document.
136* Comments:
137* After FPDFAvail_IsDocAvail() returns TRUE, the application should call this function to
138* get the document handle. To close the document, use FPDF_CloseDocument function.
139*/
140DLLEXPORT FPDF_DOCUMENT STDCALL FPDFAvail_GetDocument(FPDF_AVAIL avail,
141 FPDF_BYTESTRING password);
142
143/**
144* Function: FPDFAvail_GetFirstPageNum
145* Get page number for the first available page in a linearized PDF
146*
147* Parameters:
148* doc - A document handle returned by FPDFAvail_GetDocument
149* Return Value:
150* Zero-based index for the first available page.
151* Comments:
152* For most linearized PDFs, the first available page would be just the first page, however,
153* some PDFs might make other page to be the first available page.
154* For non-linearized PDF, this function will always return zero.
155*/
156DLLEXPORT int STDCALL FPDFAvail_GetFirstPageNum(FPDF_DOCUMENT doc);
157
158/**
159* Function: FPDFAvail_IsPageAvail
160* Check whether a page is ready for loading, if not, get download hints.
161*
162* Parameters:
163* avail - Handle to document availability provider returned by FPDFAvail_Create
164* page_index - Index number of the page. 0 for the first page.
165* hints - Pointer to a download hints interface, receiving generated hints
166* Return value:
167* Non-zero for page is fully available, 0 for page not yet available.
168* Comments:
169* This function call be called only after FPDFAvail_GetDocument if called.
170* The application should call this function whenever new data arrived, and process all the
171* generated download hints if any, until the function returns non-zero value. Then the
172* application can perform page loading.
173*/
174DLLEXPORT int STDCALL FPDFAvail_IsPageAvail(FPDF_AVAIL avail, int page_index, FX_DOWNLOADHINTS* hints);
175
176/**
177* Function: FPDFAvail_ISFormAvail
178* Check whether Form data is ready for init, if not, get download hints.
179*
180* Parameters:
181* avail - Handle to document availability provider returned by FPDFAvail_Create
182* hints - Pointer to a download hints interface, receiving generated hints
183* Return value:
184* Non-zero for Form data is fully available, 0 for Form data not yet available.
185* Details: -1 - error, the input parameter not correct, such as hints is null.
186* 0 - data not available
187* 1 - data available
188* 2 - no form data.
189* Comments:
190* This function call be called only after FPDFAvail_GetDocument if called.
191* The application should call this function whenever new data arrived, and process all the
192* generated download hints if any, until the function returns non-zero value. Then the
193* application can perform page loading. Recommend to call FPDFDOC_InitFormFillEnvironment
194* after the function returns non-zero value.
195*/
196DLLEXPORT int STDCALL FPDFAvail_IsFormAvail(FPDF_AVAIL avail, FX_DOWNLOADHINTS* hints);
197
198/**
199* Function: FPDFAvail_IsLinearized
200* To check whether a document is Linearized PDF file.
201*
202* Parameters:
203* avail - Handle to document availability provider returned by FPDFAvail_Create
204* Return value:
205* return TRUE means the document is linearized PDF else not.
206* FSDK_IS_LINEARIZED is a linearize file.
207* FSDK_NOT_LINEARIZED is not a linearize file.
208* FSDK_UNKNOW_LINEARIZED don't know whether the file is a linearize file.
209* Comments:
210* It return TRUE/FALSE as soon as we have first 1K data. If the file's size less than
211* 1K,we don't known whether the PDF is a linearized file.
212*
213*/
214DLLEXPORT FPDF_BOOL STDCALL FPDFAvail_IsLinearized(FPDF_AVAIL avail);
215
216#ifdef __cplusplus
217}
218#endif
219
220#endif // PUBLIC_FPDF_DATAAVAIL_H_