itext操作表單域導出PDF,俗稱摳模板


/**
* templateUrl 模板文件路徑,包含文件名
* targetUrl 目標路徑
* dateMap 填充數據
*/
public class CreatePdfUtil {
public static String createAllPdf(String templateUrl,String targetUrl,HashMap dataMap) throws Exception {
//填充創建pdf
PdfReader reader = null;
PdfStamper stamp = null;
String times = "";
try {
reader = new PdfReader(templateUrl);

SimpleDateFormat simp = new SimpleDateFormat("yyyyMMdd");
times = simp.format(new Date()).trim();
times+=UUIDUtil.getUUID();
times = times;
//創建生成報告名稱
String root = targetUrl;
if (!new File(root).exists())
new File(root).mkdirs();
File deskFile = new File(root, times + ".pdf");
stamp = new PdfStamper(reader, new FileOutputStream(deskFile));
PdfWriter writer = stamp.getWriter();
TextField field = new TextField(writer, new Rectangle(200, 200, 400, 300), "field1");
field.setOptions(TextField.MULTILINE);
//取出報表模板中的所有字段
AcroFields form = stamp.getAcroFields();
// 填充數據
transformRegular(form,dataMap);
stamp.setFormFlattening(true);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (stamp != null) {
stamp.close();
}
if (reader != null) {
reader.close();
}
}
return times;
}

/**
     * 填充規整的表單域
     *
     * @param form
     */
public static void transformRegular(AcroFields form, HashMap dataMap) throws IOException, DocumentException {
if (dataMap == null || dataMap.size() == 0) {
return;
}
// 設置中文顯示
BaseFont bfChinese = BaseFont.createFont( "STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
String key = "";
    //注意,設置中文使用下面的方法,form.setFieldProperty(key,"textfont",bfChinese,null)這種方法沒作用
        form.addSubstitutionFont(bfChinese);
Iterator ekey = dataMap.keySet().iterator();
Object obj = null ;
while (ekey.hasNext()) {
key = ekey.next().toString();
try {
obj = dataMap.get(key);
//非空放入
if( dataMap.get(key) != null) {
            //form.setFieldProperty(key,"textfont",bfChinese,null);
                    form.setField(key, dataMap.get(key).toString());
}
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
依賴---------
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.10</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
注:如果填充時字數太多想要換行,則需在PDF模板里面直接對文本域的樣式進行設置,選擇允許多行即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM