///|
fn PdfDocument::pdf_page_stamp_protect_content(
self : PdfDocument,
resources : @syntax.PdfObject,
content : ArrayView[@syntax.PdfObject],
fast : Bool,
) -> Array[@syntax.PdfObject] raise @core.PdfError {
let deficit = if fast {
0
} else {
let ops = self.pdf_page_parse_content_ops(resources, content)
let mut saves = 0
let mut restores = 0
for op in ops {
match op {
Op_q => saves += 1
Op_Q => restores += 1
_ => ()
}
}
if saves > restores {
saves - restores
} else {
0
}
}
let begin_number = self.add_object(pdf_content_stream_of_ops([Op_q]))
let end_ops : Array[@content.PdfContentOp] = []
for _ in 0.. Array[@syntax.PdfObject] {
[..first, ..second]
}
///|
fn PdfDocument::pdf_page_stamp_pair(
self : PdfDocument,
overlay_page : @page.PdfPage,
under_page : @page.PdfPage,
relative_to_box : @core.PdfName,
position : @geometry.PdfPosition,
topline : Bool,
midline : Bool,
scale_to_fit : Bool,
is_over : Bool,
fast : Bool,
) -> @page.PdfPage raise @core.PdfError {
let overlay_page = self.pdf_page_stamp_transform_overlay(
overlay_page, under_page, relative_to_box, position, topline, midline, scale_to_fit,
fast,
)
let under_content = self.pdf_page_stamp_protect_content(
under_page.resources,
under_page.content,
fast,
)
let overlay_content = self.pdf_page_stamp_protect_content(
overlay_page.resources,
overlay_page.content,
fast,
)
{
..under_page,
content: if is_over {
pdf_page_stamp_concat_content(under_content, overlay_content)
} else {
pdf_page_stamp_concat_content(overlay_content, under_content)
},
rest: self.combine_pdf_rests(under_page.rest, overlay_page.rest),
resources: self.combine_pdf_resources(
under_page.resources,
overlay_page.resources,
),
}
}