有没有办法让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 TaskfillPDF(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文档的建议将非常感激.谢谢,
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.
我最近写了一篇关于这个问题的博客文章,作为iText团队的官方声明.http://itextpdf.com/blog/itextsharp-and-uwp