将A4 PDF页面分为两个A5,然后再次返回
我有A4页的PDF。出于打印原因,每页包含两个相同的A5页。我要在Java程序中做的是拆分这些页面,并将每个唯一的A5页面零次使用多次作为模板来添加/替换一些文本。完成此操作后,我想将A5页面重新粘贴回A4页面(出于相同的打印原因)。
一个示例:使用第三页第一页和第二页一次。
- 拆分页面。(并丢弃正确的A5页)
- 创建第一页的三个副本和第二页的一个副本。
- 添加/替换文本。
- 将页面粘合在一起,以便获得两张A4页面。第一个具有前两个“页面1”,第二个具有第三个“页面1”和唯一的“第二页面”。
这应该可能吗?不是吗 我正在考虑使用iText。但是,如果有人有其他建议,我很乐意改变主意。
回答:
我曾经用camlpdf做过类似的事情。就我而言,我有一个PDF,其中一个物理A4页面由两个逻辑A5页面组成,并且我想获得一个带有A5页面的普通PDF(即,逻辑和物理页面相同)。
这是在OCaml中(F#也存在camlpdf),我的代码如下:
let pdf = Pdfread.pdf_of_file None in_file ;;let pdf =
let (pdf,_perms) = Pdfcrypt.decrypt_pdf "" pdf in
match pdf with
| Some pdf -> pdf
| None -> failwith "Could not decrypt"
;;
let pdf = Pdfmarks.remove_bookmarks pdf ;;
let pages = Pdfdoc.pages_of_pagetree pdf ;;
let pages = List.fold_right (fun page acc ->
let (y1,x1,y2,x2) = Pdf.parse_rectangle page.Pdfdoc.mediabox in
let box y1 x1 y2 x2 = Pdf.Array
[ Pdf.Real y1; Pdf.Real x1; Pdf.Real y2; Pdf.Real x2 ]
in
let xm = x1 *. 0.5 +. x2 *. 0.5 in
let pagel = {page with Pdfdoc.mediabox = box y1 x1 y2 xm}
and pager = {page with Pdfdoc.mediabox = box y1 xm y2 x2}
in pagel::pager::acc
) pages [] ;;
let pdf = Pdfdoc.change_pages false pdf pages ;;
Pdf.remove_unreferenced pdf ;;
Pdfwrite.pdf_to_file pdf out_file ;;
如果iText提供了类似的抽象,也许您可以执行类似的操作。步骤如下:
- 阅读和(可选)解密pdf
- 删除书签(可选)
- 从页面树中获取页面
- 操作页面:您可以重新排列,复制和删除页面,并且可以更改其媒体盒(边框);足以满足您的目的?
- 用新页面重建文档
- 删除未引用的对象(如垃圾收集)
- 写出结果PDF
以上是 将A4 PDF页面分为两个A5,然后再次返回 的全部内容, 来源链接: utcz.com/qa/423814.html