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 )