java中利用itext编辑pdf
2013-02-23 19:52
525 查看
最近项目需要,在调研如何在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.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();
}
}
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.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();
}
}
/** * 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.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(); } }
相关文章推荐
- java中利用itext编辑pdf
- java利用itext编辑pdf
- java利用itext编辑pdf
- java中利用itext编辑pdf
- java中利用itext编辑pdf
- 利用itext工具编辑生成pdf
- java利用iText工具包生成PDF
- 利用Flying Saucer 和 java iText 实现HTMl转PDF
- java动态导出PDF(利用itext)
- 如何利用iText在java程序中生成PDF文件
- Java 利用itext填写pdf模板并导出(亲自试过,没问题,并附上itextpdf-5.5.8.jar包和itext-asian.jar包))
- 如何利用iText在java程序中生成PDF文件
- 利用itext创建pdf表格文件(java)
- java中利用iText实现导入数据到pdf模板中
- java根据模板导出PDF(利用itext)
- 如何利用iText在java程序中生成PDF文件
- iText的使用例子说明(利用Itext画模板导出word、pdf,纯java实现)
- Java 利用iText生成pdf并导出
- java 利用itext生成PDF并下载
- 利用java操作Itext创建pdf文件