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_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 21 extern "C" { 22 #endif 23 24 /** 25 * Interface: FX_FILEAVAIL 26 * Interface for checking whether the section of the file is available. 27 */ 28 typedef 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 53 typedef 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 */ 67 DLLEXPORT 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 */ 78 DLLEXPORT 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 */ 84 typedef 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 */ 125 DLLEXPORT 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 */ 140 DLLEXPORT 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 */ 156 DLLEXPORT 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 */ 174 DLLEXPORT 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 */ 196 DLLEXPORT 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 */ 214 DLLEXPORT FPDF_BOOL STDCALL FPDFAvail_IsLinearized(FPDF_AVAIL avail); 215 216 #ifdef __cplusplus 217 } 218 #endif 219 220 #endif // PUBLIC_FPDF_DATAAVAIL_H_ 221