java利用itext编辑pdf

时间:2023-01-27 20:05:43
最近项目需要,在调研如何在pdf中增加标识字样,用来区分版本.最后确定用itext来实现 .

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

代码如下:

Java代码   java利用itext编辑pdf
  1. /** 
  2.  * authory kingviker  
  3.  * time : 2012-12-12 
  4.  */  
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7.   
  8. import com.itextpdf.text.DocumentException;  
  9. import com.itextpdf.text.Font;  
  10. import com.itextpdf.text.Image;  
  11. import com.itextpdf.text.pdf.BaseFont;  
  12. import com.itextpdf.text.pdf.PdfArray;  
  13. import com.itextpdf.text.pdf.PdfContentByte;  
  14. import com.itextpdf.text.pdf.PdfDictionary;  
  15. import com.itextpdf.text.pdf.PdfName;  
  16. import com.itextpdf.text.pdf.PdfObject;  
  17. import com.itextpdf.text.pdf.PdfReader;  
  18. import com.itextpdf.text.pdf.PdfStamper;  
  19.   
  20. public class AddContentToPDF {  
  21.   
  22.     public static void main(String[] args) throws IOException, DocumentException {  
  23.   
  24.         //创建一个pdf读入流  
  25.         PdfReader reader = new PdfReader("C:/help.pdf");   
  26.         //根据一个pdfreader创建一个pdfStamper.用来生成新的pdf.  
  27.         PdfStamper stamper = new PdfStamper(reader,  
  28.           new FileOutputStream("C:/help2.pdf"));   
  29.           
  30.         //这个字体是itext-asian.jar中自带的 所以不用考虑操作系统环境问题.  
  31.         BaseFont bf = BaseFont.createFont("STSong-Light",   
  32.                 "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); // set font  
  33.         //baseFont不支持字体样式设定.但是font字体要求操作系统支持此字体会带来移植问题.  
  34.         Font font = new Font(bf,10);  
  35.         font.setStyle(Font.BOLD);  
  36.         font.getBaseFont();  
  37.         //页数是从1开始的  
  38.         for (int i=1; i<=reader.getNumberOfPages(); i++){  
  39.   
  40.            //获得pdfstamper在当前页的上层打印内容.也就是说 这些内容会覆盖在原先的pdf内容之上.  
  41.             PdfContentByte over = stamper.getOverContent(i);  
  42.             //用pdfreader获得当前页字典对象.包含了该页的一些数据.比如该页的坐标轴信息.  
  43.             PdfDictionary p = reader.getPageN(i);  
  44.             //拿到mediaBox 里面放着该页pdf的大小信息.  
  45.            PdfObject po =  p.get(new PdfName("MediaBox"));  
  46.            System.out.println(po.isArray());  
  47.            //po是一个数组对象.里面包含了该页pdf的坐标轴范围.  
  48.            PdfArray pa = (PdfArray) po;  
  49.            System.out.println(pa.size());  
  50.            //看看y轴的最大值.  
  51.            System.out.println(pa.getAsNumber(pa.size()-1));  
  52.             //开始写入文本  
  53.             over.beginText();  
  54.             //设置字体和大小  
  55.             over.setFontAndSize(font.getBaseFont(), 10);
  56. //设置字体颜色
  57.             over.setColorFill(BaseColor.RED); 
  58.             //设置字体的输出位置  
  59.             over.setTextMatrix(107540);   
  60.             //要输出的text  
  61.             over.showText("我要加[终稿]字样 " + i);    
  62.             over.endText();  
  63.             //创建一个image对象.  
  64.             Image image = Image.getInstance("c:/1.jpg");  
  65.             //设置image对象的输出位置pa.getAsNumber(pa.size()-1).floatValue() 是该页pdf坐标轴的y轴的最大值  
  66.             image.setAbsolutePosition(0,pa.getAsNumber(pa.size()-1).floatValue()-100);//0, 0, 841.92, 595.32  
  67.             over.addImage(image);  
  68.              
  69.             //画一个圈.  
  70.             over.setRGBColorStroke(0xFF0x000x00);  
  71.             over.setLineWidth(5f);  
  72.             over.ellipse(250450350550);  
  73.             over.stroke();  
  74.         }  
  75.   
  76.         stamper.close();  
  77.   
  78.     }  
  79. }  
java利用itext编辑pdf
 

 

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