某一项目,用ReportMachine做报表模板,然后写了一个DLL以JNI方式供Java调用。在处理时,需要将多个报表一次性打印输出。因为多个报表是以不同的报表模板生成的,所以转成各个pdf之后,需要将这多个pdf文件合并为一个。并且,这个文件,还得附加页码,因为原来做这样的报表,是用页码标签机手工盖印后归档,这样麻烦,希望用电脑输出时自动生成页码。今天终于把这个问题彻底解决了。

一、pdf文件的合并,使用pdftk工具,可以通过命令行,将多个合并为一个。
  1.将横向排列的报表,旋转变成纵向。
   pdftk in.pdf cat 1-endeast output out.pdf
  2. 将多个文件合并为一个文件
   pdftk 1.pdf 2.pdf 3.pdf output all.pdf
  这个工具参见:http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/

二、给pdf文件额外添加页码,使用cpdf工具。
  最开始时,对应pdftk有一个STAMPtk工具,就是为pdf加水印,可是它是商业版需要购买。接着找到a-pdf.com这个网站,然后对应找了一个PDFNumber.exe破解的,可惜它是GUI操作方式,不适合在后台用命令行静默执行。费了好大劲,才找到cpdf这个工具,试了一下,加页码确实不错。
  命令:cpdf -bottomright 40 -font Arial -font-size 16 -add-text “%Page” 0.pdf -o 1.pdf
  此命令会输出:For non-commercial use only…. 可加参数 2>nul来屏蔽。
  cpdf -bottomright 40 -font Courier -font-size 16 -add-text “%Page” 0.pdf -o 1.pdf 2>nul
  详见:http://community.coherentpdf.com/

至此,关于多个pdf合并,并且添加页码的要求,成功实现。

补充: cpdf也可以实现pdf文件合并的功能,且可以旋转。
  合并:cpdf -merge 1.pdf 2.pdf -o all.pdf
  旋转:cpdf -rotate 270 3.pdf -o 4.pdf
 在添加页码时,如果有文件是旋转的pdf,为了一致都在所见的文件统一位置,应加参数-prerotate才行。
  cpdf -prerotate -bottomright 40 -font Arial -font-size 16 -add-text “%Page” 0.pdf -o 1.pdf 2>nul
 同时,上一命令行,如果是放在批处理中,百分号(%)需要转义,用两个%才行。

 

   目前,报表操作部分,我是用cpdf的办法。

 

版权声明:本文为bigsong原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/bigsong/p/3983802.html