-
2021-02-12 19:49:37
Java利用itext实现导出PDF文件
所需要的jar包:com.lowagie.text_2.1.7.v201004222200.jar
jar包下载地址:http://cn.jarfire.org/com.lowagie.html
一、主要步骤
1.新建document对象
第一个参数是页面大小。接下来的参数分别是左、右、上和下页边距。
Document document =new Document(PageSize.A4,50,50,30,20);
2.建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以
将文档写入到磁盘中。
创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。
PdfWriter writer =PdfWriter.getInstance(document,new FileOutputStream(filePath));
3.打开文档
写入数据之前要打开文档
document.open();
4.向文档中添加内容
document.add();
5.关闭文档
document.close();
二、字体
新建一个字体,iText的方法
BaseFont bfChinese;
bfChinese=BaseFont.createFont("STSongStd-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);//jar包 bfChinese=BaseFont.createFont("C:/Windows/Fonts/msyh.ttf",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED); //系统字体
STSongStd-Light 是字体,在jar 中以property为后缀
UniGB-UCS2-H 是编码,在jar 中以cmap为后缀
H 代表文字版式是横版,相应的 V 代表竖版
字体设置
参数一:新建好的字体;参数二:字体大小,参数三:字体样式,多个样式用“|”分隔
Font topfont =new Font(bfChinese,14,Font.BOLD);
Font textfont =new Font(bfChinese,10,,Font.BOLD|Font.UNDERLINE);
三、添加文本的对象:块、短句和段落
Chunk:块(Chunk)是能被添加到文档的文本的最小单位。
Phrase:短句(Phrase)是一系列以特定间距(两行之间的距离)作为参数的块。
Paragraph :段落是一系列块和(或)短句。同短句一样,段落有确定的间距。用户还可以指定缩排;在边和(或)右边保留一定空白,段落可以左对齐、右对齐和居中对齐。添加到文档中的每一个段落将自动另起一行。
四、步骤2书写器创建之后,步骤3文档打开之前
以下项只可在文档关闭状态执行 ,包括水印、页眉、页脚
水印
Watermark内部类,需要继承PdfPageEventHelper类
writer.setPageEvent(new PdfWidget().new Watermark());
页眉
Phrase phrase=new Phrase(new Chunk("pdf页眉 ",topfont));
phrase.add(new Chunk("页眉",textfont));
HeaderFooter header =new HeaderFooter(phrase,false);//false不显示页码。
header.setBorder(Rectangle.BOTTOM);//设置是否有边框,边框在下
document.setHeader(header);//写进文档
页脚
HeaderFooter footer =new HeaderFooter(new Phrase("--"),new Phrase("--"));
footer.setAlignment(1);
footer.setBorder(Rectangle.NO_BORDER);//Rectangle.NO_BORDER没有边框
document.setFooter(footer);
红色下划线部分,自动默认页码写在两个短句中间
五、设置文档属性 (与文档是否打开没有关联)
document.addTitle("Title@sample");// 标题
document.addAuthor("Author@nicaisheng");// 作者
document.addSubject("Subject@iText sample");// 主题
document.addKeywords("Keywords@iText");// 关键字
document.addCreator("Creator@iText");// 创建者
六、文档内容
段落Paragraph
Paragraph pt=new Paragraph(name,headfont);//设置字体样式pt.setAlignment(1);//设置文字居中 0靠左 1,居中 2,靠右
pt.setIndentationLeft(12);// 左缩进
pt.setIndentationRight(12);// 右缩进
pt.setFirstLineIndent(24);// 首行缩进
pt.setLeading(20f);// 行间距
pt.setSpacingBefore(5f);// 设置上空白
pt.setSpacingAfter(10f);// 设置段落下空白
document.add(pt);
表格table
Table table =new Table(3);//括号参数表示列
int width[] = {10,45,45};//设置每列宽度比例
table.setWidths(width);
table.setWidth(95);//占页面宽度比例
table.setAlignment(Element.ALIGN_CENTER);//居中
table.setAutoFillEmptyCells(true);//自动填满
table.setBorderWidth((float)0.1);//表格边框线条宽度
table.setPadding(1);//边距:单元格的边线与单元格内容的边距
table.setSpacing(0);//间距:单元格与单元格之间的距离
table.addCell(new Paragraph("name"),textfont));//添加单元格内容
table.endHeaders();//每页都会显示表头
单元格内容样式cell
Cell cell=new Cell(new Paragraph("序号",keyfont));
cell.setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中
table.addCell(cell);
表格嵌套
最外层表格
PdfPTable table =new PdfPTable(3);
table.setTotalWidth(300);
table.setLockedWidth(true);
PdfPCell cell;
cell =new PdfPCell(new Phrase("Table 5"));
cell.setColspan(3);
cell.setBorderWidth(0);//设置表格的边框宽度为0
table.addCell(cell);
嵌套表格
PdfPTable celltable =new PdfPTable(2);
cell =new PdfPCell(celltable);
cell.setRowspan(2);
cell.setBorderWidth(1);//设置表格的边框宽度为1
cell.setPadding(10);//设置表格与上一个表格的填充为10
table.addCell(cell);
直线
Paragraph p1 =new Paragraph();
p1.add(new Chunk(new LineSeparator()));
doc.add(p1);
点线
Paragraph p2 =new Paragraph();
p2.add(new Chunk(new DottedLineSeparator()));
超链接
Anchor anchor =new Anchor("this is anchor");
定位
点击后,跳到topline的位置
Anchor gotop =new Anchor("go top");
gotop.setReference("#us");
添加图片
Image image =Image.getInstance(imgPath);
image.setAlignment(Image.ALIGN_CENTER);
image.scalePercent(40);//依照比例缩放
JAVA生成PDF文件
生成PDF文件是主要应用的是ITEXT插件 import java.awt.Color; import java.io.File; import java.io.FileOutputStream; i ...
Java生成PDF文件(转)
更多相关内容 -
Java如何实现上传文件到服务器指定目录
2020-08-19 07:57:45主要介绍了Java如何实现上传文件到服务器指定目录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 -
java根据PDF模板自动生成PDF文件
2016-05-12 11:46:27用途:根据PDF模板生成PDF文件,将数据库查询的数据插入到模板指定未知,然后生成新的PDF文件 原理: 代码说明:exprotPDF_Main 为主文件。调用了outpdf1的两个文件的方法。outpdf1里的方法,是通过outpdf2345678这... -
java生成pdf字体和模板
2017-07-24 22:31:46java生成pdf字体和模板 -
java实现PDF文件添加图片
2018-10-31 11:47:42itexpdf在文件上添加图片,也可动态添加图片,非常实用 -
Java生成PDF文件并使用指定的模板,带图片
2020-11-06 14:54:411.需要先准备PDF的模板,使用工具Adobe Acrobat ,设置表单,添加区域框,为每个框设置名字。以下就是我准备的模板。 2.项目中引入要是用的依赖。写在pom.xml中,更新maven <dependency> <groupId>...1.需要先准备PDF的模板,使用工具Adobe Acrobat ,设置表单,添加区域框,为每个框设置名字。以下就是我准备的模板。
2.项目中引入要是用的依赖。写在pom.xml中,更新maven<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency>
3.代码。
// 在自己的业务区域内增加以下代码 Map<String, Object> params = new HashMap<>(); //map的key就是你自己在模板中设置的名称,value是你自己的值 params.put("name",psomCustomerInfo.getName()); params.put("user",psomNicheInfo.getListCustomer().get(0).getName()); params.put("tele",psomNicheInfo.getListCustomer().get(0).getTele()); params.put("email",psomCustomerInfo.getEmail()); params.put("addr",psomCustomerInfo.getAddress()); params.put("item",psomNicheInfo.getNicheName()); // 生成新的文件字符串 String filePath = StringUtils.getUUID32() + ".pdf"; //条形码的名称 String erwPath = "D://upload.jpg"; //生成PDF,filePath是新生成文件的名字,erwPath是图片的位置 test(params,filePath,erwPath);
下面会沾出生成PDF的代码
public static int test(Map map, String filePath,String erwPath) throws IOException, DocumentException { //上传目录地址 File directory = new File("");// 参数为空 String courseFile = directory.getCanonicalPath(); //定位到项目的路径 String uploadDir = courseFile + "\\" + "src\\main\\resources\\static\\upload"; // // //这是我自己的测试路径,即模板pdf的路径 String pdfPath = uploadDir + "\\"+ "bjd.pdf"; PdfReader pr = new PdfReader(pdfPath); ByteArrayOutputStream bos = new ByteArrayOutputStream(); //生成的pdf目标文件 PdfStamper ps = new PdfStamper(pr, bos); //? PdfContentByte under = ps.getUnderContent(1); //字体 //BaseFont bf = BaseFont.createFont("c:\\windows\\fonts\\SIMFANG.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); ArrayList<BaseFont> list = new ArrayList<BaseFont>(); //list.add(bf); AcroFields fields = ps.getAcroFields(); //fields.setSubstitutionFonts(list); //插入图片 fields.addSubstitutionFont(BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED)); // 通过域名获取所在页和坐标,左下角为起点 int pageNo = fields.getFieldPositions("erw").get(0).page; Rectangle signRect = fields.getFieldPositions("erw").get(0).position; float x = signRect.getLeft(); float y = signRect.getBottom(); // 读图片,图片存储位置 Image image = Image.getInstance(erwPath); // 获取操作的页面 PdfContentByte undere = ps.getOverContent(pageNo); // 根据域的大小缩放图片 image.scaleToFit(signRect.getWidth(), signRect.getHeight()); // 添加图片 image.setAbsolutePosition(x, y); undere.addImage(image); //添加图片的代码结束 fillData(fields, map); //设置属性生成文档 ps.setFormFlattening(true); ps.close(); //生成的pdf的文件路径 String resultPath = uploadDir +"\\" +filePath; try { OutputStream os = new FileOutputStream(resultPath); os.write(bos.toByteArray()); os.flush(); os.close(); bos.close(); } catch (FileNotFoundException e1) { //e1.getMessage()+"系统找不到指定的文件"; return 0; } catch (IOException e) { e.printStackTrace(); } return 1; }
public static void fillData(AcroFields fields, Map map) throws IOException, DocumentException { System.out.println("come fillData"); //将map中的数据填充至fields中 for (Object key : map.keySet()) { fields.setField(key.toString(), map.get(key).toString()); } }
以上就是根据模板生成PDF的方法,参数根据自己的实际逻辑进行修改就可以。
-
java实现根据pdf文件模板生成pdf文件
2021-02-23 09:44:084.输出的pdf文件 5.使用Adobe Acrobat DC打开template.pdf 6.填充文字及创作表单 创作表单->添加“文本”域 创作表单->编辑“表格” *填充的字段名(比如对象Table的属性为name,这里名称后面一列...一、如何制作pdf模板
1.首先创建template.doc
2.根据doc文件制作pdf模板
3.将doc文件输出为pdf
文件->输出为pdf
4.输出的pdf文件
5.使用Adobe Acrobat DC打开template.pdf
6.填充文字及创作表单
创作表单->添加“文本”域
创作表单->编辑“表格”
*填充的字段名(比如对象Table的属性为name,这里名称后面一列的单元格填充name)
7.模板制作完毕
二、java生成pdf文件
1.java代码
PdfFileBlh.java: @SuppressWarnings("unchecked") public void exportPdfFile(HttpServletRequest request, HttpServletResponse response) throws IOException { //1.获取数据 // String jsonString = getRequestJsonString(request); String jsonString = request.getParameter("jsonString"); /*String jsonString = "{\r\n" + " \"hospitalId\":\"14064\",\r\n" + " \"hospitalName\":\"揭阳市人民医院\",\r\n" + " \"name\":\"周虎\",\r\n" + " \"gender\":\"男\",\r\n" + " \"age\":\"26岁\",\r\n" + " \"patNo\":\"0001278568\",\r\n" + " \"clinic\":\"全科医学科简易门诊\",\r\n" + " \"bedNo\":\"16床\",\r\n" + " \"specimen\":\"咽拭子\",\r\n" + " \"repNo\":\"110254767\",\r\n" + " \"serialNo\":\"0\",\r\n" + " \"doctor\":\"核酸检测号\",\r\n" + " \"applicationTime\":\"2021-02-18 15:17\",\r\n" + " \"advName\":\"新型冠状病毒核酸RNA检测(自费)\",\r\n" + " \"idType\":\"身份证\",\r\n" + " \"idNo\":\"EC3263698\",\r\n" + " \"dateOfCollection\":\"2021-02-18 15:30\",\r\n" + " \"dateOfReceipt\":\"2021-02-19 11:13\",\r\n" + " \"specimenCollector\":\"黄敏华\",\r\n" + " \"specimenReceiver\":\"钟乔华\",\r\n" + " \"dateOfInspection\":\"2021-02-19 11:15\",\r\n" + " \"dateOfReport\":\"2021-02-19 11:15\",\r\n" + " \"reportedBy\":\"陈舒兰\",\r\n" + " \"inspectedBy\":\"钟乔华\",\r\n" + " \"resultList\":[\r\n" + " {\r\n" + " \"testItems\":\"2019新型冠状病毒核酸检测\",\r\n" + " \"result\":\"阴性(-)\",\r\n" + " \"refRange\":\"阴性(-)\",\r\n" + " \"method\":\"RT-PCR\"\r\n" + " },\r\n" + " {\r\n" + " \"testItems\":\"Nucleic Acid Test For SARA-Cov-2\",\r\n" + " \"result\":\"Negative(-)\",\r\n" + " \"refRange\":\"Negative(-)\",\r\n" + " \"method\":\"RT-PCR\"\r\n" + " },\r\n" + " {\r\n" + " \"testItems\":\"2019-nCov ORFlab基因\",\r\n" + " \"result\":\"阴性Negative(-)\",\r\n" + " \"refRange\":\"阴性Negative(-)\",\r\n" + " \"method\":\"RT-PCR\"\r\n" + " },\r\n" + " {\r\n" + " \"testItems\":\"2019-nCov N基因\",\r\n" + " \"result\":\"阴性Negative(-)\",\r\n" + " \"refRange\":\"阴性Negative(-)\",\r\n" + " \"method\":\"RT-PCR\"\r\n" + " }\r\n" + " ]\r\n" + "}";*/ System.out.println("======jsonString======"+jsonString); if(StringUtils.isNotBlank(jsonString)) { //2.处理数据 Map<String, Object> data = JsonUtils.toObject(jsonString, Map.class); //3.根据医院Id获取pdf模板文件 String hospitalId = (String) data.get("hospitalId"); String hospitalName = (String) data.get("hospitalName"); String templatePath = request.getSession().getServletContext().getRealPath("/WEB-INF/classes/template/template_" + hospitalId + ".pdf"); String fontPath = request.getSession().getServletContext().getRealPath("/WEB-INF/classes/template/simsun.ttc"); System.out.println("======templatePath======"+templatePath); //4.设置响应头信息 response.setContentType("multipart/form-data"); response.setHeader("Content-Disposition","attachment;fileName="+new String((hospitalName + "检验报告单_").getBytes("GBK"), "ISO-8859-1") + DateUtils.formatDate(new Date(), "yyyyMMddHHmmss") + ".pdf"); //5.指定解析器 ServletOutputStream os = null; PdfStamper ps = null; PdfReader reader = null; Document doc = null; try { os = response.getOutputStream(); // 6.读入pdf表单 reader = new PdfReader(templatePath); // 7.根据表单生成一个新的pdf ps = new PdfStamper(reader, os); doc = new Document(); // 8.获取pdf表单 AcroFields form = ps.getAcroFields(); // 9.给表单添加中文字体 。不设置的话,中文可能无法显示 BaseFont bf = BaseFont.createFont(fontPath+",1", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED); form.addSubstitutionFont(bf); // 10.获取到明细 List<Map<String,Object>> resultList = (List<Map<String, Object>>) data.get("resultList"); data.remove("resultList"); // 11.遍历data 给pdf表单表格赋值 for (String key : data.keySet()) { String value = (String) data.get(key); form.setField(key, value); } // 12.处理检验明细 if(resultList!=null && resultList.size()>0) { String testItems="\r\n"; String result="\r\n"; String refRange="\r\n"; String method="\r\n"; for(Map<String,Object> resultMap:resultList) { testItems+=resultMap.get("testItems")+"\r\n\r\n"; result+=resultMap.get("result")+"\r\n\r\n"; refRange+=resultMap.get("refRange")+"\r\n\r\n"; method+=resultMap.get("method")+"\r\n\r\n"; } form.setField("testItems", testItems); form.setField("result", result); form.setField("refRange", refRange); form.setField("method", method); } ps.setFormFlattening(true); ps.close(); doc.open(); doc.close(); System.out.println("===============PDF导出成功============="); } catch (Exception e) { e.printStackTrace(); } finally { try { os.close(); } catch (Exception e) { e.printStackTrace(); } } } } public static String getRequestJsonString(HttpServletRequest request) throws IOException { String submitMehtod = request.getMethod(); // GET if (submitMehtod.equals("GET")) { return new String(request.getQueryString().getBytes("iso-8859-1"),"utf-8").replaceAll("%22", "\""); // POST } else { return getRequestPostStr(request); } } public static byte[] getRequestPostBytes(HttpServletRequest request) throws IOException { int contentLength = request.getContentLength(); if(contentLength<0){ return null; } byte buffer[] = new byte[contentLength]; for (int i = 0; i < contentLength;) { int readlen = request.getInputStream().read(buffer, i, contentLength - i); if (readlen == -1) { break; } i += readlen; } return buffer; } public static String getRequestPostStr(HttpServletRequest request) throws IOException { byte buffer[] = getRequestPostBytes(request); String charEncoding = request.getCharacterEncoding(); if (charEncoding == null) { charEncoding = "UTF-8"; } return new String(buffer, charEncoding); } PdfFileController.java: @Controller @RequestMapping("/pdfFile") public class PdfFileController { @Resource private PdfFileBlh blh; @RequestMapping(params="BLHMI=exportPdfFile") public void exportNoEndFormList(HttpServletRequest request, HttpServletResponse response) throws IOException { blh.exportPdfFile(request,response); } }
2.html代码:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>生成PDF文件</title> <jsp:include page="/WEB-INF/jsp/common/scriptInc.jsp"></jsp:include> <jsp:include page="/WEB-INF/jsp/common/styleInc.jsp"></jsp:include> <script type="text/javascript"> function exportPdfFile(){ $("#downPdfFileForm").submit(); } </script> </head> <body> <div class=""> <div class=""> <div id="handout_wrap_inner"> <form id="downPdfFileForm" action="http://localhost:8080/demo/pdfFile?BLHMI=exportPdfFile" method="post"> <input name="jsonString" value='{"hospitalId":"14064","hospitalName":"揭阳市人民医院","name":"张三","gender":"男","age":"26岁","patNo":"0001278568","clinic":"全科医学科简易门诊","bedNo":"16床","specimen":"咽拭子","repNo":"110254767","serialNo":"0","doctor":"核酸检测号","applicationTime":"2021-02-18 15:17","advName":"新型冠状病毒核酸RNA检测(自费)","idType":"身份证","idNo":"EC3263698","dateOfCollection":"2021-02-18 15:30","dateOfReceipt":"2021-02-19 11:13","specimenCollector":"黄敏华","specimenReceiver":"钟乔华","dateOfInspection":"2021-02-19 11:15","dateOfReport":"2021-02-19 11:15","reportedBy":"陈舒兰","inspectedBy":"钟乔华","resultList":[{ "testItems":"2019新型冠状病毒核酸检测", "result":"阴性(-)", "refRange":"阴性(-)", "method":"RT-PCR"},{ "testItems":"Nucleic Acid Test For SARA-Cov-2", "result":"Negative(-)", "refRange":"Negative(-)", "method":"RT-PCR"},{ "testItems":"2019-nCov ORFlab基因", "result":"阴性Negative(-)", "refRange":"阴性Negative(-)", "method":"RT-PCR"},{ "testItems":"2019-nCov N基因", "result":"阴性Negative(-)", "refRange":"阴性Negative(-)", "method":"RT-PCR"}]}'/> </form> <a href="javascript:void(0);" onclick="exportPdfFile()">下载</a> </div> </div> </div> </body> </html>
-
java根据pdf模板生成指定格式的pdf文件
2020-11-29 22:28:03java根据pdf模板生成指定格式的pdf文件 一、工具准备 事先得准备好Adobe Acrobat DC,这是一款专门编辑pdf的工具。小编已经给大家准备好了。 链接:https://pan.baidu.com/s/1jsaCMnRaHTHBVEmwJw6yjA 提取码:ichi ...java根据pdf模板生成指定格式的pdf文件
一、工具准备
事先得准备好Adobe Acrobat DC,这是一款专门编辑pdf的工具,小编已经给大家准备好了。
链接:https://pan.baidu.com/s/1jsaCMnRaHTHBVEmwJw6yjA
提取码:ichi二、接下家就是教大家怎么设计文档模板
1.首先用word(或者wps)设计出一个word类型的模板,通过word可以设计文件内容的格式。
2.将设计好的word文件另存为pdf文件
3.用Adobe Acrobat DC打开刚刚存储的pdf文件,然后点击左侧准备表单的选项。
4.然后点击开始
5.然后pdf就会变成下面的样子。
6.做完上面的工作pdf模板就算大功告成了,直接将pdf文件保存就好了。
java代码的编写
- 首先项目结构设计如下
- 包依赖关系如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.kejizhentan</groupId> <artifactId>itext_acrobat</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.10</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> </dependencies> </project>
- java代码设计如下
package com.kejizhentan; import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOException; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.pdf.AcroFields; import com.itextpdf.text.pdf.PdfCopy; import com.itextpdf.text.pdf.PdfImportedPage; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.PdfStamper; public class PdfPractise { // 利用模板生成pdf public static void fillTemplate() { // 模板路径 String templatePath = "E:/java17/java_practise/itext_acrobat/src/main/resources/temp/pdf模板.pdf"; // 生成的新文件路径 String newPDFPath = "E:/java17/java_practise/itext_acrobat/src/main/resources/temp/pdf练习.pdf"; PdfReader reader; FileOutputStream out; ByteArrayOutputStream bos; PdfStamper stamper; try { out = new FileOutputStream(newPDFPath);// 输出流,该类用来创建一个文件并向文件中写数据(从内存中写到硬盘文件中) reader = new PdfReader(templatePath);// 读取pdf模板,将硬盘中的数据'读'到内存中 bos = new ByteArrayOutputStream();// 捕获内存缓冲区的数据,转换成字节数组 stamper = new PdfStamper(reader, bos); AcroFields form = stamper.getAcroFields(); String[] str = { "123456789", "柯基", "男", "1994-09-08", "110101199409085715","计算机科学与技术", "北京市西城区安河桥北" }; int i = 0; java.util.Iterator<String> it = form.getFields().keySet().iterator(); while (it.hasNext()) { String name = it.next().toString(); System.out.println(name+":"+str[i]); form.setField(name, str[i++]); } stamper.setFormFlattening(true);// 如果为false那么生成的PDF文件还能编辑,一定要设为true stamper.close(); Document doc = new Document(); PdfCopy copy = new PdfCopy(doc, out); doc.open(); PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1); copy.addPage(importPage); doc.close(); } catch (IOException e) { System.out.println(e.toString()); } catch (DocumentException e) { System.out.println(2); } } public static void main(String[] args) { fillTemplate(); } }
运行上述代码就能获取对应格式的pdf文件。*
####################################################################################################################################################################################################################################################################################################
接下来小编教大家怎么给pdf模板加上水印- 第一步准备水印图片
- 第二步对照下组图一步步操作就可以了
根据以上步骤,带有水印的pdf文件就制作好了。接下来就是代码部分了。 - 包的依赖关系
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.kejizhentan</groupId> <artifactId>itext_acrobat</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.10</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> </dependencies> </project>
- java代码设计
package com.kejizhentan; import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOException; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.pdf.AcroFields; import com.itextpdf.text.pdf.PdfCopy; import com.itextpdf.text.pdf.PdfImportedPage; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.PdfStamper; public class PdfPractise2 { public static void templetTicket(){ //模板的路径 String templatePdfPath = "E:/java17/java_practise/itext_acrobat/src/main/resources/temp/卖身契模板.pdf"; // 生成的新文件路径 String newPDFPath = "E:/java17/java_practise/itext_acrobat/src/main/resources/temp/卖身契.pdf"; FileOutputStream fos; PdfReader reader; ByteArrayOutputStream bos; PdfStamper ps ; try { fos = new FileOutputStream(newPDFPath); reader = new PdfReader(templatePdfPath); //将硬盘中的文件数据读取到内存中 bos = new ByteArrayOutputStream(); ps = new PdfStamper(reader, bos); //将内存中的数据暂存到字节数组中 AcroFields form = ps.getAcroFields();//获取模板文件中的表单域 String[] str = {"柯基小四","柯基侦探","柯基小四","柯基侦探","柯基小四","柯基侦探","2020-11-28","北京市昌平区十三陵镇"}; int i = 0; java.util.Iterator<String> it = form.getFields().keySet().iterator();//用迭代器遍历pdf中的所有域 while (it.hasNext()) { String name = it.next().toString(); System.out.println(name+":"+str[i]); form.setField(name, str[i++]); } ps.setFormFlattening(true);// 如果为false那么生成的PDF文件还能编辑,一定要设为true ps.close(); Document doc = new Document(); PdfCopy copy = new PdfCopy(doc, fos); doc.open(); PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1); copy.addPage(importPage); doc.close(); } catch (IOException e) { System.out.println(e.toString()); } catch (DocumentException e) { System.out.println(2); } } public static void main(String[] args){ templetTicket(); } }
执行上述代码就能生成带有水印的pdf文件了。
- 首先项目结构设计如下
-
java根据模板生成pdf文件(itextpdf)
2022-01-19 13:38:44java根据模板生成pdf文件(itextpdf) -
Java生成PDF文件
2019-06-27 13:59:11Java生成PDF文件 一、前言 最近在做也导出试卷的功能,刚开始是导出为doc,可是导出来格式都有变化,最后说直接将word转为pdf,可是各种不稳定,各种报错、最后想到直接将文件写入pdf(参考:... -
java实现在pdf模板的指定位置插入图片
2020-08-26 20:56:28主要为大家详细介绍了java如何实现在pdf模板的指定位置插入图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
iText5实现Java生成PDF文件完整版
2019-04-25 21:39:22最近项目中使用到Java实现导出PDF文件,经过一番参考研究最终决定使用itextpdf来实现,当然也可以参考 PDF Java类库:Spire.PDF for Java(https://www.e-iceblue.cn/spirepdfjava/create-pdf-in-java.html)。... -
Java使用iTextPDF生成PDF文件
2021-02-22 12:00:11因为项目需要生成PDF文件,所以去找了一下能够生成PDF的Java工具,看到了iText可以说好评如潮。 如果你想通过java操作PDF文件,那么 iText 绝对是你的首选。 引入依赖 这里使用的是iText5 <dependency> <... -
详解Java生成PDF文档方法|chu
2021-02-26 20:57:101. 开源框架支持iText,生成PDF文档,还支持将XML、Html文件转化为PDF文件;Apache PDFBox,生成、合并PDF文档;docx4j,生成docx、pptx、xlsx文档,支持转换为PDF格式。比较:iText开源协议为AGPL,而其他两个... -
JasperReport生成pdf文件 Java开发pdf文件 pdf文件生成及下载
2022-03-30 22:47:31JasperReport制作报表, JasperReport生成pdf文件, Java开发pdf文件, pdf文件生成及下载, ireport制作pdf报表, Java报表, SpringBoot下载pdf文件, JasperReport加载模板报错, JasperReport找不到字体, JasperReport... -
java spire.pdf 使用 对 pdf文件的相关操作
2022-04-16 14:40:08自己写的 spire.pdf 简单的demo ,有一些基础的使用方法,对刚接触的小伙伴...分割pdf ,包括按总页数,每页分割为一个 pdf文件,由于免费版原因,可以每9页生成一个pdf,或者根据 指定页数 (页) 根据指定页数 分割pdf -
Java实现PDF文件生成并且打印pdf文件(附demo)
2019-09-28 21:42:02Java实现PDF生成并且打印pdf文件(附demo) 目录: 0. 效果预览 1. 准备环境 2. Java如何调用打印机进行打印 3. Java如何生成pdf打印文件 4. 实现pdf内数据动态填充(可按需求改变数据,有一个模板就行) ... -
java中根据模板生成pdf文件
2021-03-16 11:49:49原标题:java中根据模板生成pdf文件阅读目录简介业务需求引入jar包pdf模板文件与方法参数代码部分总结归纳回到顶部简介本文使用java引入apach提供的pdf操作工具生成pdf文件,主要是根据需求开发了一个util类,记录... -
java生成pdf文件并打印
2018-11-24 17:03:42前几天,需要实现打印下载报表,经一番查找,选定iText--用于生成PDF文档的一个Java类库。废话不多说,进入正题。 二、iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个... -
java实现将html转pdf,并在指定位置添加印章
2021-01-22 10:17:01将html文件转换成pdf文件,并在指定位置添加印章图片 -
java从后台获取数据并传值到pdf展示源码
2020-05-19 23:25:55java从后台获取数据并传值到pdf展示源码,在业务场景中常常需要从后台获取数据,然后在pdf上展示对应的数据信息,如一些申报表格等,需要用户填写后通过PDF文件推送给用户。该代码就实现了此功能,不仅可以传入值到... -
java实现pdf文件电子签名
2016-05-06 10:47:21本示例通过java自动生成pfx证书,根据生成的证书,自动实现对pdf文件的电子签名 -
JAVA根据模板填充,生成PDF文件
2022-03-29 09:09:52需求:根据客户模板,生成对应PDF文件。 例如:客户的doc模板文件: 最终效果展示: 话不多说,上操作: 1.引入pdf相关的依赖 <dependency> <groupId>org.apache.pdfbox</groupId> <... -
java后台生成pdf文件 预览/直接下载
2019-08-07 12:49:19import com.itextpdf.text.Document; import com.itextpdf.text.PageSize; import com.itextpdf.text.pdf.PdfException; import com.itextpdf.text.pdf.PdfPageEventHelper; import ... -
java 打印pdf文件 也可批量打印
2015-10-29 15:20:52java 打印pdf文件 ,也可支持批量打印 -
JAVA根据模板生成PDF文件并导出
2020-01-10 14:31:09根据模板生成PDF文件,模板文件参数可配,可手动修改. 一 : PDF导出效果 先看一下导出的demo文件,具体样式可手动修改 下图为demo_pdf.ftl导出PDF文件 下图为list_pdf.ftl导出PDF文件 二 : 编写PDF模板 PDF... -
java 已经获取pdf代码,如何把他pdf文件保存到本机 要求用输出流做
2021-02-12 23:34:53展开全部一、iText介绍iText是着名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的32313133353236313431303231363533e4b893e5b19e31333339663937一个java类库。通过iText不仅可以生成PDF或rtf的文档,... -
自动生成PDF文件(Java通过PDF模板自动生成PDF)
2020-10-22 16:49:151、创建PDF模板(先创建对应的excel文件,创建好后另存为PDF文件)即可。 2、使用AdobeAcrobat DC工具打开PDF文件,设置自己想要替换的内容。 3、maven项目引入依赖: <dependency> <groupId>... -
java使用itext解析pdf并生成文本文件—eclipse工程
2018-06-08 15:32:35java使用itext解析pdf并生成文本文件,并把生成的文件按指定目录存放。eclipse工程