///|
/// Render cpdf's bookmark listing for selected pages.
///
/// Text output matches cpdf's line-oriented bookmark format. When `json` is
/// set, this returns UTF-8 JSON bytes for the same filtered bookmark set.
pub fn PdfDocument::list_bookmarks(
self : PdfDocument,
page_numbers : ArrayView[Int],
encoding? : @metadata.PdfMetadataEncoding = PdfMetadataUTF8,
json? : Bool = false,
json_preserve_actions? : Bool = false,
) -> @core.PdfBytes raise @core.PdfError {
let bookmarks = self.pdf_bookmark_listing_bookmarks(
page_numbers,
json && json_preserve_actions,
)
if json {
@utf8.encode(self.pdf_bookmark_listing_json(bookmarks).stringify())
} else {
let lines : Array[PdfBookmarkListingTextLine] = Array(
capacity=bookmarks.length(),
)
let mut length = 0
for bookmark in bookmarks {
let line = self.pdf_bookmark_listing_text_line(bookmark, encoding)
length += line.byte_length()
lines.push(line)
}
let output = Array::make(length, b'\x00')
let mut position = 0
for line in lines {
position = line.write_to(output, position)
}
Bytes::from_array(output)
}
}
///|
/// Return cpdf's full-document bookmark JSON listing.
pub fn PdfDocument::bookmarks_json(
self : PdfDocument,
json_preserve_actions? : Bool = false,
) -> Json raise @core.PdfError {
let end_page = self.endpage()
let page_numbers = Array::make(end_page, 0)
for index in 0.. @core.PdfBytes raise @core.PdfError {
@utf8.encode(self.bookmarks_json(json_preserve_actions~).stringify())
}
///|
/// Compatibility wrapper for `PdfDocument::list_bookmarks`.
pub fn pdf_list_bookmarks(
json : Bool,
json_preserve_actions : Bool,
encoding : @metadata.PdfMetadataEncoding,
page_numbers : ArrayView[Int],
document : PdfDocument,
) -> @core.PdfBytes raise @core.PdfError {
document.list_bookmarks(
page_numbers,
encoding~,
json~,
json_preserve_actions~,
)
}
///|
/// Compatibility wrapper for `PdfDocument::bookmarks_json_blob`.
pub fn pdf_get_bookmarks_json(
json_preserve_actions : Bool,
document : PdfDocument,
) -> @core.PdfBytes raise @core.PdfError {
document.bookmarks_json_blob(json_preserve_actions~)
}