令牌不期望使用PDFsharp处理PDF

时间:2014-05-08 10:58:38

标签: c# pdfsharp

我有两个非常相似的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是我的行输入我不知道他们在哪里创建或者是谁。

Fail.pdf

Success.pdf

关于PDFsharp的信息非常少,请帮我解决问题。

1 个答案:

答案 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甚至更旧版本的人仍然需要修改源代码。