当前位置:  开发笔记 > 编程语言 > 正文

iTextSharp与Windows 10通用应用程序

如何解决《iTextSharp与Windows10通用应用程序》经验,为你挑选了1个好方法。

有没有办法让iTextSharp与Windows 10 Universal应用程序一起使用?当我尝试通过NuGet包管理器添加iTextSharp版本5.5.8时,我收到以下错误:

iTextSharp 5.5.8 is not compatible with UAP, Version=v10.0(win10-XXX)
Some packages are not compatible ith UAP,Version=v10.0(win10-XXX)

其中XXX是x64或x86等平台.我们在Windows 8商店应用程序中使用iTextSharp来获取PDF模板,然后使用用户提供的数据填充字段.用户还提供模板,以便按照他们想要的方式格式化文档.为此,我们使用iTextSharp库中的PDFStamper类来执行此操作,如以下代码所示:

    public async Task fillPDF(string templatePath, FormData mergeDataItems)
        {


            StorageFile file = await StorageFile.GetFileFromPathAsync(templatePath);
            var buf = await FileIO.ReadBufferAsync(file);


            var reader = new PdfReader(buf.ToArray());
            var outStream = new MemoryStream();
            var stamper = new PdfStamper(reader, outStream);

            var form = stamper.AcroFields;
            form.GenerateAppearances = true; //Added this line, fixed my problem
            var fieldKeys = form.Fields.Keys;

            foreach (KeyValuePair pair in mergeDataItems.MergeFieldValues)
            {
                if (fieldKeys.Any(f => f == pair.Key))
                {
                    form.SetField(pair.Key, pair.Value);
                }
            }
            stamper.Close();
            reader.Close();

            return flattenPdf(outStream.ToArray());
        }

和这里

    private static byte[] flattenPdf(byte[] pdf)
        {
            var reader = new PdfReader(pdf);

            var outStream = new MemoryStream();
            var stamper = new PdfStamper(reader, outStream);

            stamper.FormFlattening = true;

            stamper.Close();
            reader.Close();

            return outStream.ToArray();
        }

任何有关使iTextSharp与Windows 10应用程序一起使用的帮助或任何关于如何从没有iTextSharp的模板生成PDF文档的建议将非常感激.谢谢,



1> blagae..:

UWP框架是.NET生态系统的一个明显重大更新,特别是在安全性和加密方面.例如,在UWP的哈希算法类位于命名空间Windows.Security.Cryptography.Core,而截止到.NET 4.x的他们在System.Security.Cryptography.某些类也已重命名.

这是iTextSharp的一个重大变化,也是它的安全依赖性BouncyCastle,因为该System.Security.Cryptography程序集用于数字签名.NuGet或UWP本身显然知道所使用的.NET程序集,并拒绝添加无法在UWP中编译的依赖项 - 无论您是否使用与数字签名相关的任何iTextSharp功能.

仅供参考我是iText的员工,几周前我们就发现了这个问题.调查仍在进行中,因此我可能无法在此解释中做到一切正确.我们还在制定支持UWP和.NET 4.x的策略 - 据我所知,这在加密方面是互斥的.如果您使用Google这个术语"is not compatible with UAP",那么您可以阅读许多知名库的类似问题,因此这不仅仅是iTextSharp的问题.

编辑

如果您确实需要快速解决方案,那么您可以下载iTextSharp的源代码并将其复制粘贴到Visual Studio中的新UWP类库项目中.编译错误的数量看起来令人生畏,但其中大约80%对我来说似乎微不足道.例如,其中一半是对Exception类的继承构造函数中的Serializable和SerializationInfo的引用,它们不再存在,因此可以安全地删除它们(!).

另一种方法是等待iTextSharp的新版本,目前(2016年1月6日)没有预定的发布日期.此外,为了清楚起见,还没有决定是否以及如何通过下一版本或iTextSharp中的任何后续版本支持UWP.

编辑2

我最近写了一篇关于这个问题的博客文章,作为iText团队的官方声明.http://itextpdf.com/blog/itextsharp-and-uwp

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有