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