使用PDF压缩重建失败

时间:2014-10-08 11:48:08

标签: itextsharp

我试图在这里使用bt kuujinbo描述的方法。 PDF Compression with iTextSharp

这是我的代码,导致此错误: “重建失败:未找到预告片。;原始消息:未找到PDF startxref。”

            PdfReader reader = new PdfReader(output.ToArray());
            ReduceResolution(reader, 9);

            // Save altered PDF. then you can pass the btye array to a database, etc
            using (MemoryStream ms = new MemoryStream())
            {
                using (PdfStamper stamper = new PdfStamper(reader, ms))
                {
                }

                document.Close();
                Response.ContentType = "application/pdf";
                Response.AddHeader("Content-Disposition", string.Format("attachment;filename=Produktark-{0}.pdf", myItem.Key));
                Response.BinaryWrite(output.ToArray());
            }

我可能会遗失什么?

2 个答案:

答案 0 :(得分:3)

说明重建失败的异常:......;原始消息:... 仅在PdfReader初始化期间由iText抛出,即在您的情况下在行中

PdfReader reader = new PdfReader(output.ToArray());

并且它表示读取的数据,即output.ToArray(),不构成有效的PDF。您也应该将output.ToArray()写入某个文件,并进行检查。

如果你想知道为什么消息表明某些 重建 失败 ...你实际上没有得到初始错误但是后续的一个,PDF摘要代码有多个这样的块

try {
    read some part of the PDF;
} catch(Exception) {
    try {
        try to repair that part of the PDF and read it;
    } catch(Exception) {
        throw "Rebuild failed: ...; Original message: ...";
    }
}

在您的情况下,感兴趣的部分是交叉引用表/流,问题是 PDF startxref (包含文档中交叉引用的偏移的语句)是找不到

答案 1 :(得分:0)

当我收到此错误消息时,是由于未关闭我用来编辑表单字段的PDFStamper而导致的。

Stamper.Close();

必须在关闭PDF之前调用或抛出指定的错误。

相关问题