C14.14: export HTML, HTML and folder, PDF (MuPDF story in the PDF worker) and plain text; print; rich copy
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
f1cb7eff99
commit
d7ded183ae
27 files changed
+1427
-24
No files matched your search
@@ -0,0 +1,53 @@
|
||||
/* A folder's HTML page as a PDF (MARK-11). */
|
||||
|
||||
#include "ely_shim.h"
|
||||
|
||||
/* A4, two centimetres in from each edge. */
|
||||
static const fz_rect sheet = {0, 0, 595.28f, 841.89f};
|
||||
static const fz_rect area = {56.69f, 56.69f, 538.59f, 785.2f};
|
||||
|
||||
int ely_html_pdf(fz_context *ctx, const char *dir, const char *page, const char *out)
|
||||
{
|
||||
fz_archive *folder = NULL;
|
||||
fz_buffer *html = NULL;
|
||||
fz_story *story = NULL;
|
||||
fz_document_writer *writer = NULL;
|
||||
fz_var(folder);
|
||||
fz_var(html);
|
||||
fz_var(story);
|
||||
fz_var(writer);
|
||||
fz_try(ctx)
|
||||
{
|
||||
ely_watch_begin(ctx);
|
||||
folder = fz_open_directory(ctx, dir);
|
||||
html = fz_read_archive_entry(ctx, folder, page);
|
||||
story = fz_new_story(ctx, html, NULL, 11, folder);
|
||||
writer = fz_new_pdf_writer(ctx, out, "");
|
||||
int more;
|
||||
do
|
||||
{
|
||||
fz_device *dev = fz_begin_page(ctx, writer, sheet);
|
||||
more = fz_place_story(ctx, story, area, NULL);
|
||||
fz_draw_story(ctx, story, dev, fz_identity);
|
||||
fz_end_page(ctx, writer);
|
||||
} while (more);
|
||||
fz_close_document_writer(ctx, writer);
|
||||
/* The story keeps its own warnings. */
|
||||
const char *said = fz_story_warnings(ctx, story);
|
||||
if (said && said[0])
|
||||
fz_throw(ctx, FZ_ERROR_FORMAT, "the page did not set whole: %s", said);
|
||||
if (ely_watch_end(ctx))
|
||||
fz_throw(ctx, FZ_ERROR_FORMAT, "the page did not set whole: %s", ely_open_warnings());
|
||||
}
|
||||
fz_always(ctx)
|
||||
{
|
||||
ely_watch_end(ctx);
|
||||
fz_drop_document_writer(ctx, writer);
|
||||
fz_drop_story(ctx, story);
|
||||
fz_drop_buffer(ctx, html);
|
||||
fz_drop_archive(ctx, folder);
|
||||
}
|
||||
fz_catch(ctx)
|
||||
return ely_fail(ctx);
|
||||
return 0;
|
||||
}
|
||||
Reference in new issue
Block a user