| // 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 PUBLIC_FPDF_DATAAVAIL_H_ |
| #define PUBLIC_FPDF_DATAAVAIL_H_ |
| |
| #include <stddef.h> // For size_t. |
| |
| #include "fpdfview.h" |
| |
| #define PDF_LINEARIZATION_UNKNOWN -1 |
| #define PDF_NOT_LINEARIZED 0 |
| #define PDF_LINEARIZED 1 |
| |
| #define PDF_DATA_ERROR -1 |
| #define PDF_DATA_NOTAVAIL 0 |
| #define PDF_DATA_AVAIL 1 |
| |
| #define PDF_FORM_ERROR -1 |
| #define PDF_FORM_NOTAVAIL 0 |
| #define PDF_FORM_AVAIL 1 |
| #define PDF_FORM_NOTEXIST 2 |
| |
| #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. |
| */ |
| FPDF_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: |
| * PDF_DATA_ERROR: A common error is returned. It can't tell |
| * whehter data are availabe or not. |
| * PDF_DATA_NOTAVAIL: Data are not yet available. |
| * PDF_DATA_AVAIL: Data are available. |
| * Comments: |
| * Applications should call this function whenever new data arrived, |
| * and process all the generated download hints if any, until the |
| * function returns PDF_DATA_ERROR or PDF_DATA_AVAIL. Then |
| * applications 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: |
| * PDF_DATA_ERROR: A common error is returned. It can't tell |
| * whehter data are availabe or not. |
| * PDF_DATA_NOTAVAIL: Data are not yet available. |
| * PDF_DATA_AVAIL: Data are available. |
| * Comments: |
| * This function can be called only after FPDFAvail_GetDocument is |
| * called. Applications should call this function whenever new data |
| * arrived and process all the generated download hints if any, until |
| * this function returns PDF_DATA_ERROR or PDF_DATA_AVAIL. Then |
| * applications 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: |
| * PDF_FORM_ERROR - A common eror, in general incorrect parameters, |
| * like 'hints' is nullptr. |
| * PDF_FORM_NOTAVAIL - data not available |
| * PDF_FORM_AVAIL - data available |
| * PDF_FORM_NOTEXIST - no form data |
| * Comments: |
| * This function can be called only after FPDFAvail_GetDocument is |
| * 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_InitFormFillEnvironment |
| * 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: |
| * PDF_LINEARIZED is a linearize file. |
| * PDF_NOT_LINEARIZED is not a linearize file. |
| * PDF_LINEARIZATION_UNKNOWN doesn't know whether the file is a |
| *linearize file. |
| * |
| * Comments: |
| * It return PDF_LINEARIZED or PDF_NOT_LINEARIZED as soon as |
| * we have first 1K data. If the file's size less than 1K, it returns |
| * PDF_LINEARIZATION_UNKNOWN because there is not enough information to |
| * tell whether a PDF file is a linearized file or not. |
| * |
| */ |
| DLLEXPORT int STDCALL FPDFAvail_IsLinearized(FPDF_AVAIL avail); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif // PUBLIC_FPDF_DATAAVAIL_H_ |