///|
/// Typeset UTF-8 text into a standalone PDF document using an existing font
/// pack.
///
/// When `process_struct_tree` is set, paragraph tags are added and a
/// `/StructTreeRoot` with page-level parent-tree entries is installed.
pub fn pdf_texttopdf_typeset(
fontpack : PdfFontPack,
font_size : Double,
paper : @geometry.PaperSize,
text : BytesView,
process_struct_tree? : Bool = false,
subformat? : PdfUASubformat? = None,
title? : String? = None,
) -> PdfDocument raise @core.PdfError {
let process_struct_tree = process_struct_tree || subformat != None
let title = match (subformat, title) {
(Some(_), Some(title)) => Some(title)
(Some(_), None) => raise TitleExpected
(None, title) => title
}
let document = pdf_document_empty()
let instructions = pdf_texttopdf_of_utf8_with_newlines(
fontpack, font_size, text,
)
let tagged = if process_struct_tree {
pdf_texttopdf_tag_paragraphs(instructions)
} else {
instructions
}
let elements = pdf_texttopdf_document_elements(tagged)
let margin = @geometry.unit_points(paper.width(), paper.unit()) / 15.0
let result = document.pdf_type_typeset(
process_struct_tree, margin, margin, margin, margin, paper, elements,
)
let pages = if process_struct_tree {
pdf_texttopdf_struct_parent_pages(result.pages)
} else {
result.pages
}
let page_root = document.add_pagetree(pages)
ignore(document.add_root(page_root, []))
if process_struct_tree {
document.pdf_texttopdf_add_structure_tree(result.tags, subformat)
}
match (subformat, title) {
(Some(subformat), Some(title)) =>
document.pdf_ua_apply_subformat_metadata(subformat, title)
_ => ()
}
document
}
///|
/// Compatibility wrapper matching cpdftexttopdf's `typeset` required argument
/// order.
pub fn pdf_texttopdf_typeset_cpdf_order(
process_struct_tree : Bool,
paper : @geometry.PaperSize,
fontpack : PdfFontPack,
font_size : Double,
text : BytesView,
subformat? : PdfUASubformat? = None,
title? : String? = None,
) -> PdfDocument raise @core.PdfError {
pdf_texttopdf_typeset(
fontpack,
font_size,
paper,
text,
process_struct_tree~,
subformat~,
title~,
)
}