- 用word导出pdf文件格式
- 在线生成pdf模板文件表单,网址:https://www.pdfescape.com
上传刚刚保存的pdf文件
在下拉中选择自己需要的类型
选中文本框点击鼠标右键选择 object Properties
在name框中输入你要填充的字段名称,其他请根据自身需要选择,做完表单模板后点击
下载该模板。
3. 使用 iText 来填充表单,在pom文件中加入
<properties>
<itext.version>RELEASE</itext.version>
</properties>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext7-core</artifactId>
<version>${itext.version}</version>
<type>pom</type>
</dependency>
来导入itext所需包
4. 生成填充工具类
/**
* pdf文件生成工具类
* @author ls
*
*/
public class PdfFileGenerateUtil {
private static Logger logger = LogManager.getLogger(PdfFileGenerateUtil.class);
/**
* 文件生成
* @param inputPdfTempletaPath pdf模板文件路径
* @param outputFilePath 要生成pdf文件存放位置
* @throws IOException
*/
public static boolean generatePdf(String inputPdfTempletaPath,String outputFilePath,Map<String,Object> fillParam) {
if(Tools.isEmpty(inputPdfTempletaPath) || Tools.isEmpty(outputFilePath) || fillParam == null) {
return false;
}
try {
File outFile = new File(outputFilePath);
if(!outFile.exists()) {
if(!outFile.getParentFile().exists()) {
outFile.getParentFile().mkdirs();
}
outFile.createNewFile();
}
PdfReader pdfReader = new PdfReader(new FileInputStream(inputPdfTempletaPath));
PdfWriter writer = new PdfWriter(new FileOutputStream(outFile));
fillParam(pdfReader,writer,fillParam);
pdfReader.close();
writer.close();
} catch (Exception e) {
logger.error("生成pdf文件失敗,消息如下{}",e);
return false;
}
return true;
}
/**
* 参数填充
* @param pdfReader
* @param pdfWriter
* @param fillParam
* @throws IOException
*/
private static void fillParam(PdfReader pdfReader, PdfWriter pdfWriter,Map<String, Object> fillParam) throws IOException{
//1、创建pdf文件
PdfDocument pdf = new PdfDocument(pdfReader, pdfWriter);
//2、创建中文字体
PdfFont f2 = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", true);
//3、获取pdf模板中的域值信息
PdfAcroForm form = PdfAcroForm.getAcroForm(pdf, true);
Map<String, PdfFormField> fieldMap = form.getFormFields();
Iterator<String> paramIterator = fillParam.keySet().iterator();
while (paramIterator.hasNext()) {
String key = paramIterator.next();
String value = fillParam.get(key).toString();
PdfFormField formField = fieldMap.get(key);
if (formField == null) {
continue;
}
//4、填充信息
formField.setValue(value).setFont(f2);
}
//5、设置文本不可编辑
form.flattenFields();
pdf.close();
}
}
这里有个坑 在网上找的设置中文显示是直接在PdfDocument处设置,但是我未能成功,只能是在formField.setValue(value).setFont(f2);设置后中文才可以显示。