我有两个非常相似的pdf文件。但是,如果我尝试处理第一个,则会引发“未预期到令牌'373071'”异常,但是对于其他一个,我可以完全执行代码。下面是我的代码
class Program
{
static void Main(string[] args)
{
int bufferSize = 20480;
try
{
byte[] byteBuffer = new byte[bufferSize];
byteBuffer = File.ReadAllBytes(@"..\..\Fail.pdf");
MemoryStream coverSheetContent = new MemoryStream();
coverSheetContent.Write(byteBuffer, 0, byteBuffer.Length);
int t = PdfReader.TestPdfFile(coverSheetContent);
PdfReader.Open(coverSheetContent);
}
catch (Exception ex)
{
}
}
}
我还添加了这些PDF文件。好吧,这些PDF对我来说是行输入,我不知道它们在哪里创建或由谁创建。
Fail.pdf
Success.pdf
有关PDFsharp的信息很少,请帮助我解决问题。
最佳答案
用于创建PDF文件的SAP工具在“ %% EOF”标记之后添加了许多填充字节。最高版本为1.32的PDFsharp期望文件的后130个字节内的%% EOF标记。
您可以在类ReadTrailer()
中修改方法Parser
以搜索更大的区域。
可以在这里找到搜索完整文件的实现:
http://forum.pdfsharp.net/viewtopic.php?p=583#p583
顺便说一句:您可以这样打开PDF:
var doc = PdfReader.Open(@"..\..\fail.pdf");
无需分配永远不会使用的缓冲区,不需要流。
更新:自2014年以来,如果在文件末尾附近找不到“ %% EOF”标记,PDFsharp将搜索整个PDF文件。因此,如果您使用的是PDFsharp 1.50或更高版本,则不再需要下载和修改代码。那些仍然使用PDFsharp 1.32或更旧版本的人仍然必须修改源代码。
关于c# - token 不希望使用PDFsharp处理PDF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23539812/