我有两个非常相似的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/

10-09 19:59