PDF-Make
view release on metacpan or search on metacpan
include/pdfmake_linear.h view on Meta::CPAN
* Prepares document for linearized output.
*/
pdfmake_err_t pdfmake_doc_linearize(pdfmake_doc_t *doc);
/*
* Write document in linearized format.
*/
pdfmake_err_t pdfmake_doc_write_linearized(pdfmake_doc_t *doc, pdfmake_buf_t *out);
/*
* Write linearized document to file path.
*/
pdfmake_err_t pdfmake_doc_write_linearized_to_path(
pdfmake_doc_t *doc,
const char *path
);
/*============================================================================
* Streaming Reader (for byte-range fetching)
*==========================================================================*/
/*
* Callback function for fetching byte ranges.
* Should return number of bytes read, or -1 on error.
*/
typedef ssize_t (*pdfmake_fetch_fn)(
void *ctx,
size_t offset,
size_t length,
uint8_t *out
);
/*
* Streaming reader for linearized PDFs.
*/
typedef struct pdfmake_stream_reader {
pdfmake_fetch_fn fetch;
void *fetch_ctx;
pdfmake_arena_t *arena;
/* Linearization info (from first fetch) */
pdfmake_linear_params_t params;
int is_linearized;
/* Hint tables (parsed from hint stream) */
pdfmake_hint_tables_t hints;
int hints_loaded;
/* Page availability bitmap */
uint8_t *page_loaded;
/* Cached data */
uint8_t *header_data;
size_t header_len;
/* Parsed document (incrementally built) */
pdfmake_doc_t *doc;
} pdfmake_stream_reader_t;
/*
* Create streaming reader with fetch callback.
*/
pdfmake_stream_reader_t *pdfmake_stream_reader_new(
pdfmake_fetch_fn fetch,
void *ctx
);
/*
* Free streaming reader.
*/
void pdfmake_stream_reader_free(pdfmake_stream_reader_t *reader);
/*
* Read and parse header/linearization dictionary.
* This is the first fetch operation.
*/
pdfmake_err_t pdfmake_stream_reader_read_header(pdfmake_stream_reader_t *reader);
/*
* Load hint tables (if linearized).
*/
pdfmake_err_t pdfmake_stream_reader_load_hints(pdfmake_stream_reader_t *reader);
/*
* Check if a specific page is loaded.
*/
int pdfmake_stream_reader_page_available(
pdfmake_stream_reader_t *reader,
int page_num
);
/*
* Read/fetch a specific page's data.
* page_num is 0-based.
*/
pdfmake_err_t pdfmake_stream_reader_read_page(
pdfmake_stream_reader_t *reader,
int page_num
);
/*
* Get byte range for a page (for HTTP Range header).
* Returns PDFMAKE_OK and fills offset/length, or PDFMAKE_EINVAL if unknown.
*/
pdfmake_err_t pdfmake_stream_reader_page_range(
pdfmake_stream_reader_t *reader,
int page_num,
size_t *offset,
size_t *length
);
/*
* Get the total page count (available after read_header for linearized).
*/
size_t pdfmake_stream_reader_page_count(pdfmake_stream_reader_t *reader);
/*
* Get the underlying document (incrementally populated).
*/
pdfmake_doc_t *pdfmake_stream_reader_doc(pdfmake_stream_reader_t *reader);
/*============================================================================
* Hint Table Parsing
*==========================================================================*/
/*
* Parse hint stream data into hint tables.
*/
pdfmake_err_t pdfmake_parse_hint_stream(
( run in 1.869 second using v1.01-cache-2.11-cpan-6aa56a78535 )