本篇文章主要講解的是如何採用itext7進行模板填充。
private static void fillparam(pdfreader pdfreader, pdfwriter pdfwriter,
mapmap, listpdfpositons) throws malformedurlexception catch (ioexception e)
pdf.addfont(f2);
//3、獲取pdf模板中的域值資訊
pdfacroform form = pdfacroform.getacroform(pdf, true);
mapfieldmap = form.getformfields();
iteratorparamiterator = map.keyset().iterator();
while (paramiterator.hasnext())
//4、判斷文字域是否超出寬度 且文字域是單行
if (!comparewidth(f2, formfield, value) && !formfield.ismultiline()) ", key);
}//5、填充資訊
formfield.setvalue(value);
}//6、設定文字不可編輯
form.flattenfields();
pdf.close();
}
注意點:
需要設定中文字型否則填充中文資訊時可能無法顯示
需要對單行的文字域進行寬度判斷,目前**中是列印了異常日誌
如果未設定文字不可編輯的話,會出現生成的檔案仍然可以修改的情況
下面來梳理一下如何判斷文字值超出文字框的最大長度(adobe 預設是不展示的,而實際使用過程中肯定是要提示一下使用者的)
實際比較物件是文字值的寬度和文字域的寬度,但是計算文字值的寬度是需要知道字型以及字型大小。
/**
* 1、獲取文字框的寬度 注意要減去左右的padding值 值為:pdfformfield.x_offset 2、獲取字串寬度注意字型 需使用中文字型
** @param pdffont 字型
* @param formfield 文字域
* @param value 文字值
* @return textwidth >= valuewidth return true else false
*/public static boolean comparewidth(pdffont pdffont, pdfformfield formfield, string value)
/*** 獲取adobe中設定的字型大小
* @param formfield
* @return
*/private static float getfontsize(pdfformfield formfield)
注意:實際文字域的邊框和字之間還是存在間隙了,類似於html中的padding,所以文字框的實際寬度還要減去兩邊的padding值 C 筆記 itext7將HTML轉為PDF
從nuget搜尋安裝 itext7.pdfhtml 安裝時根據提示一併安裝5個依賴項 itext7 microsoft.csharp portable.bouncycastle common.logging common.logging.core 由於itext7與itext5在結構和用法上有些區別...
Java中利用IText7生成PDF
下面介紹幾種itext7生成pdf的一些頁面元素的方法 官網1 新增 import com.itextpdf.kernel.font.pdffont import com.itextpdf.kernel.font.pdffontfactory import com.itextpdf.kernel.p...
使用itext7把html匯出為pdf,並設定中文
導包 html轉pdf工具 com.itextpdf groupid html2pdf artifactid 3.0.0 version dependency 中文字型 com.itextpdf groupid font asian artifactid 7.1.11 version depende...