您的位置:首页 > 编程语言 > Java开发

java利用itext编辑pdf

2016-08-08 11:10 309 查看
最近项目需要,在调研如何在pdf中增加标识字样,用来区分版本.最后确定用itext来实现.

     itext的官网是:http://www.itextpdf.com/

代码如下:

Java代码  


/** 

 * authory kingviker  

 * time : 2012-12-12 

 */  

import java.io.FileOutputStream;  

import java.io.IOException;  

  

import com.itextpdf.text.DocumentException;  

import com.itextpdf.text.Font;  

import com.itextpdf.text.Image;  

import com.itextpdf.text.pdf.BaseFont;  

import com.itextpdf.text.pdf.PdfArray;  

import com.itextpdf.text.pdf.PdfContentByte;  

import com.itextpdf.text.pdf.PdfDictionary;  

import com.itextpdf.text.pdf.PdfName;  

import com.itextpdf.text.pdf.PdfObject;  

import com.itextpdf.text.pdf.PdfReader;  

import com.itextpdf.text.pdf.PdfStamper;  

  

public class AddContentToPDF {  

  

    public static void main(String[] args) throws IOException, DocumentException {  

  

        //创建一个pdf读入流  

        PdfReader reader = new PdfReader("C:/help.pdf");   

        //根据一个pdfreader创建一个pdfStamper.用来生成新的pdf.  

        PdfStamper stamper = new PdfStamper(reader,  

          new FileOutputStream("C:/help2.pdf"));   

          

        //这个字体是itext-asian.jar中自带的 所以不用考虑操作系统环境问题.  

        BaseFont bf = BaseFont.createFont("STSong-Light",   

                "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); // set font  

        //baseFont不支持字体样式设定.但是font字体要求操作系统支持此字体会带来移植问题.  

        Font font = new Font(bf,10);  

        font.setStyle(Font.BOLD);  

        font.getBaseFont();  

        //页数是从1开始的  

        for (int i=1; i<=reader.getNumberOfPages(); i++){  

  

           //获得pdfstamper在当前页的上层打印内容.也就是说 这些内容会覆盖在原先的pdf内容之上.  

            PdfContentByte over = stamper.getOverContent(i);  

            //用pdfreader获得当前页字典对象.包含了该页的一些数据.比如该页的坐标轴信息.  

            PdfDictionary p = reader.getPageN(i);  

            //拿到mediaBox 里面放着该页pdf的大小信息.  

           PdfObject po =  p.get(new PdfName("MediaBox"));  

           System.out.println(po.isArray());  

           //po是一个数组对象.里面包含了该页pdf的坐标轴范围.  

           PdfArray pa = (PdfArray) po;  

           System.out.println(pa.size());  

           //看看y轴的最大值.  

           System.out.println(pa.getAsNumber(pa.size()-1));  

            //开始写入文本  

            over.beginText();  

            //设置字体和大小  

            over.setFontAndSize(font.getBaseFont(), 10);

//设置字体颜色

            over.setColorFill(BaseColor.RED); 

            //设置字体的输出位置  

            over.setTextMatrix(107, 540);   

            //要输出的text  

            over.showText("我要加[终稿]字样 " + i);    

            over.endText();  

            //创建一个image对象.  

            Image image = Image.getInstance("c:/1.jpg");  

            //设置image对象的输出位置pa.getAsNumber(pa.size()-1).floatValue() 是该页pdf坐标轴的y轴的最大值  

            image.setAbsolutePosition(0,pa.getAsNumber(pa.size()-1).floatValue()-100);//0, 0, 841.92, 595.32  

            over.addImage(image);  

             

            //画一个圈.  

            over.setRGBColorStroke(0xFF, 0x00, 0x00);  

            over.setLineWidth(5f);  

            over.ellipse(250, 450, 350, 550);  

            over.stroke();  

        }  

  

        stamper.close();  

  

    }  

}  



 

 

jar我下载的都是2012-12-12的最新版

itextpdf-5.3.4.jar (1.7 MB)
下载次数: 19
itext-asian.jar (2.1 MB)
下载次数: 23

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: