我在网上发现了很多样本,其中一个:
var oldFile = @"C:\Users\XXX\Downloads\3921B2014901_2014_7346.pdf";
var newFile = @"C:\Users\XXX\Downloads\new\3921B2014901_2014_7346.pdf";
RandomAccessFileOrArray raf = new RandomAccessFileOrArray(oldFile);
PdfReader reader = new PdfReader(raf, null);
using (FileStream fs = new FileStream(newFile, FileMode.Create))
{
PdfStamper stamper = new PdfStamper(reader, fs, PdfWriter.VERSION_1_5);
PdfWriter writer = stamper.Writer;
writer.SetPdfVersion(PdfWriter.PDF_VERSION_1_5);
writer.CompressionLevel = PdfStream.BEST_COMPRESSION;
for (int i = 1; i <= reader.NumberOfPages; i++)
{
reader.SetPageContent(i, reader.GetPageContent(i), PdfStream.BEST_COMPRESSION, true);
}
stamper.SetFullCompression();
stamper.Close();
}
reader.Close();
raf.Close();
原始文件是2.75Mb,生成的新文件是2.77Mb。为什么呢?
我尝试了在线转换器,他们将同一文件减少到500Kb。我怎样才能达到同样的效果?
答案 0 :(得分:0)
protected void btnCompressPdf_click(object sender, EventArgs e)
{
string[] filename= Directory.GetFiles(input.Text, ".jpg");
string outputPath = MyDirectory;
if (!System.IO.Directory.Exists(MyDirectory))
System.IO.Directory.CreateDirectory(MyDirectory);
foreach (string filename in files)
{
ImageCollection images = new ImageCollection();
images.Add(filename);
String pdfName = Path.GetFileNameWithoutExtension(file);
for (int pageNumber = 0; pageNumber < images.Count; pageNumber++)
{
images[pageNumber].Save(MyDirectory + "\\" + pageNumber.ToString() + ".jpg");
}
string[] files1 = System.IO.Directory.GetFiles(MyDirectory, ".jpg");
iTextSharp.text.Document myDocument = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4, 0, 0, 0, 0);
//PdfWriter.GetInstance(myDocument, new System.IO.FileStream(uxOutput.Text + "\\" + pdfName + ".pdf", System.IO.FileMode.Create));
PdfWriter writer = PdfWriter.GetInstance(myDocument, new System.IO.FileStream(Output.Text + "\\" + pdfName + ".pdf", System.IO.FileMode.Create));
writer.SetPdfVersion(PdfWriter.PDF_VERSION_1_5);
writer.CompressionLevel = PdfStream.BEST_COMPRESSION;
writer.SetFullCompression();
for (int i = 0; i <= files1.Length - 1; i++)
{
if (myDocument != null)
{
myDocument.Open();
AddImageToPDF(myDocument, MyDirectory + "\\" + (i).ToString() + ".jpg");
}
}
myDocument.Close();
myDocument = null;
System.IO.File.Delete(MyDirectory + "\\" + ".jpg");
}
}
答案 1 :(得分:0)
我看到您正在使用文本,您总是可以向他们的支持部门询问为什么您没有得到预期的结果。以下是针对优化的更一般的答案,该答案基于我初次阅读时认为更普遍的问题。
我工作的公司在PDF library或standalone产品中提供了API解决方案来进行PDF优化。如果您可以使用在线转换器实现较小的文件大小,那么请放心,您可以使用商业库来实现这种大小(如果不是较小的话)。
并非所有PDF软件都是平等创建的,也不是所有PDF。一些产品声称可以压缩,这使大多数用户期望尺寸大大减小。但是在许多情况下,压缩是使用对象流实现的,这可以帮助实现压缩效果,但是通常不会通过其他压缩功能将其本身大大减少典型的PDF。在某些情况下,由于不同的原因,保存PDF可能会稍微增加文件大小。
但是,可以对许多重要领域进行优化,以减小PDF文件的大小。这些包括字体,图像和丢弃未使用的信息。因此,如果无法缩小PDF,就没有一个千篇一律的答案。