首页 > Web开发 > 详细

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

时间:2019-12-06 22:58:36      阅读:158      评论:0      收藏:0      [点我收藏+]

之前在项目中一直使用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();
        }
    }

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

原文:https://www.cnblogs.com/finaldusk/p/11997880.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!