精华内容
下载资源
问答
  • java生成pdf文件 --- Table
    千次阅读
    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如何实现上传文件到服务器指定目录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 用途:根据PDF模板生成PDF文件,将数据库查询的数据插入模板指定未知,然后生成新的PDF文件 原理: 代码说明:exprotPDF_Main 为主文件。调用了outpdf1的两个文件的方法。outpdf1里的方法,是通过outpdf2345678这...
  • java生成pdf字体和模板

    2017-07-24 22:31:46
    java生成pdf字体和模板
  • itexpdf在文件上添加图片,也可动态添加图片,非常实用
  • 1.需要先准备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:08
    4.输出的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文件 一、工具准备 事先得准备好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:44
    java根据模板生成pdf文件(itextpdf)
  • Java生成PDF文件

    千次阅读 2019-06-27 13:59:11
    Java生成PDF文件 一、前言  最近在做也导出试卷的功能,刚开始是导出为doc,可是导出来格式都有变化,最后说直接将word转为pdf,可是各种不稳定,各种报错、最后想到直接将文件写入pdf(参考:...
  • 主要为大家详细介绍了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:10
    1. 开源框架支持iText,生成PDF文档,还支持将XML、Html文件转化为PDF文件;Apache PDFBox,生成、合并PDF文档;docx4j,生成docx、pptx、xlsx文档,支持转换为PDF格式。比较:iText开源协议为AGPL,而其他两个...
  • JasperReport制作报表, JasperReport生成pdf文件, Java开发pdf文件, pdf文件生成及下载, ireport制作pdf报表, Java报表, SpringBoot下载pdf文件, JasperReport加载模板报错, JasperReport找不字体, JasperReport...
  • 自己写的 spire.pdf 简单的demo ,有一些基础的使用方法,对刚接触的小伙伴...分割pdf ,包括按总页数,每页分割为一个 pdf文件,由于免费版原因,可以每9页生成一个pdf,或者根据 指定页数 (页) 根据指定页数 分割pdf
  • Java实现PDF生成并且打印pdf文件(附demo) 目录: 0. 效果预览 1. 准备环境 2. Java如何调用打印机进行打印 3. Java如何生成pdf打印文件 4. 实现pdf内数据动态填充(可按需求改变数据,有一个模板就行) ...
  • 原标题:java中根据模板生成pdf文件阅读目录简介业务需求引入jar包pdf模板文件与方法参数代码部分总结归纳回到顶部简介本文使用java引入apach提供的pdf操作工具生成pdf文件,主要是根据需求开发了一个util类,记录...
  • java生成pdf文件并打印

    万次阅读 2018-11-24 17:03:42
     前几天,需要实现打印下载报表,经一番查找,选定iText--用于生成PDF文档的一个Java类库。废话不多说,进入正题。  二、iText简介  iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个...
  • 将html文件转换成pdf文件,并在指定位置添加印章图片
  • java从后台获取数据并传值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:19
    import com.itextpdf.text.Document; import com.itextpdf.text.PageSize; import com.itextpdf.text.pdf.PdfException; import com.itextpdf.text.pdf.PdfPageEventHelper; import ...
  • java 打印pdf文件 ,也可支持批量打印
  • JAVA根据模板生成PDF文件并导出

    千次阅读 热门讨论 2020-01-10 14:31:09
    根据模板生成PDF文件,模板文件参数可配,可手动修改. 一 : PDF导出效果 先看一下导出的demo文件,具体样式可手动修改 下图为demo_pdf.ftl导出PDF文件 下图为list_pdf.ftl导出PDF文件 二 : 编写PDF模板 PDF...
  • 展开全部一、iText介绍iText是着名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的32313133353236313431303231363533e4b893e5b19e31333339663937一个java类库。通过iText不仅可以生成PDF或rtf的文档,...
  • 1、创建PDF模板(先创建对应的excel文件,创建好后另存为PDF文件)即可。 2、使用AdobeAcrobat DC工具打开PDF文件,设置自己想要替换的内容。 3、maven项目引入依赖: <dependency> <groupId>...
  • java使用itext解析pdf生成文本文件,并把生成文件指定目录存放。eclipse工程

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,613
精华内容 11,445
关键字:

java生成pdf文件到指定目录

java 订阅