Itext旋转PDF内容的方法

来源:互联网 发布:codol激光和握把数据 编辑:程序博客网 时间:2024/06/05 21:10

前不久使用Freemarker+Flying sauser +Itext 整合生成PDF,因打印要求,需要旋转PDF里的内容,使用过Pdf-renderer, PDFBox 和JPedal转PDF为图片再旋转图片的方式,效果不佳,被项目组否掉,几经周折,终于找到真正旋转PDF内容的方法。
方法如下:

import java.io.FileOutputStream;import com.itextpdf.text.Document;import com.itextpdf.text.pdf.PdfCopy;import com.itextpdf.text.pdf.PdfDictionary;import com.itextpdf.text.pdf.PdfName;import com.itextpdf.text.pdf.PdfNumber;import com.itextpdf.text.pdf.PdfReader;import com.itextpdf.text.pdf.PdfSmartCopy;public class PdfRotate {    public static void main(String[] args) throws Exception {        PdfReader reader = new PdfReader("d:\\1.pdf"); // 读取源文件         Document document = new Document(); // 建立文档        /*        切勿将源文件和输出文件使用一个路径,否则会出现异常:        Exception in thread "main" java.io.FileNotFoundException: d:\1.pdf         (请求的操作无法在使用用户映射区域打开的文件上执行。)        */        PdfCopy p = new PdfSmartCopy(document,new FileOutputStream("d:\\2.pdf")); // 生成的目标PDF文件        document.open();        int n = reader.getNumberOfPages(); // 获取源文件的页数        PdfDictionary pd;        for(int j=1;j<=n;j++){            pd = reader.getPageN(j);             pd.put(PdfName.ROTATE, new PdfNumber(90)); // 顺时针旋转90°        }        for (int page = 0; page < n; ) {            p.addPage(p.getImportedPage(reader, ++page));         }        document.close();       }}

注意:本方法需要Itextpdf5.0以上版本支持(我使用的是itextpdf-5.5.5.jar),目前大多数项目中使用Freemarker+Flying sauser +Itext 整合生成PDF,均采用iText-2.0.8.jar+core-renderer.jar,关键点在于切勿将项目中iText-2.0.8.jar升级换为itextpdf-5.5.5.jar,否则将导致core-renderer.jar包无法正常使用。同时引入iText-2.0.8.jar和itextpdf-5.5.5.jar。

Jar包下载:
iText-2.0.8.jar
core-renderer.jar
itextpdf-5.5.5.jar

参考:http://itextpdf.com/examples/iia.php?id=232

0 0
原创粉丝点击