*/
typedef void (fz_document_run_structure_fn)(fz_context *ctx, fz_document *doc, fz_device *dev, fz_cookie *cookie);
+/**
+ Get a handle to this document as PDF.
+
+ Returns a borrowed handle.
+*/
+typedef fz_document *(fz_document_as_pdf)(fz_context *ctx, fz_document *doc);
+
/**
Type for a function to make
a bookmark. See fz_make_bookmark for more information.
fz_document_output_intent_fn *get_output_intent;
fz_document_output_accelerator_fn *output_accelerator;
fz_document_run_structure_fn *run_structure;
+ fz_document_as_pdf *as_pdf;
int did_layout;
int is_reflowable;
return pdf_new_uri_from_explicit_dest(ctx, dest);
}
+static fz_document *
+as_pdf(fz_context *ctx, fz_document *doc)
+{
+ return doc;
+}
+
/*
Initializers for the fz_document interface.
doc->super.count_pages = pdf_count_pages_imp;
doc->super.load_page = pdf_load_page_imp;
doc->super.page_label = pdf_page_label_imp;
- doc->super.lookup_metadata = pdf_lookup_metadata_imp;
- doc->super.set_metadata = pdf_set_metadata_imp;
- doc->super.run_structure = pdf_run_document_structure_imp;
+ doc->super.lookup_metadata = (fz_document_lookup_metadata_fn*)pdf_lookup_metadata;
+ doc->super.set_metadata = (fz_document_set_metadata_fn*)pdf_set_metadata;
+ doc->super.run_structure = (fz_document_run_structure_fn *)pdf_run_document_structure;
+ doc->super.as_pdf = (fz_document_as_pdf *)as_pdf;
pdf_lexbuf_init(ctx, &doc->lexbuf.base, PDF_LEXBUF_LARGE);
doc->file = fz_keep_stream(ctx, file);
pdf_document *pdf_document_from_fz_document(fz_context *ctx, fz_document *ptr)
{
- return (pdf_document *)((ptr && ptr->count_pages == pdf_count_pages_imp) ? ptr : NULL);
+ if (!ptr || !ptr->as_pdf)
+ return NULL;
+ return ptr->as_pdf(ctx, ptr);
}
pdf_page *pdf_page_from_fz_page(fz_context *ctx, fz_page *page)