Doc doc = new Doc();
doc.Read(Server.MapPath("../mypics/sample.pdf"));
using (ReduceSizeOperation op = new ReduceSizeOperation(doc)) {
op.UnembedSimpleFonts = false; // though of course making these true...
op.UnembedComplexFonts = false; // ... would further reduce file size.
op.MonochromeImageDpi = 72;
op.GrayImageDpi = 72;
op.ColorImageDpi = 144;
op.Compact(true);
}
doc.Save(Server.MapPath("ReduceSizeOperation.pdf"));
我在ABCpdf .NET软件组件上工作,因此我的回复可能涉及基于ABCpdf的概念。这就是我所知道的。:-)
可能你可以在高分辨率版本的PDF中调整图片大小,这样可以得到更小的文件。
您可以使用Docotic.Pdf库来调整和/或重新压缩图像。有关更多详细信息,请查看我对类似问题的回答。
免责声明:我是Docotic.Pdf库的开发人员之一。
这个问题有很多种可能的解决方法,其中一种方法是从InDesign导出两次(这将允许您制作所需的两个版本的PDF)。如果这不可行(因为从InDesign导出可能需要一些时间),市场上肯定有可以执行您想要做的操作的库。以下是几种方法:
1)虽然这会让大多数Adobe员工对我开枪,但您可以重新压缩PDF文件以生成较小的文件。我不建议这样做,我提到它只是为了完整。涉及的风险包括引入质量损失、伪像等(主要是因为PostScript不支持PDF支持的某些功能,通过重新压缩,您将丢失这些功能)。
2) 使用专门用于此任务的应用程序或库。例如,callas pdfToolbox(警告,我与该公司有关联!)能够接收PDF文件并对其进行校正。这些校正包括图像降采样、转换为RGB、图像重新压缩(例如使用JPEG-2000)、丢弃PDF中不必要的数据等等。由于该应用程序具有命令行界面,因此可以轻松地集成到C#进程中。其他具有类似功能的应用程序来自Enfocus、Apago等公司。
3) 使用低级PDF库(例如Adobe PDF库,可以通过DataLogics从Adobe获得许可),并自己实现必要的更改。工作量更大,但可能更灵活。
无论您选择哪种方法,请知道您从高质量的PDF文件开始,并且您的过程应尽可能保留该质量(当然取决于您用于低分辨率PDF文件的应用程序)。确保您不会因失去正确的覆盖印刷、透明度等而遇到麻烦...