// Copyright 2014 PDFium Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style license that can be | |
// found in the LICENSE file. | |
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
#ifndef _FPDF_DATAAVAIL_H_ | |
#define _FPDF_DATAAVAIL_H_ | |
#ifndef _FPDFVIEW_H_ | |
#include "fpdfview.h" | |
#endif | |
/** The result of the process which check linearized PDF. */ | |
#define FSDK_IS_LINEARIZED 1 | |
#define FSDK_NOT_LINEARIZED 0 | |
#define FSDK_UNKNOW_LINEARIZED -1 | |
#ifdef __cplusplus | |
extern "C" { | |
#endif | |
/** | |
* Interface: FX_FILEAVAIL | |
* Interface for checking whether the section of the file is available. | |
*/ | |
typedef struct _FX_FILEAVAIL { | |
/** | |
* Version number of the interface. Currently must be 1. | |
*/ | |
int version; | |
/** | |
* Method: IsDataAvail | |
* Report whether the specified data section is available. A section is available only if all bytes in the section is available. | |
* Interface Version: | |
* 1 | |
* Implementation Required: | |
* Yes | |
* Parameters: | |
* pThis - Pointer to the interface structure itself. | |
* offset - The offset of the data section in the file. | |
* size - The size of the data section | |
* Return Value: | |
* true means the specified data section is available. | |
* Comments: | |
* Called by Foxit SDK to check whether the data section is ready. | |
*/ | |
bool (*IsDataAvail)(struct _FX_FILEAVAIL* pThis, size_t offset, size_t size); | |
} FX_FILEAVAIL; | |
typedef void* FPDF_AVAIL; | |
/** | |
* Function: FPDFAvail_Create | |
* Create a document availability provider. | |
* | |
* Parameters: | |
* file_avail - Pointer to file availability interface to check availability of file data. | |
* file - Pointer to a file access interface for reading data from file. | |
* Return value: | |
* A handle to the document availability provider. NULL for error. | |
* Comments: | |
* Application must call FPDFAvail_Destroy when done with the availability provider. | |
*/ | |
DLLEXPORT FPDF_AVAIL STDCALL FPDFAvail_Create(FX_FILEAVAIL* file_avail, FPDF_FILEACCESS* file); | |
/** | |
* Function: FPDFAvail_Destroy | |
* Destroy a document availibity provider. | |
* | |
* Parameters: | |
* avail - Handle to document availability provider returned by FPDFAvail_Create | |
* Return Value: | |
* None. | |
*/ | |
DLLEXPORT void STDCALL FPDFAvail_Destroy(FPDF_AVAIL avail); | |
/** | |
* Interface: FX_DOWNLOADHINTS | |
* Download hints interface. Used to receive hints for further downloading. | |
*/ | |
typedef struct _FX_DOWNLOADHINTS { | |
/** | |
* Version number of the interface. Currently must be 1. | |
*/ | |
int version; | |
/** | |
* Method: AddSegment | |
* Add a section to be downloaded. | |
* Interface Version: | |
* 1 | |
* Implementation Required: | |
* Yes | |
* Parameters: | |
* pThis - Pointer to the interface structure itself. | |
* offset - The offset of the hint reported to be downloaded. | |
* size - The size of the hint reported to be downloaded. | |
* Return Value: | |
* None. | |
* Comments: | |
* Called by Foxit SDK to report some downloading hints for download manager. | |
* The position and size of section may be not accurate, part of the section might be already available. | |
* The download manager must deal with that to maximize download efficiency. | |
*/ | |
void (*AddSegment)(struct _FX_DOWNLOADHINTS* pThis, size_t offset, size_t size); | |
} FX_DOWNLOADHINTS; | |
/** | |
* Function: FPDFAvail_IsDocAvail | |
* Check whether the document is ready for loading, if not, get download hints. | |
* | |
* Parameters: | |
* avail - Handle to document availability provider returned by FPDFAvail_Create | |
* hints - Pointer to a download hints interface, receiving generated hints | |
* Return value: | |
* Non-zero for page is fully available, 0 for page not yet available. | |
* Comments: | |
* The application should call this function whenever new data arrived, and process all the | |
* generated download hints if any, until the function returns non-zero value. Then the | |
* application can call FPDFAvail_GetDocument() to get a document handle. | |
*/ | |
DLLEXPORT int STDCALL FPDFAvail_IsDocAvail(FPDF_AVAIL avail, FX_DOWNLOADHINTS* hints); | |
/** | |
* Function: FPDFAvail_GetDocument | |
* Get document from the availability provider. | |
* | |
* Parameters: | |
* avail - Handle to document availability provider returned by FPDFAvail_Create | |
* password - Optional password for decrypting the PDF file. | |
* Return value: | |
* Handle to the document. | |
* Comments: | |
* After FPDFAvail_IsDocAvail() returns TRUE, the application should call this function to | |
* get the document handle. To close the document, use FPDF_CloseDocument function. | |
*/ | |
DLLEXPORT FPDF_DOCUMENT STDCALL FPDFAvail_GetDocument(FPDF_AVAIL avail, | |
FPDF_BYTESTRING password); | |
/** | |
* Function: FPDFAvail_GetFirstPageNum | |
* Get page number for the first available page in a linearized PDF | |
* | |
* Parameters: | |
* doc - A document handle returned by FPDFAvail_GetDocument | |
* Return Value: | |
* Zero-based index for the first available page. | |
* Comments: | |
* For most linearized PDFs, the first available page would be just the first page, however, | |
* some PDFs might make other page to be the first available page. | |
* For non-linearized PDF, this function will always return zero. | |
*/ | |
DLLEXPORT int STDCALL FPDFAvail_GetFirstPageNum(FPDF_DOCUMENT doc); | |
/** | |
* Function: FPDFAvail_IsPageAvail | |
* Check whether a page is ready for loading, if not, get download hints. | |
* | |
* Parameters: | |
* avail - Handle to document availability provider returned by FPDFAvail_Create | |
* page_index - Index number of the page. 0 for the first page. | |
* hints - Pointer to a download hints interface, receiving generated hints | |
* Return value: | |
* Non-zero for page is fully available, 0 for page not yet available. | |
* Comments: | |
* This function call be called only after FPDFAvail_GetDocument if called. | |
* The application should call this function whenever new data arrived, and process all the | |
* generated download hints if any, until the function returns non-zero value. Then the | |
* application can perform page loading. | |
*/ | |
DLLEXPORT int STDCALL FPDFAvail_IsPageAvail(FPDF_AVAIL avail, int page_index, FX_DOWNLOADHINTS* hints); | |
/** | |
* Function: FPDFAvail_ISFormAvail | |
* Check whether Form data is ready for init, if not, get download hints. | |
* | |
* Parameters: | |
* avail - Handle to document availability provider returned by FPDFAvail_Create | |
* hints - Pointer to a download hints interface, receiving generated hints | |
* Return value: | |
* Non-zero for Form data is fully available, 0 for Form data not yet available. | |
* Details: -1 - error, the input parameter not correct, such as hints is null. | |
* 0 - data not available | |
* 1 - data available | |
* 2 - no form data. | |
* Comments: | |
* This function call be called only after FPDFAvail_GetDocument if called. | |
* The application should call this function whenever new data arrived, and process all the | |
* generated download hints if any, until the function returns non-zero value. Then the | |
* application can perform page loading. Recommend to call FPDFDOC_InitFormFillEnviroument | |
* after the function returns non-zero value. | |
*/ | |
DLLEXPORT int STDCALL FPDFAvail_IsFormAvail(FPDF_AVAIL avail, FX_DOWNLOADHINTS* hints); | |
/** | |
* Function: FPDFAvail_IsLinearized | |
* To check whether a document is Linearized PDF file. | |
* | |
* Parameters: | |
* avail - Handle to document availability provider returned by FPDFAvail_Create | |
* Return value: | |
* return TRUE means the document is linearized PDF else not. | |
* FSDK_IS_LINEARIZED is a linearize file. | |
* FSDK_NOT_LINEARIZED is not a linearize file. | |
* FSDK_UNKNOW_LINEARIZED don't know whether the file is a linearize file. | |
* Comments: | |
* It return TRUE/FALSE as soon as we have first 1K data. If the file's size less than | |
* 1K,we don't known whether the PDF is a linearized file. | |
* | |
*/ | |
DLLEXPORT FPDF_BOOL STDCALL FPDFAvail_IsLinearized(FPDF_AVAIL avail); | |
#ifdef __cplusplus | |
}; | |
#endif | |
#endif | |