4

我正在尝试使用 ghostscript 将 pdf 文档转换为图像。所需的 dpi 设置为 72 像素,该值应该足够高以使文本清晰显示,但大多数文本难以辨认。

我可以提高 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);
        }
4

2 回答 2

5

1.1.9中,GhostscriptRasterizer-dDOINTERPOLATE默认设置。您可以通过GhostscriptRasterizer类控制的唯一参数是TextAlphaBitsGraphicsAlphaBits

如果您想更好地控制参数,我建议您尝试使用Ghostscript.NET中的其他类。

看看这个示例:图像设备使用示例

您可以通过以下方式添加自定义参数(开关):

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 方法中的自定义参数。

于 2014-08-22T08:53:33.567 回答
0

遇到同样的问题。CustomSwitches通过添加分辨率来修复GhostscriptRasterizer

using (var rasterizer = new GhostscriptRasterizer())
{
    rasterizer.CustomSwitches.Add("-r500x500");
    ...other code here
}
于 2018-10-05T12:27:58.970 回答