using System; using System.IO; using iText.Kernel.Pdf; using iText.Forms; using iText.Forms.Fields; // 輸入 PDF 文件路徑 using System.Reflection.PortableExecutable; string src = "template.pdf"; // 輸出 PDF 文件路徑 string dest = "filled_form.pdf"; // 打開現有的 PDF 文件 using (PdfDocument pdfDoc = new PdfDocument(new PdfReader(src), new PdfWriter(dest))) { // 獲取 PDF 表單 PdfAcroForm form = PdfAcroForm.GetAcroForm(pdfDoc, true); // 填充表單字段 form.GetField("Name").SetValue("Netshare").SetReadOnly(true); form.GetField("Date").SetValue("2025-04-19").SetReadOnly(true); form.GetField("Amount").SetValue("$1000").SetReadOnly(true); // 將表單字段設置為不可編輯 form.FlattenFields(); } Console.WriteLine("PDF 表單已填充并設置為只讀");
3.2 合并多個 PDF 文件
using System; using iText.Kernel.Pdf; string[] pdfFiles = { "file1.pdf", "file2.pdf", "file3.pdf" }; string dest = "merged.pdf"; using (PdfDocument mergedPdf = new PdfDocument(new PdfWriter(dest))) { foreach (stringfilein pdfFiles) { using (PdfDocument pdf = new PdfDocument(new PdfReader(file))) { pdf.CopyPagesTo(1, pdf.GetNumberOfPages(), mergedPdf); } } } Console.WriteLine("PDF 文件已成功合并");
3.3 分割 PDF 文件
using System; using iText.Kernel.Pdf; string src = "large.pdf"; string outputDir = "output/"; using (PdfDocument pdfDoc = new PdfDocument(new PdfReader(src))) { for (int i = 1; i <= pdfDoc.GetNumberOfPages(); i++) { string dest = $"{outputDir}page-{i}.pdf"; using (PdfDocument singlePagePdf = new PdfDocument(new PdfWriter(dest))) { pdfDoc.CopyPagesTo(i, i, singlePagePdf); } } } Console.WriteLine("PDF 文件已成功分割");
3.4 加密 PDF 文件
using System; using iText.Kernel.Pdf; string src = "document.pdf"; string dest = "encrypted.pdf"; WriterProperties props = new WriterProperties() .SetStandardEncryption( "user_password".GetBytes(), "owner_password".GetBytes(), EncryptionConstants.ALLOW_PRINTING, EncryptionConstants.ENCRYPTION_AES_256 ); using (PdfWriter writer = new PdfWriter(dest, props)) using (PdfDocument pdfDoc = new PdfDocument(new PdfReader(src), writer)) { Console.WriteLine("PDF 文件已加密"); }
4. 常見問題及解決方案
4.1 表單字段名稱不匹配
問題描述:調用 GetField 時返回 null。 解決方案:確保字段名稱與 PDF 表單中的實際名稱一致,可以使用 PDF 編輯工具(如 Adobe Acrobat)檢查字段名稱。
4.2 中文字體顯示問題
問題描述:填充的中文字符顯示為亂碼。 解決方案:
1. 安裝 iText7 的字體支持包:
dotnet add package itext7.font-asian
2. 在代碼中指定支持中文的字體:
var font = PdfFontFactory.CreateFont(StandardFonts.HELVETICA); field.SetFont(font);
5. 總結
通過本文的實戰案例,您可以使用 iText7 在 C# 中輕松實現 PDF 表單填充、文件合并、分割和加密等操作。iText7 提供了強大的功能,適用于各種復雜的 PDF 處理場景。