我试图在这里使用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());
}
我可能会遗失什么?
答案 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之前调用或抛出指定的错误。