273 lines
9.2 KiB
C
273 lines
9.2 KiB
C
// 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_
|