1、 首先要安装Adobe Acrobat,装好之后用Acrobat从一个word,excel或者pdf中转换一个pdf模板,我做的模板很简单,直接写一个简单的word再生成一个pdf表单,之后编辑文本域的名字属性等,根据名字在Java中导入。下图是Acrobat10打开的,每个文本域都有一个名字,在Java中根据名字(xh、xm等)添表格,(文本域的字体设置成kozuka Mincho,能接受汉字导入)。

2、文件准备(附近查看我的下载资源)

(1)向java工程导入两个包 iText.jar(我用的5.0.6版本),iTextAsian.jar(汉字支持包)

(2)把“学生信息模板.pdf”和“图片.jpg”放到D盘跟 目录下

3、 Java代码

代码从网上一个大神那看到只改动了一点- -

注意主类中有四个方法,未注释的哪个就是PDF模板导出,其他三个测试方法写的也非常好。

多看看注释

注意改文件名,包名

package org.test;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Iterator;
import java.util.List;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.html.simpleparser.HTMLWorker;
import com.itextpdf.text.html.simpleparser.StyleSheet;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfWriter;
public class sss {
 // http://prdownloads.sourceforge.net/itext/iTextAsian.jar
 public static void main(String[] args) {
   //createPDFWithChinese();
  //createPdf();
  fromPDFTempletToPdfWithValue();
  // fromHtmlToPdf();
 }
 /**
  * 根据pdf模板填充相应的值: 1,如果是根据excel填充的话,在用Acrobat生成PDF模板前,
  * Excel单元格格式最好设置成文本,否则pdf填充值时可能中文无法显示
  */
 public static void fromPDFTempletToPdfWithValue() {
  String fileName = "d:\\学生信息模板.pdf"; // 
  try {
   PdfReader reader = new PdfReader(fileName);
   ByteArrayOutputStream bos = new ByteArrayOutputStream();
   PdfStamper ps = new PdfStamper(reader, bos);
   /**
    * 使用中文字体 如果是利用 AcroFields填充值的不需要在程序中设置字体,在模板文件中设置字体为中文字体就行了
    */
   BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
     BaseFont.NOT_EMBEDDED);
   Font font = new Font(bf, 12, Font.NORMAL);
   AcroFields s = ps.getAcroFields();
   System.out.println("s: " + s);
   System.out.println("AcroFields: " + s.getFields());
   System.out.println("AcroFields.class: " + s.getFields().getClass());
   System.out.println("getSignatureNames: " + s.getSignatureNames());
   System.out.println("getSignatureNames: " + s.getTotalRevisions());
   System.out.println("s: " + s.getBlankSignatureNames());
   System.out.println("s: " + s.getFieldCache());
   System.out.println("s: " + s.getSubstitutionFonts());
   /*
    * int i = 1; for (Iterator it = s.getFields().keySet().iterator();
    * it.hasNext(); i++) { String name = (String) it.next(); String
    * value = s.getField(name); System.out.println("[" + i + "- name:" +
    * name + ", value: "+value+"]"); s.setField(""+name.trim(),
    * "aaa一二三"); }
    * 
    * s.setField("Text1", "NOHI"); s.setField("Text2", "2011-04-05");//
    * 注意pdf中域的大小,这里设置的值太长,pdf中会显示不全
    */
   // 设置为true/false在点击生成的pdf文档的填充域时有区别,
   
   s.setField("xh", "201001");
   s.setField("xm", "姓名");
   s.setField("xb", "男");
   s.setField("cssj", "1989-02-15");
   s.setField("zy_id", "001");
   s.setField("zxf", "123");
   s.setField("bz", "三好学生"); 
   
   //Document document = new Document();
   //document.open();
   Image gif = Image.getInstance("d:\\图片.jpg");
   gif.setDpi(100, 100);
   gif.setBorderWidth(200);
   gif.scaleAbsolute(80, 100); 
   gif.setAbsolutePosition(400, 700);
   PdfContentByte over = ps.getOverContent(1);
   over.addImage(gif);
   
   ps.setFormFlattening(true);
   ps.close();
   FileOutputStream fos = new FileOutputStream("d:\\学生信息导出.pdf");
   fos.write(bos.toByteArray());
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   // doc.close();
  }
 }
 /**
  * 创建pdf
  */
 public static void createPdf() {
  Document doc = null;
  try {
   doc = new Document();
   PdfWriter.getInstance(doc, new FileOutputStream("d:\\itext.pdf"));
   doc.open();
   BaseFont bfChi = BaseFont.createFont("STSong-Light",
     "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
   Font fontChi = new Font(bfChi, 12, Font.NORMAL);
   doc.add(new Paragraph(
     "Hello World,看看中文支持不........aaaaaaaaaaaaaaaaa", fontChi));
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (DocumentException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   doc.close();
  }
 }
 /**
  * 生成一个PDF,with图片
  */
 public static void createPDFWithChinese() {
  System.out.println("createPDFWithChinese...........");
  try {
   // 1.建立Document实例
   Document document = new Document();
   // 2.建立一个书写器与Document对象关联,通过书写器将文档写入磁盘
   PdfWriter.getInstance(document,
     new FileOutputStream("D:\\test.pdf"));
   // 3.打开文档
   document.open();
   // 4.向文档中添加内容
   // a)添加一个图片
   Image gif = Image.getInstance("d:\\pdf.BMP");
   
   System.out.println("gif" + gif);
   gif.setDpi(100, 100);
   gif.setBorderWidth(200);
   gif.scaleAbsoluteHeight(100);
   gif.scaleAbsoluteWidth(80);
   document.add(gif);
   // b)添加一个段落
   document.add(new Paragraph("iText HelloWorld"));
   // c)添加一个块
   document.add(new Chunk("Text is underline", FontFactory.getFont(
     FontFactory.HELVETICA_BOLD, 12, Font.UNDERLINE)));
   // d)添加中文,需要引入iTextAsian.jar
   // BaseFont bfChi = BaseFont.createFont("STSong-Light",
   // "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
   BaseFont bfChi = BaseFont.createFont("STSong-Light",
     "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
   Font fontChi = new Font(bfChi, 12, Font.NORMAL);
   document.add(new Paragraph("中文测试", fontChi));
   // e)添加一个表格
   // 表格内部格式和html中的格式差不多
   PdfPTable table = new PdfPTable(4);
   table.setWidthPercentage(100);
   table.setWidthPercentage(100);
   table.addCell(new Paragraph("学号", fontChi));
   PdfPCell cell = new PdfPCell(new Paragraph("00000001", fontChi));
   cell.setColspan(3);
   table.addCell(cell);
   table.addCell(new Paragraph("姓名", fontChi));
   table.addCell(new Paragraph("张三", fontChi));
   table.addCell(new Paragraph("总成绩", fontChi));
   table.addCell(new Paragraph("160", fontChi));
   table.addCell(new Paragraph("学号", fontChi));
   PdfPCell cell2 = new PdfPCell(new Paragraph("00000002", fontChi));
   cell2.setColspan(3);
   table.addCell(cell2);
   table.addCell(new Paragraph("姓名", fontChi));
   table.addCell(new Paragraph("李四", fontChi));
   table.addCell(new Paragraph("总成绩", fontChi));
   table.addCell(new Paragraph("167", fontChi));
   document.add(table);
   // 5.关闭文档
   document.close();
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (DocumentException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (MalformedURLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 /**
  * 根据html生成pdf没有试过,不知道行不
  */
 public static void fromHtmlToPdf() {
  try {
   Document document = new Document();
   StyleSheet st = new StyleSheet();
   st.loadTagStyle("body", "leading", "16,0");
   PdfWriter.getInstance(document, new FileOutputStream(
     "d:\\html2.pdf"));
   document.open();
   List<Element> p = HTMLWorker.parseToList(new FileReader(
     "d:\\to_pdf.htm"), st);
   for (int k = 0; k < p.size(); ++k)
    document.add((Element) p.get(k));
   document.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

PDF模板报表导出(Java+Acrobat+itext)的更多相关文章

  1. 新知识:Java 利用itext填写pdf模板并导出(昨天奋战到深夜四点,知道今天两点终于弄懂)

    废话少说,不懂itext干啥用的直接去百度吧. ***************制作模板******************* 1.先用word做出界面 2.再转换成pdf格式 3.用Adobe Acr ...

  2. java之数据填充PDF模板

    声明:由于业务场景需要,所以根据一个网友的完成的. 1.既然要使用PDF模板填充,那么就需要制作PDF模板,可以使用Adobe Acrobat DC,下载地址:https://carrot.ctfil ...

  3. 创建PDF模板,java添加内容、导出下载PDF

    本文主要内容是:用java在pdf模板中加入数据,图片. 废话不多说,举个非常简单的例子: 首先创建word文档,导出PDF. 用 软件adobe acrobat打开,操作步骤如图: 在指定位置添加文 ...

  4. java利用itext导出pdf

    项目中有一功能是导出历史记录,可以导出pdf和excel,这里先说导出pdf.在网上查可以用那些方式导出pdf,用itext比较多广泛. 导出pdf可以使用两种方式,一是可以根据已有的pdf模板,进行 ...

  5. java根据模板文件导出pdf

    原文:https://www.cnblogs.com/wangpeng00700/p/8418594.html 在网上看了一些Java生成pdf文件的,写的有点乱,有的不支持写入中文字体,有的不支持模 ...

  6. Java使用IText(VM模版)导出PDF

    Java使用IText(VM模版)导出PDF: public String createPDF(ProjectManageBase projectManageBase) { Map map = new ...

  7. 【Java】itext根据模板生成pdf(包括图片和表格)

    1.导入需要的jar包:itext-asian-5.2.0.jar itextpdf-5.5.11.jar. 2.新建word文档,创建模板,将文件另存为pdf,并用Adobe Acrobat DC打 ...

  8. JAVA使用itext根据模板生成PDF文档

    1.制作PDF模板 网址打开:https://www.pdfescape.com/open/ 我们这里先在线上把基础的内容用word文档做好,然后转成PDF模板,直接上传到网站上,这样方便点 假设我们 ...

  9. 【PDF】java使用Itext生成pdf文档--详解

    [API接口]  一.Itext简介 API地址:javadoc/index.html:如 D:/MyJAR/原JAR包/PDF/itext-5.5.3/itextpdf-5.5.3-javadoc/ ...

随机推荐

  1. jquery返回顶部-ie6配合css表达式。

    css: .wraper{ width:980px; height:2048px; margin:0 auto; background:#ccc; } /*返回头部*/ #backToTop a{;; ...

  2. mysql update不能直接使用select的结果

    在sql server中,我们可是使用以下update语句对表进行更新:update a set a.xx= (select yy from b) ;但是在mysql中,不能直接使用set selec ...

  3. PHP IP互换数字[转]

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. onethink 换空间报错 解决方案

    onethink 换空间的时候有两个配置文件 Application\Common\Conf Application\User\Conf 如果报错先测试数据库 <?php $con = mysq ...

  5. max os 安装python模块PIL

    下载libjpeg和zlib: http://www.ijg.org/files/jpegsrc.v9.tar.gz http://zlib.net/zlib-1.2.8.tar.gz 安装libjp ...

  6. Xcode6插件开发

    工欲善其事必先利其器,Xcode是我们做iOS Dev必须掌握的一款开发工具. Xcode本身也是一门Cocoa程序,与其来说它是一个Cocoa程序,是不是意味着,我们可以去动态去让它做某件事,或者监 ...

  7. TMS IntraWeb 5.4.1.1 for XE6 (适配Intraweb14.0.32)

    文件夹内含有我自己已经编译好的bpl,仅供大家学习使用,请支持正版!!导入ParaInstalarXE6.groupproj后,逐个编译安装即可. 链接:http://pan.baidu.com/s/ ...

  8. 你一定要知道的关于Linux文件目录操作的12个常用命令

    写在前面: 1,<你一定要知道的关于Linux文件目录操作的12个常用命令>是楼主收集的关于Linux文件目录操作最常用的命令,包括文件或目录的新建.拷贝.移动.删除.查看等,是开发人员操 ...

  9. 从零开始学习MySQL2---MySQL的安装与配置(只有Windows)

    因为我电脑只装了Windows系统,故而,只整理了在Windows系统下的安装方式 截图比较麻烦,故而多引用百度经验. Windows平台下安装与配置MySQL 5.6 下载,网址:http://de ...

  10. C#委托(Delegate)学习日记

    在.NET平台下,委托类型用来定义和响应应用程序中的回调.事实上,.NET委托类型是一个类型安全的对象,指向可以以后调用的其他方法.和传统的C++函数指针不同,.NET委托是内置支持多路广播和异步方法 ...