///|
/// Return cpdf-style document information report fields as stdout-style UTF-8 bytes.
pub fn PdfDocument::info_blob(
self : PdfDocument,
encoding? : @metadata.PdfMetadataEncoding = PdfMetadataUTF8,
unit? : @geometry.PdfUnit = PdfPoint,
) -> @core.PdfBytes raise @core.PdfError {
let output : Array[String] = []
let (major, minor) = self.version()
let pages = self.pages_of_pagetree()
pdf_metadata_push_text_line(
output,
"Version",
major.to_string() + "." + minor.to_string(),
)
pdf_metadata_push_text_line(output, "Pages", pages.length().to_string())
let info_fields : Array[(String, @core.PdfName)] = [
("Title", pdf_metadata_name("/Title")),
("Author", pdf_metadata_name("/Author")),
("Subject", pdf_metadata_name("/Subject")),
("Keywords", pdf_metadata_name("/Keywords")),
("Creator", pdf_metadata_name("/Creator")),
("Producer", pdf_metadata_name("/Producer")),
("Created", pdf_metadata_name("/CreationDate")),
("Modified", pdf_metadata_name("/ModDate")),
("Trapped", pdf_metadata_trapped()),
]
for field in info_fields {
pdf_metadata_push_text_line(
output,
field.0,
self.pdf_metadata_info_encoded(field.1, encoding),
)
}
pdf_metadata_push_text_line(
output,
"PageMode",
self.catalog_item(pdf_metadata_page_mode()),
)
pdf_metadata_push_text_line(
output,
"PageLayout",
self.catalog_item(pdf_metadata_page_layout()),
)
pdf_metadata_push_text_line(output, "OpenAction", self.open_action_string())
let viewer_fields : Array[(String, @core.PdfName)] = [
("HideToolbar", pdf_metadata_name("/HideToolbar")),
("HideMenubar", pdf_metadata_name("/HideMenubar")),
("HideWindowUI", pdf_metadata_name("/HideWindowUI")),
("FitWindow", pdf_metadata_name("/FitWindow")),
("CenterWindow", pdf_metadata_name("/CenterWindow")),
("DisplayDocTitle", pdf_metadata_name("/DisplayDocTitle")),
("NonFullScreenPageMode", pdf_metadata_non_full_screen_page_mode()),
]
for field in viewer_fields {
pdf_metadata_push_text_line(
output,
field.0,
self.viewer_preference_item(field.1),
)
}
let acroform = match self.catalog_item(pdf_metadata_acroform()) {
"" => "False"
value => value
}
pdf_metadata_push_text_line(output, "AcroForm", acroform)
pdf_metadata_push_text_line(
output,
"XFA",
if self.is_xfa() {
"True"
} else {
"False"
},
)
pdf_metadata_push_text_line(
output,
"Marked",
if self.mark_info_item(pdf_metadata_name("/Marked")) {
"True"
} else {
"False"
},
)
pdf_metadata_push_text_line(
output,
"UserProperties",
if self.mark_info_item(pdf_metadata_name("/UserProperties")) {
"True"
} else {
"False"
},
)
pdf_metadata_push_text_line(
output,
"Suspects",
if self.mark_info_item(pdf_metadata_name("/Suspects")) {
"True"
} else {
"False"
},
)
let mediaboxes : Array[@syntax.PdfObject?] = []
let cropboxes : Array[@syntax.PdfObject?] = []
let bleedboxes : Array[@syntax.PdfObject?] = []
let trimboxes : Array[@syntax.PdfObject?] = []
let artboxes : Array[@syntax.PdfObject?] = []
for page in pages {
mediaboxes.push(Some(page.mediabox))
cropboxes.push(self.lookup_direct(pdf_metadata_cropbox(), page.rest))
bleedboxes.push(self.lookup_direct(pdf_metadata_bleedbox(), page.rest))
trimboxes.push(self.lookup_direct(pdf_metadata_trimbox(), page.rest))
artboxes.push(self.lookup_direct(pdf_metadata_artbox(), page.rest))
}
pdf_metadata_push_text_line(
output,
"MediaBox",
self.pdf_metadata_info_box_text(mediaboxes, unit),
)
pdf_metadata_push_text_line(
output,
"CropBox",
self.pdf_metadata_info_box_text(cropboxes, unit),
)
pdf_metadata_push_text_line(
output,
"BleedBox",
self.pdf_metadata_info_box_text(bleedboxes, unit),
)
pdf_metadata_push_text_line(
output,
"TrimBox",
self.pdf_metadata_info_box_text(trimboxes, unit),
)
pdf_metadata_push_text_line(
output,
"ArtBox",
self.pdf_metadata_info_box_text(artboxes, unit),
)
@utf8.encode(output.join(""))
}