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

本文详细介绍了如何使用Java结合iText库根据PDF模板生成PDF文件。首先,通过Adobe Acrobat Pro制作PDF模板,然后在Java程序中读取模板,使用AcroFields设置表单字段并导出新的PDF文件。此外,还提供了如何处理中文字体和生成PDF文件的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java根据模板生成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依赖

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

  1. import java.io.ByteArrayOutputStream;
  2. import java.io.FileOutputStream;
  3. import java.io.IOException;
  4. import com.itextpdf.text.Document;
  5. import com.itextpdf.text.DocumentException;
  6. import com.itextpdf.text.pdf.AcroFields;
  7. import com.itextpdf.text.pdf.PdfCopy;
  8. import com.itextpdf.text.pdf.PdfImportedPage;
  9. import com.itextpdf.text.pdf.PdfReader;
  10. import com.itextpdf.text.pdf.PdfStamper;
  11. public class Snippet {
  12. // 利用模板生成pdf
  13. public static void fillTemplate() {
  14. // 模板路径
  15. String templatePath = "E:/测试3.pdf";
  16. // 生成的新文件路径
  17. String newPDFPath = "E:/ceshi.pdf";
  18. PdfReader reader;
  19. FileOutputStream out;
  20. ByteArrayOutputStream bos;
  21. PdfStamper stamper;
  22. try {
  23. out = new FileOutputStream(newPDFPath); // 输出流
  24. reader = new PdfReader(templatePath); // 读取pdf模板
  25. bos = new ByteArrayOutputStream();
  26. stamper = new PdfStamper(reader, bos);
  27. AcroFields form = stamper.getAcroFields();
  28. String[] str = { "123456789", "TOP__ONE", "男", "1991-01-01", "130222111133338888", "河北省保定市" };
  29. int i = 0;
  30. java.util.Iterator<String> it = form.getFields().keySet().iterator();
  31. while (it.hasNext()) {
  32. String name = it.next().toString();
  33. System.out.println(name);
  34. form.setField(name, str[i++]);
  35. }
  36. stamper.setFormFlattening( true); // 如果为false那么生成的PDF文件还能编辑,一定要设为true
  37. stamper.close();
  38. Document doc = new Document();
  39. PdfCopy copy = new PdfCopy(doc, out);
  40. doc.open();
  41. PdfImportedPage importPage = copy.getImportedPage( new PdfReader(bos.toByteArray()), 1);
  42. copy.addPage(importPage);
  43. doc.close();
  44. } catch (IOException e) {
  45. System.out.println( 1);
  46. } catch (DocumentException e) {
  47. System.out.println( 2);
  48. }
  49. }
  50. public static void main(String[] args) {
  51. fillTemplate();
  52. }
  53. }
3.运行结果如下

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

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

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

  1. public static void test1_1(){
  2. BaseFont bf;
  3. Font font = null;
  4. try {
  5. bf = BaseFont.createFont( "STSong-Light", "UniGB-UCS2-H",
  6. BaseFont.NOT_EMBEDDED); //创建字体
  7. font = new Font(bf, 12); //使用字体
  8. } catch (Exception e) {
  9. e.printStackTrace();
  10. }
  11. Document document = new Document();
  12. try {
  13. PdfWriter.getInstance(document, new FileOutputStream( "E:/2.pdf"));
  14. document.open();
  15. document.add( new Paragraph( "hello word 你好 世界",font)); //引用字体
  16. document.close();
  17. } catch (Exception e) {
  18. System.out.println( "file create exception");
  19. }
  20. }
**************************************************************************************

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

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


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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值