我做了一個 PDF 套版的範例給您參考看看,結果如下圖。
首先製作範本檔:
左邊利用 Button 元件的背景圖來顯示驚嘆號,右邊為文字欄位。
接著利用程式套入資料:
程式判斷資料為 True 就顯示圖片。
//測試資料
var dataList = new List<Data>
{
new Data { isTrue = true },
new Data { isTrue = false },
new Data { isTrue = true },
};
var basePath = AppDomain.CurrentDomain.BaseDirectory;
//範本檔路徑
var template = $"{basePath}template.pdf";
var output = null as byte[];
using (var stream = new MemoryStream())
{
using (var reader =
new iTextSharp.text.pdf.PdfReader(template))
{
using (var stamper =
new iTextSharp.text.pdf.PdfStamper(reader, stream))
{
//加入字型
var baseFont = iTextSharp.text.pdf.BaseFont.CreateFont(
@"C:\windows\fonts\arial.ttf",
iTextSharp.text.pdf.BaseFont.IDENTITY_H,
iTextSharp.text.pdf.BaseFont.EMBEDDED);
stamper.AcroFields.AddSubstitutionFont(baseFont);
//取得表單
var form = stamper.AcroFields;
for (var i = 0; i < dataList.Count; i++)
{
var item = dataList[i];
//套入文字
form.SetField($"Text{(i + 1)}", item.isTrue.ToString());
//套入圖片
if (item.isTrue)
{
var image = iTextSharp.text.Image.GetInstance(
$"{basePath}image.jpg");
var pushbuttonField =
form.GetNewPushbuttonFromField($"Button{(i + 1)}");
pushbuttonField.Layout =
iTextSharp.text.pdf.PushbuttonField.LAYOUT_ICON_ONLY;
pushbuttonField.ProportionalIcon = true;
pushbuttonField.Image = image;
form.ReplacePushbuttonField(
$"Button{(i + 1)}", pushbuttonField.Field);
}
}
stamper.FormFlattening = true;
}
}
output = stream.ToArray();
}
//另存 PDF
using (var fs = File.Create($"{basePath}newPdf.pdf"))
{
fs.Write(output, 0, output.Length);
}
詳細的 PDF 套版說明可以參考這篇 文章