///|
fn pdf_addtext_font_not_found(fontname : @core.PdfName) -> @core.PdfError {
SoftError(
"addtext: font " + @ascii.decode_lossy(fontname.bytes()) + " not found",
)
}
///|
/// Resolve an existing page font for cpdf add-text.
///
/// The requested name is first treated as a `/Font` resource key. If that is
/// absent, the page font dictionary is scanned for an entry whose `/BaseFont`
/// matches the requested name; the returned `@core.PdfName` is the resource key to
/// use in emitted text operators.
pub fn PdfDocument::addtext_existing_font_resource(
self : PdfDocument,
page : @page.PdfPage,
fontname : @core.PdfName,
) -> (@core.PdfName, @syntax.PdfObject) raise @core.PdfError {
let fontdict = match
self.lookup_direct(pdf_addtext_font_key(), page.resources) {
Some(fontdict) => fontdict
None => raise SoftError("addtext: font dictionary not present")
}
match self.lookup_direct(fontname, fontdict) {
Some(font) => (fontname, font)
None =>
match fontdict {
PdfDictionary(entries) =>
for entry in entries {
match self.lookup_direct(pdf_text_base_font_key_name, entry.1) {
Some(PdfNameObject(basefont)) if basefont == fontname =>
break (entry.0, entry.1)
_ => ()
}
} nobreak {
raise pdf_addtext_font_not_found(fontname)
}
_ => raise pdf_addtext_font_not_found(fontname)
}
}
}
///|
/// Compatibility wrapper for `PdfDocument::addtext_existing_font_resource`.
pub fn pdf_addtext_existing_font_resource(
document : PdfDocument,
page : @page.PdfPage,
fontname : @core.PdfName,
) -> (@core.PdfName, @syntax.PdfObject) raise @core.PdfError {
document.addtext_existing_font_resource(page, fontname)
}
///|
/// Measure add-text bytes using an existing page font resource.
pub fn PdfDocument::addtext_width_of_existing_font_resource(
self : PdfDocument,
page : @page.PdfPage,
fontname : @core.PdfName,
font_size : Double,
text : BytesView,
) -> (@core.PdfName, Double) raise @core.PdfError {
let (resource_name, font_object) = self.addtext_existing_font_resource(
page, fontname,
)
let font = self.read_font(font_object)
(resource_name, pdf_addtext_width_of_selected_font(font, font_size, text))
}
///|
/// Compatibility wrapper for `PdfDocument::addtext_width_of_existing_font_resource`.
pub fn pdf_addtext_width_of_existing_font_resource(
document : PdfDocument,
page : @page.PdfPage,
fontname : @core.PdfName,
font_size : Double,
text : BytesView,
) -> (@core.PdfName, Double) raise @core.PdfError {
document.addtext_width_of_existing_font_resource(
page, fontname, font_size, text,
)
}