///|
fn merge_pdfs(pdfs : Array[@pdf.Pdf]) -> @pdf.Pdf raise {
let renumbered = @pdf.renumber_pdfs(pdfs)
let mut max_minor = 0
for pdf in renumbered {
if pdf.minor > max_minor {
max_minor = pdf.minor
}
}
let pages = []
for pdf in renumbered {
let pagelist = @pdfpage.PdfPageDoc::new(pdf).pages_of_pagetree()
pages.append(pagelist[:])
}
let pdf = @pdf.Pdf::empty()
for src in renumbered {
src.objiter((k, v) => pdf.addobj_given_num((k, v)))
}
let (pdf, pagetree_num) = @pdfpage.PdfPageDoc::new(pdf).add_pagetree(pages)
let pdf = @pdfpage.PdfPageDoc::new(pdf).add_root(pagetree_num, [])
pdf.remove_unreferenced()
let pdf : @pdf.Pdf = {
major: 1,
minor: max_minor,
root: pdf.root,
objects: pdf.objects,
trailerdict: pdf.trailerdict,
was_linearized: pdf.was_linearized,
saved_encryption: pdf.saved_encryption,
}
pdf
}
///|
async fn main {
run(@env.args())
}
///|
pub async fn run(args : Array[String], quiet? : Bool = false) -> Unit {
let argc = args.length()
if argc < 3 {
if !quiet {
println("Syntax: pdfmerge