///|
fn PdfDocument::pdf_font_remove_descriptor_files(
self : PdfDocument,
object : @syntax.PdfObject,
) -> @syntax.PdfObject raise @core.PdfError {
match object {
PdfDictionary(_) =>
match self.lookup_direct(pdf_text_type_key_name, object) {
Some(PdfNameObject(kind)) if kind == pdf_text_font_name =>
match self.lookup_direct(pdf_text_font_descriptor_key_name, object) {
Some(PdfDictionary(_) | PdfStreamObject(_) as descriptor) => {
let stripped = descriptor
.remove_dict_entry(pdf_text_font_file_key_name)
.remove_dict_entry(pdf_text_font_file2_key_name)
.remove_dict_entry(pdf_text_font_file3_key_name)
object.add_dict_entry(
pdf_text_font_descriptor_key_name,
PdfIndirect(self.add_object(stripped)),
)
}
_ => object
}
_ => object
}
_ => object
}
}
///|
/// Return a copy of the document with embedded font-file references removed.
///
/// This ports cpdf's `remove_fonts`: every parsed `/Type /Font` dictionary with
/// a `/FontDescriptor` receives a new descriptor object with `/FontFile`,
/// `/FontFile2`, and `/FontFile3` removed. The original document and original
/// descriptor objects are left untouched.
pub fn PdfDocument::remove_embedded_fonts(
self : PdfDocument,
) -> PdfDocument raise @core.PdfError {
let pdf = self.copy()
let entries = pdf.parsed_object_entries()
for entry in entries {
pdf.add_object_given_number(
entry.0,
pdf.pdf_font_remove_descriptor_files(entry.2),
generation=entry.1,
)
}
pdf
}
///|
/// Compatibility wrapper for `PdfDocument::remove_embedded_fonts`.
pub fn pdf_remove_fonts(
document : PdfDocument,
) -> PdfDocument raise @core.PdfError {
document.remove_embedded_fonts()
}