在spire.pdf组件中,我们可以通过以下两种方式来压缩pdf文档:
- 压缩文档内容
- 压缩文档中的图片
压缩文档内容
我们可以通过pdfcompressionlevel枚举来设置pdf文档的压缩级别。可选级别有best, normal, above normal等。
c#
//加载pdf文档
pdfdocument doc = new pdfdocument("test.pdf");
//禁用incremental update
doc.fileinfo.incrementalupdate = false;
//设置pdf文档的压缩级别
doc.compressionlevel = pdfcompressionlevel.best;
//保存并关闭文档
doc.savetofile("compressed.pdf");
doc.close();
vb.net
'加载pdf文档
dim doc as new pdfdocument("test.pdf")
'禁用incremental update
doc.fileinfo.incrementalupdate = false
'设置pdf文档的压缩级别
doc.compressionlevel = pdfcompressionlevel.best
'保存并关闭文档
doc.savetofile("compressed.pdf")
doc.close()
压缩文档中的图片
图片通常在pdf文档的大小中占有很大的比例,我们可以提取原文档中的图片,压缩/降低图片质量,然后用压缩后的图片替换原文档中的图片来减少pdf文档的大小。
c#
//加载pdf文档
pdfdocument doc = new pdfdocument("image.pdf");
//禁用incremental update
doc.fileinfo.incrementalupdate = false;
//遍历文档所有页面
foreach (pdfpagebase page in doc.pages)
{
//提取页面中的图片
image[] images = page.extractimages();
if (images != null && images.length > 0)
{
//遍历所有图片
for (int j = 0; j < images.length; j )
{
image image = images[j];
pdfbitmap bp = new pdfbitmap(image);
//降低图片的质量
bp.quality = 20;
//用压缩后的图片替换原文档中的图片
page.replaceimage(j, bp);
}
}
}
//保存并关闭文档
doc.savetofile("output.pdf");
doc.close();
vb.net
'加载pdf文档
dim doc as new pdfdocument("image.pdf")
'禁用incremental update
doc.fileinfo.incrementalupdate = false
'遍历文档所有页面
for each page as pdfpagebase in doc.pages
'提取页面中的图片
dim images as image() = page.extractimages()
if images isnot nothing andalso images.length > 0 then
'遍历所有图片
for j as integer = 0 to images.length - 1
dim image as image = images(j)
dim bp as new pdfbitmap(image)
'降低图片的质量
bp.quality = 20
'用压缩后的图片替换原文档中的图片
page.replaceimage(j, bp)
next
end if
next
'保存并关闭文档
doc.savetofile("output.pdf")
doc.close()