我有两个非常相似的pdf文件。但是,如果我尝试处理第一个,它会抛出“Token'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是我的行输入我不知道他们在哪里创建或者是谁。
关于PDFsharp的信息非常少,请帮我解决问题。
答案 0 :(得分:4)
用于创建PDF文件的SAP工具在“%% EOF”标记之后添加了许多填充字节。 PDFsharp版本1.32期望%% EOF标记位于文件的尾随130字节内。
您可以修改班级ReadTrailer()
中的方法Parser
以搜索更大的区域。
可以在此处找到搜索完整文件的实现:
http://forum.pdfsharp.net/viewtopic.php?p=583#p583
BTW:您可以这样打开PDF:
var doc = PdfReader.Open(@"..\..\fail.pdf");
无需分配永远不会使用的缓冲区,也不需要流。
更新:自2014年起,如果在文件末尾附近找不到“%% EOF”标记,则PDFsharp会搜索完整的PDF文件。因此,如果您使用PDFsharp 1.50或更新版本,则不再需要下载和修改代码。那些仍然使用PDFsharp 1.32甚至更旧版本的人仍然需要修改源代码。