Java 使用 itext 向PDF插入數(shù)據(jù)和圖片
一、下載Adobe Acrobat DC
二、制作模板
1、準(zhǔn)備一個(gè)word模板,并轉(zhuǎn)換成PDF格式
2、使用Adobe Acrobat DC打開PDF文檔,并在右側(cè)搜索框搜索表單,點(diǎn)擊準(zhǔn)備表單
3、點(diǎn)擊開始,制作PDF表單
4、掃描完成后如下圖,藍(lán)白色框就是可編輯表單
5、點(diǎn)擊表單編輯表單名稱以及插入時(shí)的字體大小樣式等,如果沒有設(shè)置字體大小,數(shù)據(jù)寫入時(shí)會(huì)將字體會(huì)根據(jù)表單的高度自適應(yīng)大小
文章來源:http://www.zghlxwxcb.cn/news/detail-697887.html
6、編輯完成后保存PDF模板
三、在Java中使用
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.*;
import java.io.*;
import java.nio.file.Files;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
public class PDFUtil {
private static void insertImage(AcroFields form, PdfStamper stamper, String filedName, String url) throws IOException, DocumentException {
int pageNo = form.getFieldPositions(filedName).get(0).page;
Rectangle signRect = form.getFieldPositions(filedName).get(0).position;
float x = signRect.getLeft();
float y = signRect.getBottom();
Image image = Image.getInstance(url);
// 獲取操作的頁面
PdfContentByte under = stamper.getOverContent(pageNo);
// 根據(jù)域的大小縮放圖片
image.scaleToFit(signRect.getWidth(), signRect.getHeight());
// 添加圖片
image.setAbsolutePosition(x, y);
under.addImage(image);
}
public static Boolean pdfTemplateInsert(String templateUrl, String outputFileUrl, Map<String, Object> templateValueMap, Map<String, String> templateImageMap) {
boolean success = true;
OutputStream os = null;
PdfStamper ps = null;
PdfReader reader = null;
try {
os = Files.newOutputStream(new File(outputFileUrl).toPath());
//讀取pdf表單
reader = new PdfReader(templateUrl);
//根據(jù)表單生成一個(gè)新的pdf文件
ps = new PdfStamper(reader, os);
//獲取pdf表單
AcroFields form = ps.getAcroFields();
//給表單中添加中文字體
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
form.addSubstitutionFont(bf);
if (null != templateValueMap && !templateValueMap.isEmpty()) {
for (String key : templateValueMap.keySet()) {
form.setField(key, String.valueOf(templateValueMap.get(key)));
}
}
if (null != templateImageMap && !templateImageMap.isEmpty()) {
for (String key : templateImageMap.keySet()) {
insertImage(form, ps, key, templateImageMap.get(key));
}
}
ps.setFormFlattening(true);
} catch (Exception e) {
success = false;
} finally {
try {
ps.close();
reader.close();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return success;
}
public static void main(String[] args) {
//模板路徑
String inputUrl = "E:/Desktop/test/demo/itext-demo.pdf";
//生成的文件路徑
String outputUrl = "E:/Desktop/test/demo/itext-demo-output.pdf";
Map<String, Object> data = new HashMap<>();
data.put("name", "張山");
data.put("year", "2000年10月");
data.put("phone", "13032451234");
data.put("gangwei", "Java開發(fā)");
data.put("introduceOneself", "熟練使用Java常用框架:Spring 、mybatis等");
//圖片地址
String imageUrl = "E:/Desktop/test/demo/1.jpeg";
Map<String, String> templateImageMap = new HashMap<>();
templateImageMap.put("image", imageUrl);
PDFUtil.pdfTemplateInsert(inputUrl, outputUrl, data, templateImageMap);
}
}
執(zhí)行結(jié)果
文章來源地址http://www.zghlxwxcb.cn/news/detail-697887.html
到了這里,關(guān)于Java 使用 itext 向PDF插入數(shù)據(jù)和圖片的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!