java根据模板生成pdf文件并导出

Java中的PDF生成 在这个数字化时代,PDF文件已成为传递信息的重要方式。无论是合同、报告,还是技术文档,PDF都因其跨平台兼容性和固定格式而备受青睐。那么,你是否想过如何使用Java生成PDF呢?今天,我们将深入探讨Java中的PDF生成技术,让你轻松掌握这一技能,成为职场中的技术达人。在深入讨论技术细节之前,我们先来简单了解一下PDF。PDF,全称为Portable Document Format,是由Adobe公司在1993年推出的一种文件格式。 阅读详情
AI摘要

本文介绍如何使用Java和itext库生成带有模板的PDF文件,包括制作PDF模板、填充模板内容及解决中文显示问题。

首先你的制作一个pdf模板:

1.先用word做出模板界面


2.文件另存为pdf格式文件


3.通过Adobe Acrobat pro软件打开刚刚用word转换成的pdf文件(注:如果没有这个软件可以通过我的百度云下载,链接:http://pan.baidu.com/s/1pL2klzt)如果无法下载可以联系博主。


4.点击右边的"准备表单"按钮,选择"测试.pdf"选择开始

进去到编辑页面,打开后它会自动侦测并命名表单域,右键表单域,点击属性,出现文本域属性对话框(其实无需任何操作,一般情况下不需要修改什么东西,至少我没有修改哦。如果你想修改fill1等信息,可以进行修改)




5.做完上面的工作后,直接"另存为"将pdf存储就可以


*****************************************************************************

以上部分是制作pdf模板操作,上述完成后,就开始通过程序来根据pdf模板生成pdf文件了,上java程序:

1.首先需要依赖包:itext的jar包,我是maven项目,所以附上maven依赖

<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
		<dependency>
		    <groupId>com.itextpdf</groupId>
		    <artifactId>itextpdf</artifactId>
		    <version>5.5.10</version>
		</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian -->
		<dependency>
		    <groupId>com.itextpdf</groupId>
		    <artifactId>itext-asian</artifactId>
		    <version>5.2.0</version>
		</dependency>
2.下面就是生成pdf代码了

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 Snippet {
	// 利用模板生成pdf
	public static void fillTemplate() {
		// 模板路径
		String templatePath = "E:/测试3.pdf";
		// 生成的新文件路径
		String newPDFPath = "E:/ceshi.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", "TOP__ONE", "男", "1991-01-01", "130222111133338888", "河北省保定市" };
			int i = 0;
			java.util.Iterator<String> it = form.getFields().keySet().iterator();
			while (it.hasNext()) {
				String name = it.next().toString();
				System.out.println(name);
				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(1);
		} catch (DocumentException e) {
			System.out.println(2);
		}

	}

	public static void main(String[] args) {
		fillTemplate();
	}
}
3.运行结果如下

*********************************************************************

如果没有模板,就行自己生成pdf文件保存到磁盘:下面的方法可以实现:

public static void test1(){//生成pdf
     Document document = new Document();
       try {
           PdfWriter.getInstance(document, new FileOutputStream("E:/1.pdf"));
           document.open();
           document.add(new Paragraph("hello word"));
           document.close();
         } catch (Exception e) {
             System.out.println("file create exception");
         }
     }
但是上述方法中包含中文时就会出现问题,所以可以使用下面这行代码实现,所使用的jar包,上面的两个依赖都包含了:

public static void test1_1(){
      BaseFont bf;
      Font font = null;
      try {
          bf = BaseFont.createFont( "STSong-Light", "UniGB-UCS2-H",
                      BaseFont.NOT_EMBEDDED);//创建字体
          font = new Font(bf,12);//使用字体
      } catch (Exception e) {
          e.printStackTrace();
      }
      Document document = new Document();
      try {
          PdfWriter.getInstance(document, new FileOutputStream("E:/2.pdf"));
          document.open();
          document.add(new Paragraph("hello word 你好 世界",font));//引用字体
          document.close();
         } catch (Exception e) {
             System.out.println("file create exception");
         }
     }
**************************************************************************************

当然,如果你想弄的炫一点,想实现其他字体,可以去网上搜字体文件然后下载下来,放到项目里,我这里是在项目里新建了一个font文件夹,将字体文件放到了里面。

   1.把华康少女的字体文件拷贝到这个文件夹里面了:


运行以下代码就能得到pdf文件

public static void test1_2(){
      BaseFont bf;
      Font font = null;
      try {
//      bf = BaseFont.createFont("font/simsun.ttc,1", //注意这里有一个,1
//            BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//宋体文字
        bf = BaseFont.createFont("font/华康少女文字W5(P).TTC,1", //simsun.ttc
             BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//华康少女文字
          font = new Font(bf,12);
      } catch (Exception  e) {
          e.printStackTrace();
     }
     Document document = new Document();
     try {
         PdfWriter.getInstance(document, new FileOutputStream("E:/3.pdf"));
         document.open();
         document.add(new Paragraph("上善若水",font));
         document.close();
     } catch (Exception e) {
        System.out.println("file create exception");
     }
 }



当然,如果你还想换其他字体,就去下载字体文件吧,然后把相关部分替换掉就行,上面注释的是宋体的。。。


***********************以下是转载别人的****************************

以下为转载的别人方法:可以供参考


我们系统需要生成一个可以打印的PDF文档,老板给了我一个Word文档,按照这个Word文档的格式生成PDF文档。

第一步:下载AdobeAcrobat DC,必须使用这个来制作from域。

第二步:使用AdobeAcrobat DC将Word导成PDF文档。

第三步:由于还要加水印的效果,所以还是使用AdobeAcrobat DC来添加水印,非常方便;

    添加水印的方法:使用AdobeAcrobat DC打开PDF文档,“工具”-》“编辑PDF”-》”水印”-》”添加”

添加水印的操作:

点击“确定”:

第四步:使用AdobeAcrobat DC添加From域;

添加From域方法:使用AdobeAcrobat DC打开文档,“工具”-》“准备表单”

点击“开始”:

点击“保存”:

添加“文本域”到我们想要添加内容的位置:

第五步:使用Java代码导出PDF文档;

主要三个类:功能类-PDFTempletTicket

[java]view plain copy
在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  *@Title: PDFTempletTicket.java 
  3.  *@Package: org.csun.ns.util 
  4.  *@Description: TODO 
  5.  *@Author: chisj chisj@foxmail.com 
  6.  *@Date: 2016年4月27日上午11:29:52 
  7.  *@Version V1.0 
  8.  */  
  9. package org.csun.ns.util;  
  10.    
  11. import java.io.ByteArrayOutputStream;  
  12. import java.io.File;  
  13. import java.io.FileOutputStream;  
  14. import java.util.ArrayList;  
  15.    
  16. import org.csun.ns.entity.Ticket;  
  17.    
  18. import com.itextpdf.text.pdf.AcroFields;  
  19. import com.itextpdf.text.pdf.BaseFont;  
  20. import com.itextpdf.text.pdf.PdfReader;  
  21. import com.itextpdf.text.pdf.PdfStamper;  
  22.    
  23. /** 
  24.  *@ClassName: PDFTempletTicket 
  25.  *@Description: TODO 
  26.  *@Author: chisj chisj@foxmail.com 
  27.  *@Date: 2016年4月27日上午11:29:52 
  28.  */  
  29. public class PDFTempletTicket {  
  30.    
  31.          privateString templatePdfPath;  
  32.          privateString ttcPath;  
  33.          privateString targetPdfpath;  
  34.          privateTicket ticket;  
  35.           
  36.           
  37.          publicPDFTempletTicket() {  
  38.                    super();  
  39.          }  
  40.           
  41.          publicPDFTempletTicket(String templatePdfPath, String ttcPath,  
  42.                             StringtargetPdfpath, Ticket ticket) {  
  43.                    this.templatePdfPath= templatePdfPath;  
  44.                    this.ttcPath= ttcPath;  
  45.                    this.targetPdfpath= targetPdfpath;  
  46.                    this.ticket= ticket;  
  47.          }  
  48.           
  49.          publicvoid templetTicket(File file) throws Exception {  
  50.                     
  51.                    PdfReaderreader = new PdfReader(templatePdfPath);  
  52.                    ByteArrayOutputStreambos = new ByteArrayOutputStream();  
  53.                    PdfStamperps = new PdfStamper(reader, bos);  
  54.                     
  55.                    /*使用中文字体 */   
  56.                    BaseFontbf = BaseFont.createFont(PDFTicket.class.getResource("/") +"org/csun/ns/util/simsun.ttc,1",   
  57.                 BaseFont.IDENTITY_H,BaseFont.EMBEDDED);  
  58.        ArrayList<BaseFont> fontList = newArrayList<BaseFont>();   
  59.        fontList.add(bf);   
  60.                     
  61.                    AcroFieldss = ps.getAcroFields();  
  62.                    s.setSubstitutionFonts(fontList);  
  63.    
  64.                    s.setField("ticketId",ticket.getTicketId());  
  65.                    s.setField("ticketCreateTime",ticket.getTicketCreateTime());  
  66.                    s.setField("ticketCompany",ticket.getTicketCompany());  
  67.                    s.setField("sysName",ticket.getSysName());  
  68.                    s.setField("moneyLittle",ticket.getMoneyLittle());  
  69.                    s.setField("moneyBig",ticket.getMoneyBig());  
  70.                    s.setField("accountCompany",ticket.getAccountCompany());  
  71.                    s.setField("bedNumber",ticket.getBedNumber());  
  72.                    s.setField("username",ticket.getUsername());  
  73.                    s.setField("password",ticket.getPassword());  
  74.                     
  75.                     
  76.                    ps.setFormFlattening(true);  
  77.                    ps.close();  
  78.                     
  79.                    FileOutputStreamfos = new FileOutputStream(file);  
  80.                    fos.write(bos.toByteArray());  
  81.                    fos.close();  
  82.          }  
  83.    
  84.          /** 
  85.           * @return the templatePdfPath 
  86.           */  
  87.          publicString getTemplatePdfPath() {  
  88.                    returntemplatePdfPath;  
  89.          }  
  90.    
  91.          /** 
  92.           * @param templatePdfPath the templatePdfPathto set 
  93.           */  
  94.          publicvoid setTemplatePdfPath(String templatePdfPath) {  
  95.                    this.templatePdfPath= templatePdfPath;  
  96.          }  
  97.    
  98.          /** 
  99.           * @return the ttcPath 
  100.           */  
  101.          publicString getTtcPath() {  
  102.                    returnttcPath;  
  103.          }  
  104.    
  105.          /** 
  106.           * @param ttcPath the ttcPath to set 
  107.           */  
  108.          publicvoid setTtcPath(String ttcPath) {  
  109.                    this.ttcPath= ttcPath;  
  110.          }  
  111.    
  112.          /** 
  113.           * @return the targetPdfpath 
  114.           */  
  115.          publicString getTargetPdfpath() {  
  116.                    returntargetPdfpath;  
  117.          }  
  118.    
  119.          /** 
  120.           * @param targetPdfpath the targetPdfpath toset 
  121.           */  
  122.          publicvoid setTargetPdfpath(String targetPdfpath) {  
  123.                    this.targetPdfpath= targetPdfpath;  
  124.          }  
  125.    
  126.          /** 
  127.           * @return the ticket 
  128.           */  
  129.          publicTicket getTicket() {  
  130.                    returnticket;  
  131.          }  
  132.    
  133.          /** 
  134.           * @param ticket the ticket to set 
  135.           */  
  136.          publicvoid setTicket(Ticket ticket) {  
  137.                    this.ticket= ticket;  
  138.          }  
  139.           
  140.           
  141. }  

数据类-Ticket

[java]view plain copy
在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  *@Title: Ticket.java 
  3.  *@Package: org.csun.ns.entity 
  4.  *@Description: TODO 
  5.  *@Author: chisj chisj@foxmail.com 
  6.  *@Date: 2016年4月26日下午7:43:31 
  7.  *@Version V1.0 
  8.  */  
  9. package org.csun.ns.entity;  
  10.    
  11. /** 
  12.  *@ClassName: Ticket 
  13.  *@Description: TODO 
  14.  *@Author: chisj chisj@foxmail.com 
  15.  *@Date: 2016年4月26日下午7:43:31 
  16.  */  
  17. public class Ticket {  
  18.    
  19.          privateString ticketId;  
  20.          privateString homesId;  
  21.          privateString ticketCreateTime;  
  22.          privateString ticketCompany;  
  23.          privateString sysName;  
  24.          privateString moneyLittle;  
  25.          privateString moneyBig;  
  26.          privateString accountCompany;  
  27.          privateString bedNumber;  
  28.          privateString username;  
  29.          privateString password;  
  30.    
  31.          publicTicket() {  
  32.                    super();  
  33.          }  
  34.           
  35.          publicTicket(String ticketId, String homesId, String ticketCreateTime,  
  36.                             StringticketCompany, String sysName, String moneyLittle,  
  37.                             StringmoneyBig, String accountCompany, String bedNumber,  
  38.                             Stringusername, String password) {  
  39.                    this.ticketId= ticketId;  
  40.                    this.homesId= homesId;  
  41.                    this.ticketCreateTime= ticketCreateTime;  
  42.                    this.ticketCompany= ticketCompany;  
  43.                    this.sysName= sysName;  
  44.                    this.moneyLittle= moneyLittle;  
  45.                    this.moneyBig= moneyBig;  
  46.                    this.accountCompany= accountCompany;  
  47.                    this.bedNumber= bedNumber;  
  48.                    this.username= username;  
  49.                    this.password= password;  
  50.          }  
  51.    
  52.          /** 
  53.           * @return the ticketId 
  54.           */  
  55.          publicString getTicketId() {  
  56.                    returnticketId;  
  57.          }  
  58.    
  59.          /** 
  60.           * @param ticketId the ticketId to set 
  61.           */  
  62.          publicvoid setTicketId(String ticketId) {  
  63.                    this.ticketId= ticketId;  
  64.          }  
  65.    
  66.          /** 
  67.           * @return the homesId 
  68.           */  
  69.          publicString getHomesId() {  
  70.                    returnhomesId;  
  71.          }  
  72.    
  73.          /** 
  74.           * @param homesId the homesId to set 
  75.           */  
  76.          publicvoid setHomesId(String homesId) {  
  77.                    this.homesId= homesId;  
  78.          }  
  79.    
  80.          /** 
  81.           * @return the ticketCreateTime 
  82.           */  
  83.          publicString getTicketCreateTime() {  
  84.                    returnticketCreateTime;  
  85.          }  
  86.    
  87.          /** 
  88.           * @param ticketCreateTime the ticketCreateTimeto set 
  89.           */  
  90.          publicvoid setTicketCreateTime(String ticketCreateTime) {  
  91.                    this.ticketCreateTime= ticketCreateTime;  
  92.          }  
  93.    
  94.          /** 
  95.           * @return the ticketCompany 
  96.           */  
  97.          publicString getTicketCompany() {  
  98.                    returnticketCompany;  
  99.          }  
  100.    
  101.          /** 
  102.           * @param ticketCompany the ticketCompany toset 
  103.           */  
  104.          publicvoid setTicketCompany(String ticketCompany) {  
  105.                    this.ticketCompany= ticketCompany;  
  106.          }  
  107.    
  108.          /** 
  109.           * @return the sysName 
  110.           */  
  111.          publicString getSysName() {  
  112.                    returnsysName;  
  113.          }  
  114.    
  115.          /** 
  116.           * @param sysName the sysName to set 
  117.           */  
  118.          publicvoid setSysName(String sysName) {  
  119.                    this.sysName= sysName;  
  120.          }  
  121.    
  122.          /** 
  123.           * @return the moneyLittle 
  124.           */  
  125.          publicString getMoneyLittle() {  
  126.                    returnmoneyLittle;  
  127.          }  
  128.    
  129.          /** 
  130.           * @param moneyLittle the moneyLittle to set 
  131.           */  
  132.          publicvoid setMoneyLittle(String moneyLittle) {  
  133.                    this.moneyLittle= moneyLittle;  
  134.          }  
  135.    
  136.          /** 
  137.           * @return the moneyBig 
  138.           */  
  139.          publicString getMoneyBig() {  
  140.                    returnmoneyBig;  
  141.          }  
  142.    
  143.          /** 
  144.           * @param moneyBig the moneyBig to set 
  145.           */  
  146.          publicvoid setMoneyBig(String moneyBig) {  
  147.                    this.moneyBig= moneyBig;  
  148.          }  
  149.    
  150.          /** 
  151.           * @return the accountCompany 
  152.           */  
  153.          publicString getAccountCompany() {  
  154.                    returnaccountCompany;  
  155.          }  
  156.    
  157.          /** 
  158.           * @param accountCompany the accountCompany toset 
  159.           */  
  160.          publicvoid setAccountCompany(String accountCompany) {  
  161.                    this.accountCompany= accountCompany;  
  162.          }  
  163.    
  164.          /** 
  165.           * @return the bedNumber 
  166.           */  
  167.          publicString getBedNumber() {  
  168.                    returnbedNumber;  
  169.          }  
  170.    
  171.          /** 
  172.           * @param bedNumber the bedNumber to set 
  173.           */  
  174.          publicvoid setBedNumber(String bedNumber) {  
  175.                    this.bedNumber= bedNumber;  
  176.          }  
  177.    
  178.          /** 
  179.           * @return the username 
  180.           */  
  181.          publicString getUsername() {  
  182.                    returnusername;  
  183.          }  
  184.    
  185.          /** 
  186.           * @param username the username to set 
  187.           */  
  188.          publicvoid setUsername(String username) {  
  189.                    this.username= username;  
  190.          }  
  191.    
  192.          /** 
  193.           * @return the password 
  194.           */  
  195.          publicString getPassword() {  
  196.                    returnpassword;  
  197.          }  
  198.    
  199.          /** 
  200.           * @param password the password to set 
  201.           */  
  202.          publicvoid setPassword(String password) {  
  203.                    this.password= password;  
  204.          }  
  205.           
  206. }  

测试类-TestTempletTicket

[java]view plain copy
在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  *@Title: TestTempletTicket.java 
  3.  *@Package: org.csun.ns.util 
  4.  *@Description: TODO 
  5.  *@Author: chisj chisj@foxmail.com 
  6.  *@Date: 2016年4月27日下午1:31:23 
  7.  *@Version V1.0 
  8.  */  
  9. package org.csun.ns.util;  
  10.    
  11. import java.io.File;  
  12.    
  13. import org.csun.ns.client.OSSConfigure;  
  14. import org.csun.ns.client.OSSUtil;  
  15. import org.csun.ns.entity.Ticket;  
  16.    
  17. /** 
  18.  *@ClassName: TestTempletTicket 
  19.  *@Description: TODO 
  20.  *@Author: chisj chisj@foxmail.com 
  21.  *@Date: 2016年4月27日下午1:31:23 
  22.  */  
  23. public class TestTempletTicket {  
  24.    
  25.          publicstatic void main(String[] args) throws Exception {  
  26.                     
  27.                    Ticketticket = new Ticket();  
  28.                     
  29.                    ticket.setTicketId("2016042710000");  
  30.                    ticket.setTicketCreateTime("2016年4月27日");  
  31.                    ticket.setTicketCompany("武汉日创科技有限公司");  
  32.                    ticket.setSysName("智能看护系统");  
  33.                    ticket.setMoneyLittle("50,000.00");  
  34.                    ticket.setMoneyBig("伍万元整");  
  35.                    ticket.setAccountCompany("洪山福利院");  
  36.                    ticket.setBedNumber("500床位");  
  37.                    ticket.setUsername("qiu");  
  38.                    ticket.setPassword("123456");  
  39.                     
  40.                    PDFTempletTicketpdfTT = new PDFTempletTicket();  
  41.                     
  42.                   pdfTT.setTemplatePdfPath("D:\\ticket_from.pdf");  
  43.                    pdfTT.setTargetPdfpath("D:\\aaabbbccc.pdf");  
  44.                    pdfTT.setTicket(ticket);  
  45.                     
  46.                    Filefile = new File("D:\\aaabbbccc.pdf");  
  47.                    file.createNewFile();  
  48.                    pdfTT.templetTicket(file);  
  49.                     
  50.                    //OSSConfigureconfig = OSSUtil.getOSSConfigure();  
  51.        //OSSManageUtil.uploadFile(config, file, "aaabbbccc.pdf","pdf", "ticket/" + "aaabbbccc");  
  52.          
  53.        //System.out.println("path = " + config.getAccessUrl());  
  54.                     
  55.          }  
  56.           
  57. }  

导出来后的结果:

备注:导出PDF文档,From域的内容不可见问题;iText找不到字体;

问题1:我开始导出的From域内容看不到,将ps.setFormFlattening(true);设置为flase后,可以看到From域,还是看不到内容,我点击进入From后可以看到内容,该方法是将From域隐藏;后来看到有人设置From域内容的字体:BaseFontbf = BaseFont.createFont(PDFTicket.class.getResource("/") +"org/csun/ns/util/simsun.ttc,1", 

                BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

以及:

s.setSubstitutionFonts(fontList);

问题2:别人的代码:

BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

会报找不到字体的错误,这里的解决方式就是通过使用自己的字体就好,simsun.ttc是Windows下面自带的字体(简体宋体:C:\Windows\Fonts下面有很多字体可以使用)

******************************以上是转载************************************



java根据模板生成pdf文件(itextpdf) 阅读详情

相关推荐

JAVA根据模板填充,生成PDF文件

项目场景: 需求:根据客户模板,生成对应PDF文件。 例如:客户的doc模板文件: 最终效果展示: 话不多说,上操作: 1.引入pdf相关的依赖 <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> </dependency> <!

qq_41114874的博客 7067

Java使用pdf模板生成pdf文件

有时候,业务中我们需要使用pdf模板生成一份pdf文件。如何生成pdf文件?如下,我们把左侧的模板生成为右侧的填充文件。

不积跬步,无以至千里 2万+

java根据pdf模板生成一个pdf文件(批量数据)并导出(iText)

java根据模板生成pdf文件并导出(iText)

wfzlm的博客 3290

Java-根据模板生成PDF

在有些场景下我们可能需要根据指定的模板来生成 PDF,比如说合同、收据、发票等等。因为 PDF 是不可编辑的,所以用代码直接对 PDF 文件进行修改是很不方便的,这里我是通过itext和来实现的,以下就是具体实现方法。个人觉得代码实现起来不是很难,关键是要知道如何使用工具设置 PDF 模板以及itext的一些 API 的使用,以后有时间我会出一篇关于iText的博客,主要介绍iText在日常开发中的主要应用。为何选择iText?

xhmico的博客 1万+

Python OpenCV基于颜色通道分离法去除图片中的红色印章

最近一段时间的工作都是研究如何去除图片中的红色印章,在网上查找了大量的大佬写过的方法,发现大多数是采取颜色通道分离法来做,并且效果还不错。站在前人的肩膀上,我又做了些许调整,谈不上是改进,但是能应对更对的情况总还是好的,特此记录。 拿发票做例子,印章相较于其它部分最大的不同就是印章是红色的,而其它部分不是(这是一句废话)。 那么第一步当然就是将红色分离出来,这一步可以采用Python第三方库OpenCV里的 cv2.split()方法,该方法是把RGB图像的三个通道拆分开来,得...

wl_Honest的博客 1万+

BGE-Reranker-v2-M3介绍

重排序模型介绍

吉米_王 5892

JAVA根据模板生成PDF文件并导出

JAVA根据模板生成并导出PDF 实现功能 根据模板生成PDF文件,模板文件参数可配,可手动修改. 一 : PDF导出效果 先看一下导出的demo文件,具体样式可手动修改 下图为demo_pdf.ftl导出PDF文件 下图为list_pdf.ftl导出PDF文件 二 : 编写PDF模板 PDF文件模板,使用原生HTML文件编写,编写完成样式等参数,将文件后缀名修改为 .ftl 模板文件配置 ...

qq_38254635的博客 2万+

使用Jacob实现将Word文件转换为Pdf文件

如果是首次使用 jacob,建议先直接从 github上下载 zip包,因为在实现Word转Pdf的时候,不仅需要用到 jacob.jar,还需要 jacob.dll 库,而zip包中都有。官方使用文档可以参考:https://github.com/freemansoft/jacob-project/blob/main/docs/UsingJacob.md。// 如果安装的是微软的 Office,需要使用 Word.Application。

qq_41672950的博客 750

java根据模板生成pdf文件并导出(iText)

java根据模板生成pdf文件并导出首先你的制作一个pdf模板:1.先用word做出模板界面2.文件另存为pdf格式文件3.通过Adobe Acrobat pro软件打开刚刚用word转换成的pdf文件(注:如果没有这个软件可以通过我的百度云下载,链接:http://pan.baidu.com/s/1pL2klzt)如果无法下载可以联系博主。4.点击右边的"准备表单"按钮,选择"测试.pdf"选择...

小小刚优快云 2万+

3-RRR并联机器人结构详解:从运动学到奇异点分析(附MATLAB仿真代码)

本文详细解析了3-RRR并联机器人的结构设计、运动学建模及奇异点分析,并提供了MATLAB仿真代码。通过对称性设计和可分析性,3-RRR结构成为教学与研究的理想对象。文章从基础杆件参数设置到奇异位形的实时捕捉,深入探讨了机构运动的数学本质,并分享了仿真调试中的实用技巧,助力工业自动化和精密控制应用。

sunny的博客 367

置顶必读(1) | 2026最新首发,全网最全 Spring Boot 学习宝典(附思维导图)

从0到1以知识点+实例+项目的教学模式对SpringBoot框架由浅入深进行学习,快来跟bug菌一起学习吧。

**My Coding Family** 16万+

【亲测免费】 JAVA根据模板生成PDF文件并导出

JAVA根据模板生成PDF文件并导出 【下载地址】JAVA根据模板生成PDF文件并导出分享 JAVA根据模板生成PDF文件并导出本仓库提供了一套完整的解决方案,用于帮助开发者实现使用Java根据模板生成PDF文件并能够将其导出的功能 ...

gitblog_06589的博客 405

微店构造订单页面,自动化抢票

之前的文章写过微店抢票如何构造订单页面分析,这篇文章在之前的基础上,进行抢票。

猫敷雪 7202

java 根据PDF模板生成PDF文件并导出

1.准备操作的maven包 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.1</version> </dependency> <depen...

夜的博客 1万+

Codex CLI 手机号验证失败?5 种接码平台实测对比与绕过地区限制的 3 步操作

揭示 Codex CLI 手机号验证失败的真实原因在于上下文污染而非网络问题,分析其通过 ASN、Accept-Language 和 TLS SNI 三重加权风控的机制,并实测对比 5 种接码平台在 DNS 解析路径、ASN 干净度和复用间隔上的差异,提出剥离浏览器指纹、固化 TLS SNI、隔离

weixin_42627902的博客 733

15、运行语音识别应用:从Mac到微控制器的部署指南

本文详细介绍了如何在Mac上运行语音识别应用,并将其部署到Arduino Nano 33 BLE Sense和SparkFun Edge等微控制器设备上的完整流程。内容涵盖应用构建、设备特定的音频与输出实现、部署步骤、常见问题解决方案及进一步优化建议。通过本指南,开发者可快速实现基于TensorFlow Lite的嵌入式语音识别系统,并根据需求进行自定义修改与功能扩展。

l3m4n的博客 57

java导出pdf文件并下载_java根据模板生成pdf文件并导出

1.首先需要依赖包:itext的jar包,我是maven项目,所以附上maven依赖[html] view plain copycom.itextpdfitextpdf5.5.10[html] view plain copycom.itextpdfitext-asian5.2.02.下面就是生成pdf代码了[java] view plain copyimport java.io.ByteArray...

weixin_33542801的博客 2108

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Java根据模板生成pdf文件并导出

原文地址:http://blog.youkuaiyun.com/TOP__ONE/article/details/65442390首先你的制作一个pdf模板:1.先用word做出模板界面2.文件另存为pdf格式文件3.通过Adobe Acrobat pro软件打开刚刚用word转换成的pdf文件(注:如果没有这个软件可以通过我的百度云下载,链接:http://pan.baidu.com/s/1pL2klzt)...

杨春建的博客 7723

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java maven 读写pdf_java 根据PDF模板生成PDF文件并导出

1.准备操作的maven包com.itextpdfitextpdf5.5.1com.itextpdfitext-asian5.2.02.准备好你需要操作的PDF模板3.准备好Adobe Acrobat Distiller DC 工具4.使用Adobe Acrobat 打开你准备好的pdf模板,如图: 打开工具栏,找到准备表单 打开后,你就可以对你需要赋值的PDF表单进行字段的编辑,如下图: 5.使...

weixin_31774171的博客 512

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java根据模板生成pdf文件并导出(转)

首先制作PDF模板文件 首先你的制作一个pdf模板: 1.先用word做出模板界面 2.文件另存为pdf格式文件 3.通过Adobe Acrobat pro软件打开刚刚用word转换成的pdf文件(下载 Adobe Acrobat pro 破解版) 4.点击右边的"准备表单"按钮,选择"测试.pdf"选择

wy240036141的博客 4155

Java根据模版导出PDF文件

本文介绍了如何使用Java生成PDF文件。首先需要准备PDF模板文件,使用AcrobatProPortable工具编辑模板样式和表单字段。Java实现部分需引入itextpdf相关依赖,通过PdfReader读取模板,PdfStamper填充数据。关键步骤包括:设置中文字体(推荐使用simsunb.ttf)、使用键值对填充表单字段、设置表单不可编辑、生成最终PDF文件。代码示例展示了如何从数据库获取数据并填充到PDF模板中,生成物资出门证明文件。文章提供了完整的依赖配置和代码实现,适合需要PDF导出功能的J

ZHUSHANGLIN的博客 371
上一篇: linux下文件夹的创建、复制、剪切、重命名、清空和删除命令
下一篇: java实现发送邮件
TOP__ONE
博客等级 码龄10年 74粉丝 117原创
评论 72
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值