1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > JAVA使用itext导出PDF 使用PDF模板导出PDF文件

JAVA使用itext导出PDF 使用PDF模板导出PDF文件

时间:2022-12-30 18:43:51

相关推荐

JAVA使用itext导出PDF 使用PDF模板导出PDF文件

1.使用工具编辑好PDF模板

本人使用的是(Adobe Acrobat DC),添加域,生成如下模板:

2.实现PDF导出

2.1导入itex相关包

<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.1</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency>

2.1导出PDF

// pdf模板String fileName = "D:/表1进度付款申请单.pdf";//读取pdfPdfReader reader = new PdfReader(fileName);ByteArrayOutputStream bos = new ByteArrayOutputStream();//将要生成的目标PDF文件名称PdfStamper ps = new PdfStamper(reader, bos);//PdfContentByte under = ps.getUnderContent(1);//设置中文字体BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);//取出报表模板中的所有字段AcroFields fields = ps.getAcroFields();fields.addSubstitutionFont(bf);//对表单数据进行赋值fields.setField("GCMC", "XXX工程市政工程");fields.setField("BDMC", "XXX标段");fields.setField("BH", "HT-0010");fields.setField("XMJLJG", "XXX建设监理有限公司");fields.setField("startData", "09月16日");fields.setField("endData", "09月16日");fields.setField("work", "09月16日");fields.setField("U_ALL_MONEY", "贰仟壹佰捌拾贰万贰仟壹佰肆拾圆伍角壹分");fields.setField("L_ALL_MONEY", "21822140.51");fields.setField("JDK", "21822140.51");fields.setField("AQSGF", "21822140.51");fields.setField("YFK", "21822140.51");fields.setField("YKK", "0.51");fields.setField("ZFK", "0");fields.setField("Data", "09月16日");//必须要调用这个,否则文档不会生成的ps.setFormFlattening(true);ps.close();OutputStream fos = new FileOutputStream("E:/new1.pdf");fos.write(bos.toByteArray());fos.flush();fos.close();bos.close();

3.导出结果

4.其他

以上模板只用到文本,如有需要插入图片,以下代码可供参考

String imgpath =“图片路径”;int pageNo = fields.getFieldPositions(key).get(0).page;Rectangle signRect = fields.getFieldPositions(key).get(0).position;float x = signRect.getLeft();float y = signRect.getBottom();// 读图片Image image = Image.getInstance(imgpath);// 获取操作的页面PdfContentByte under = ps.getOverContent(pageNo);// 根据域的大小缩放图片image.scaleToFit(signRect.getWidth(), signRect.getHeight());// 添加图片image.setAbsolutePosition(x, y);under.addImage(image);

示例

package util;import com.itextpdf.text.*;import com.itextpdf.text.pdf.*;import java.io.ByteArrayOutputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;public class PDFUtil {public static void main(String[] args) throws Exception {test();System.out.println("success");}public static void test() throws IOException, DocumentException {// pdf模板String fileName = "D:/表1进度付款申请单.pdf";//读取pdfPdfReader reader = new PdfReader(fileName);ByteArrayOutputStream bos = new ByteArrayOutputStream();//将要生成的目标PDF文件名称PdfStamper ps = new PdfStamper(reader, bos);//PdfContentByte under = ps.getUnderContent(1);//设置中文字体BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);//取出报表模板中的所有字段AcroFields fields = ps.getAcroFields();fields.addSubstitutionFont(bf);//对表单数据进行赋值//设置图片String imgpath = "D:/aa.png";int pageNo = fields.getFieldPositions("image").get(0).page;Rectangle signRect = fields.getFieldPositions("image").get(0).position;float x = signRect.getLeft();float y = signRect.getBottom();// 读图片Image image = Image.getInstance(imgpath);// 获取操作的页面PdfContentByte under = ps.getOverContent(pageNo);// 根据域的大小缩放图片image.scaleToFit(signRect.getWidth(), signRect.getHeight());// 添加图片image.setAbsolutePosition(x, y);under.addImage(image);//添加文本fields.setField("GCMC", "XXX工程市政工程");fields.setField("BDMC", "XXX标段");fields.setField("BH", "HT-0010");fields.setField("XMJLJG", "XXX建设监理有限公司");fields.setField("startData", "09月16日");fields.setField("endData", "09月16日");fields.setField("work", "09月16日");fields.setField("U_ALL_MONEY", "贰仟壹佰捌拾贰万贰仟壹佰肆拾圆伍角壹分");fields.setField("L_ALL_MONEY", "21822140.51");fields.setField("JDK", "21822140.51");fields.setField("AQSGF", "21822140.51");fields.setField("YFK", "21822140.51");fields.setField("YKK", "0.51");fields.setField("ZFK", "0");fields.setField("Data", "09月16日");//必须要调用这个,否则文档不会生成的ps.setFormFlattening(true);ps.close();OutputStream fos = new FileOutputStream("E:/new1.pdf");fos.write(bos.toByteArray());fos.flush();fos.close();bos.close();}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。