C# PDFsharp。无法处理iref流

C# PDFsharp。无法处理iref流,c#,pdf,nuget,open-source,pdfsharp,C#,Pdf,Nuget,Open Source,Pdfsharp,我们正在使用PDFsharp以编程方式对PDF文件进行一些更改。我们使用的是最新的稳定版本:1.32.4334 我试着像这样处理pdf文件 //inputStream is memory stream var doc = PdfReader.Open(inputStream); 在一些文件中,我们在尝试打开上面代码中提到的PDF时会出现此错误 无法处理iref流。PDFsharp的当前实现 无法处理Acrobat 6引入的此PDF功能 我在谷歌上搜索了很多,看到很多人都有这个问题,但我并

我们正在使用PDFsharp以编程方式对PDF文件进行一些更改。我们使用的是最新的稳定版本:1.32.4334

我试着像这样处理pdf文件

//inputStream is memory stream 
var doc = PdfReader.Open(inputStream); 
在一些文件中,我们在尝试打开上面代码中提到的PDF时会出现此错误

无法处理iref流。PDFsharp的当前实现 无法处理Acrobat 6引入的此PDF功能

我在谷歌上搜索了很多,看到很多人都有这个问题,但我并没有真正找到任何好的解决办法。网络解决方案包括:

1.

try
{
}
catch (PdfReaderException pdfException)
{
// Do nothing
}
2. 使用PDFsharp的beta版本1.50

第三种方法是将它与iTextSharp结合使用,但我经历过,将这两个库结合使用会带来问题

我的问题是:try-catch对我们不起作用,因为我们需要操纵文件,在生产环境中使用beta版本可能不是一个好主意,特别是当它自2015年12月以来一直处于beta版本时

PDFsharp是否已经“死了”,因为他们已经在1.50版的测试版中试用了一年多了

还有什么我可以试试的吗

我发现这个问题(在我的例子中)特别适用于PDF文件,其中交叉引用
xref
表不是文件中的独立元素,因为它在1.4之前(包括1.4)的版本中,但已根据本规范1.5版升级为间接对象流,其
/Type
等于
/XRef

PDFsharp自己的FQA页面上说:

PDF 1.5(Adobe Reader 6.0)的某些功能尚未实现。因此,PDFsharp还不能打开所有标记为PDF 1.5或更高版本的文件(但这在我们的路线图上)

上述路线图“不是一项承诺”,截至2018年1月31日仍表示:

支持iref流-最需要的功能:处理某些文件,而其他文件仍会导致问题

除了使用他们的测试版(我承认,我个人也不想在生产环境中这样做),我没有看到很多不涉及其他库的可用选项。为了保留和重用所有现有的PDFsharp兼容代码,我的第一步(假设我不需要任何其他1.5+功能)是尝试将文件下变频为早期版本格式,然后在PDFsharp中重新打开:

PdfDocument doc;
try
{
    doc = PdfReader.Open(path);
}
catch (PdfReaderException e) when (e.Message == "Cannot handle iref streams. The current implementation of PDFsharp cannot handle this PDF feature introduced with Acrobat 6.")
{
    // TODO: try open path with another library
    // TODO: save path to temp file with version 1.4
    doc = PdfReader.Open(temp);
    // TODO: finally delete temp file
}

你解决过这个问题吗?是的。使用了测试版。感谢您的回复。最后我自己使用了iTextSharp。这两种解决方案都不是首选方案。“尝试将文件向下转换为早期版本格式,然后在PDFsharp中重新打开”-这当然不是操作数字签名PDF的选项,除非签名变得无效没有问题…这是一个有效点,但OP确实提到了操作文件的要求。我以前从未使用过数字签名PDF。假设没有下转换:一个文件可以分多个部分签名吗?原始签名对更新的文件有效吗(如果更新是附加的,并且不是由同一证书签名)?@Jono路线图和常见问题解答今天更新了-感谢反馈。版本1.50 beta 5成熟、稳定,适合生产使用。它应该使用IREF流处理大多数文件(路线图中提到的早期测试版1.50无法使用IREF流处理相当多的文件)。@Jono“原始签名对于更新的文件是否仍然有效(如果添加了更新并且没有使用相同的证书签名)?”-在对已签名文档进行增量更新时,允许进行一组特定的更改。根据签名类型,这些可能包括特定的表单填写。