【问题标题】:Token not expected processing PDF using PDFsharp令牌不会使用 PDFsharp 处理 PDF
【发布时间】:2014-05-08 10:58:38
【问题描述】:

我有两个非常相似的 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 的信息非常少,请帮我解决问题。

【问题讨论】:

    标签: c# pdfsharp


    【解决方案1】:

    用于创建 PDF 文件的 SAP 工具在“%%EOF”标记之后添加了许多填充字节。 PDFsharp 到 1.32 版需要 %%EOF 标记在文件的尾随 130 字节内。

    您可以修改Parser类中的方法ReadTrailer()来搜索更大的区域。

    可在此处找到搜索完整文件的实现:
    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 甚至更老版本的人,还是要修改源代码。

    【讨论】:

    • 如何解决这个问题?
    • 修改方法ReadTrailer()如论坛上的帖子所示。这需要下载PDFsharp的源码包。
    • 我在使用 PdfSharp 1.50.4740 时仍然遇到此错误,并且在 EOF 标记之后没有任何内容。
    • @dadde startxref 应该接近%%EOF。您仍然会收到损坏的 PDF 文件的错误。在 Adob​​e Reader 中使用 Save as... 后,该 PDF 是否有效?
    • @IlikedtheoldStackOverflow 这是我在 notepad++ 中打开的 pdf 文件的结尾: ... endstream endobj startxref 477872 %%EOF 当我用 HEX 查看器查看文件时,EOF 之后什么都没有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 2022-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多