Java输出Pdf
详细步骤如下:
1.首先,新建一个word文档,内容如下,另存为pdf格式,我的命名:mytest.pdf。
2.用Adobe Acrobat Pro 打开刚刚制作的pdf文件。如下图:
3.点击创建–>PDF表单–>使用当前文档–>使用当前文档,一直点下一步完成。(有的版本Adobe Acrobat Pro软件右边有准备表单,直接点击准备表单是同样的效果)
也可能是不是PDF表单,是创建表单
引入依赖:
代码语言:javascript复制 <!--JavaToPdf使用依赖-->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.5</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
工具类如下:
代码语言:javascript复制package com.englishcode;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* @author YinLei
* @version 1.0
* @date 2021/3/1 15:08
*/
public class JavaToPdfUtils {
public void pdfUtils(String templatePdfPath, String outPdfPath, Map<String,Object> param) {
PdfReader reader;
FileOutputStream out;
ByteArrayOutputStream bos;
PdfStamper stamper;
try {
//创建指定类型的字体
BaseFont bf = null;
bf = BaseFont.createFont("C:\Windows\Fonts\simsun.ttc,1",BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
Font FontChinese = new Font(bf, 2, Font.NORMAL); //这个暂时没什么用
reader = new PdfReader(templatePdfPath); //读取pdf模板
out = new FileOutputStream(outPdfPath); //新文件输出流
bos = new ByteArrayOutputStream(); //字节输出流
stamper = new PdfStamper(reader,bos); //pdf模板中的内容到字节输出流
AcroFields form = stamper.getAcroFields();
//文字类的内容处理
Map<String,String>strmap =(Map<String,String>)param.get("strmap");
form.addSubstitutionFont(bf); //指定字体
for(String key : strmap.keySet()){
String value = strmap.get(key);
form.setField(key,value);
}
//报告生成日期
// SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
// String generationdate = dateformat.format(new Date());
// form.setField("generationdate", generationdate);
//图片类的内容处理
Map<String,String> imgmap = (Map<String,String>)param.get("imgmap");
for(String key : imgmap.keySet()) {
String value = imgmap.get(key);
String imgpath = value;
int pageNo = form.getFieldPositions(key).get(0).page;
Rectangle signRect = form.getFieldPositions(key).get(0).position;
float x = signRect.getLeft();
float y = signRect.getBottom();
//根据路径读取图片
Image image = Image.getInstance(imgpath);
//获取图片页面
PdfContentByte under = stamper.getOverContent(pageNo);
//图片大小自适应
image.scaleToFit(signRect.getWidth(), signRect.getHeight());
//添加图片
image.setAbsolutePosition(x, y);
under.addImage(image);
}
stamper.setFormFlattening(true);// 如果为false,生成的PDF文件可以编辑,如果为true,生成的PDF文件不可以编辑
stamper.close();
Document doc = new Document();
// Font font = new Font(bf, 32);
PdfCopy copy = new PdfCopy(doc, out);
doc.open();
PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);
copy.addPage(importPage);
doc.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
}
public static void main(String[] args) {
Map<String,String> map = new HashMap();
map.put("name1","张三");
map.put("name2","2018年1月1日");
Map<String,String> map2 = new HashMap();
map2.put("picture1","C:\Users\93676\Desktop\girl.png");
Map<String,Object> param=new HashMap();
param.put("strmap",map);
param.put("imgmap",map2);
new JavaToPdfUtils().pdfUtils("C:\Users\93676\Desktop\mytest.pdf","C:\Users\93676\Desktop\out1.pdf",param);
}
}