带有 Windows 10 通用应用程序的 iTextSharp

iTextSharp with a Windows 10 Universal App

有没有办法让 iTextSharp 与 Windows 10 通用应用程序一起使用?当我尝试通过 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 Store 应用程序中使用 iTextSharp 获取 PDF 模板,然后使用用户提供的数据填充字段。用户还提供模板,以便文档按照他们想要的方式进行格式化。为此,我们使用 iTextSharp 库中的 PDFStamper class 来执行此操作,如以下代码所示:

    public async Task<byte[]> 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<String, String> 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 文档的任何建议,我们将不胜感激。 谢谢,

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",那么您可以阅读很多 well-known 库的类似问题,因此这不仅是 iTextSharp 的问题。

编辑

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

另一种方法是等待 iTextSharp 的新版本,目前(2016 年 1 月 6 日)没有预定的发布日期。此外,需要说明的是,尚未决定是否以及如何在 iTextSharp 的下一个版本或任何后续版本中支持 UWP。

编辑 2

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