首页 > 代码库 > 报表pdf的合并、添加页码
报表pdf的合并、添加页码
某一项目,用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的办法。
报表pdf的合并、添加页码