在.Net中使用iText7填充PDF表單


之前在項目中一直使用iTextSharp作為操作PDF的工具,然而開發者已經終止了iTextSharp的功能更新並提示用戶盡快將項目遷移至iText7 for .NET,升級到iText7后很多使用方式都發生了改變,雖然官方提供了詳細的文檔但沒有中文,網絡上能搜索到的資料也幾乎都是iTextSharp的或是Java的,下面我就整理一下使用在.Net中使用iText7填充PDF表單的操作。
安裝iText7、解決中文問題

使用NuGet或.NET CLI安裝iText7##

NuGet:

PM>Install-Package itext7

.NET CLI

dotnet add package itext7

如果只安裝安裝上面的包那么是無法在生成的PDF文件中輸出中文的,我們還要安裝亞洲字體包來解決輸出中文的問題 (也能解決輸出日文和韓文的問題) 。關於PDF中字體的問題可以查看這篇文章 https://blog.csdn.net/u012397189/article/details/78471319

NuGet

PM>Install-Package itext7.font-asian

.NET CLI

dotnet add package itext7.font-asian

准備PDF表單##

使用Adobe Acrobat DC或其他PDF工具制作PDF表單。

PDF表單填充類##

public static class PDFUtil
    {
        /// <summary>
        /// 使用Dictionary填充PDF表單
        /// </summary>
        /// <param name="templatePath">PDF表單模板地址</param>
        /// <param name="Dic">要填充的數據</param>
        /// <returns>PDF文件字節流</returns>
        public static byte[] FillForm(String templatePath,Dictionary<String,String> Dic)
        {
            var ms = new MemoryStream();
            using (PdfDocument document = new PdfDocument(new PdfReader(templatePath), new PdfWriter(ms)))
            {
                //使用內置字體
                PdfFont font = PdfFontFactory.CreateFont("STSong-Light", "UniGB-UCS2-H", true);
                //使用系統字體
                PdfFont systemfont = PdfFontFactory.CreateFont("C:/Windows/Fonts/simhei.ttf", PdfEncodings.IDENTITY_H, true);
                //獲取表單
                var form = PdfAcroForm.GetAcroForm(document, true);
                //獲取表單域
                var fields = form.GetFormFields();
                //遍歷表單域進行填充
                foreach (var field in fields)
                {
                    //在Dictionary中查找有無對應域的數據
                    if (Dic.TryGetValue(field.Key, out string value))
                    {
                        //填充表單、設置字體、設置只讀
                        field.Value
                            .SetValue(value)
                            .SetFont(systemfont)
                            .SetReadOnly(true);                        
                    }
                }
            }
            return ms.ToArray();
        }
    }

調用##

class Program
    {
        static void Main(string[] args)
        {
            var dic = new Dictionary<string, string>();
            dic.Add("name", "帶惡人");
            dic.Add("idcard", "210101199909099999");
            dic.Add("sex", "男");
            dic.Add("birthday", "1999-09-09");
            dic.Add("location", "皮條胡同老拉家");
            dic.Add("bankcard", "6214830200000000");
            dic.Add("bankname", "召冏艮亍");
            var filebyte=PDFUtil.FillForm(@"D:\project\PDFFromFill\demofile\表單.pdf", dic);
            
            using (FileStream fs = new FileStream(@"D:\project\PDFFromFill\demofile\輸出表單.pdf",FileMode.OpenOrCreate, FileAccess.Write))
            {
                fs.Write(filebyte, 0, filebyte.Length);               
            }
            Console.ReadLine();
        }
    }


免責聲明!

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



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