以下代码首先创建一个.pdf
,这是正常的,看起来很完美,我已从该网站上的其他帖子中获取了其余代码(进行压缩)。问题是compressed.pdf
文件是1kb,而acrobat说文件已损坏且无法修复。我之前从未制作过pdf压缩器。请查看我的代码,如果有可能提供一些更正以使其正常工作。
private void btnEndScan_Click(object sender, EventArgs e)
{
Document doc1 = new Document(PageSize.A4, 0, 0, 0, 0);
string filename = "Prot_" + label.Text + ".pdf";
try
{
PdfWriter.GetInstance(doc1, new FileStream("C:/" + filename, FileMode.Create));
doc1.Open();
for (int i = 0; i < imageArray.Length; i++)
{
iTextSharp.text.Image pic = iTextSharp.text.Image.GetInstance(imageArray[i], System.Drawing.Imaging.ImageFormat.Bmp);
pic.ScalePercent(36f);
doc1.Add(pic);
}
}
catch (Exception ex)
{
MessageBox.Show("Error creating pdf file" + ex);
}
finally
{
doc1.Close();
PdfReader reader = new PdfReader("C:/" + filename);
string filepath = "C:/compressed/" + filename;
using (MemoryStream ms = new MemoryStream())
{
PdfStamper stamper = new PdfStamper(reader, ms, PdfWriter.VERSION_1_5);
PdfWriter writer = stamper.Writer;
writer.CompressionLevel = PdfStream.BEST_COMPRESSION;
reader.RemoveFields();
reader.RemoveUnusedObjects();
stamper.Reader.RemoveUnusedObjects();
stamper.SetFullCompression();
stamper.Writer.SetFullCompression();
byte[] compressed = ms.ToArray();
reader.Close();
stamper.Close();
using (FileStream fs = File.Create("C:/compressed/compressed.pdf"))
{
fs.Write(compressed, 0, (int)compressed.Length);
fs.Close();
}
}
}
}
答案 0 :(得分:1)
你的文件太短了。
看看以下几行:
byte[] compressed = ms.ToArray();
reader.Close();
stamper.Close();
他们应该这样订购:
stamper.Close();
reader.Close();
byte[] compressed = ms.ToArray();
代码中的顺序错误,因为:
reader
之后关闭stamper
,因为stamper
可能需要在关闭时访问reader
。stamper
时完成。在您创建byte[]
时,并非所有PDF数据都已写入。该文件不完整。由于byte[]
不完整,您执行此操作时会删除文件的大部分内容:
fs.Write(compressed, 0, (int)compressed.Length);
compressed.Length
的值太短。您的实际文件具有更大的文件大小。