解決部分瀏覽器不能顯示itext生成的PDF文件文本域內容問題


利用Itext可以實現pdf的高效動態生成,但在實踐過程中遇到了一個問題:

即itext利用map中的值設置到pdf模板上建立的文本域中時:能成功生成,但是在部分瀏覽器上(360,QQ,等瀏覽器)無法正常顯示

如圖:

1:火狐瀏覽器顯示pdf文本域填充(圖片):

2:360瀏覽器顯示pdf文本域填充(圖片):

搜尋資料發現:

我們在將map鍵值添加到pdf模板的文本域中時,在AcroFields設置完后,關閉PdfReaderPdfStamper之前

應加上:

stamper.setFormFlattening(true)

大概意思即:將值填充到文本域后即將文本域轉換為一般文字對象,這樣就避免了某些瀏覽器不能顯示PDF文本域問題

但是這樣設置后生成的Pdf文檔中設置的文本域就不再具有編輯框功能(Pdf編輯器依然能夠編輯)

部分代碼如下:

// 設置中文顯示
bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

.........
try {
PdfReader reader = new PdfReader(path);//讀模板文件
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(tempPath));//復制模板文件
AcroFields s = stamper.getAcroFields();//獲取所有域名
for (String key : map.keySet()) {
String value = (String) map.get(key);
s.setFieldProperty(key,"textfont",bfChinese,null);
s.setField(key, value); // 為字段賦值,注意字段名稱是區分大小寫的
}
stamper.setFormFlattening(true);
reader.close();
stamper.close();
} catch (IOException e) {
logger.info(e.getMessage());
e.printStackTrace();
} catch (DocumentException e) {
logger.info(e.getMessage());
e.printStackTrace();
}

 

 


免責聲明!

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



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