我正在尝试使用ghostscript将pdf文档转换为图像。所需的dpi设置为72px,该值应足够高,以使文本显示清晰但大部分文本难以辨认。
我可以提高dpi,但这会导致非常大的图像文件,我不希望这样。
我知道ghostscript有添加抗锯齿等的参数(例如-dDOINTERPOLATE)。如何将它们添加到下面的代码中,还是有更好的方法来执行此操作?
int desired_x_dpi = 72;
int desired_y_dpi = 72;
GhostscriptRasterizer _rasterizer = new GhostscriptRasterizer();
_rasterizer.Open(inputPdfPath, localDllInfo, false);
for (int pageNumber = 1; pageNumber <= _rasterizer.PageCount; pageNumber++)
{
string pageFilePath = Path.Combine(outputPath, "Page-" + pageNumber.ToString() + ".png");
Image img = _rasterizer.GetPage(desired_x_dpi, desired_y_dpi, pageNumber);
img.Save(pageFilePath, ImageFormat.Png);
}
答案 0 :(得分:2)
在 1.1.9 中, GhostscriptRasterizer 默认设置为-dDOINTERPOLATE
。您可以通过 GhostscriptRasterizer 类控制的唯一参数是TextAlphaBits
和GraphicsAlphaBits
。
如果您想要更多地控制参数,我建议您尝试使用Ghostscript.NET中的其他类。
看看这些样本:Image devices usage samples
您可以通过以下方式添加自定义参数(开关):
GhostscriptPngDevice dev = new GhostscriptPngDevice(GhostscriptPngDeviceType.Png16m);
dev.GraphicsAlphaBits = GhostscriptImageDeviceAlphaBits.V_4;
dev.TextAlphaBits = GhostscriptImageDeviceAlphaBits.V_4;
dev.ResolutionXY = new GhostscriptImageDeviceResolution(96, 96);
dev.InputFiles.Add(@"E:\gss_test\indispensable.pdf");
dev.Pdf.FirstPage = 2;
dev.Pdf.LastPage = 4;
dev.CustomSwitches.Add("-dDOINTERPOLATE"); // custom parameter
dev.OutputPath = @"E:\gss_test\output\indispensable_color_page_%03d.png";
dev.Process();
当我抓住一些时间时,我将扩展GhostscriptRasterizer以接受Ghostscript.NET v.1.2.0版本的Open方法中的自定义参数。
答案 1 :(得分:0)
有同样的问题。通过将具有分辨率的CustomSwitches
添加到GhostscriptRasterizer
来解决:
using (var rasterizer = new GhostscriptRasterizer())
{
rasterizer.CustomSwitches.Add("-r500x500");
...other code here
}