Morne
Morne

Reputation: 1743

Ghostscript.NET image text quality issue

I am attempting to convert a pdf document to images using ghostscript. The desired dpi is set to 72px which should be high enough for text to display clear but most of the text is illegible.

I can raise the dpi but that will cause very large image files which I would prefer not to have.

I know there are arguments for ghostscript to add anti aliasing etc (e.g. -dDOINTERPOLATE). How do I add them to the following piece of code, or is there a better way to do this?

        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);
        }

Upvotes: 4

Views: 6040

Answers (2)

Nick Suslov
Nick Suslov

Reputation: 124

Got same problem. Fixed by adding CustomSwitches with resolution to GhostscriptRasterizer:

using (var rasterizer = new GhostscriptRasterizer())
{
    rasterizer.CustomSwitches.Add("-r500x500");
    ...other code here
}

Upvotes: 0

HABJAN
HABJAN

Reputation: 9328

In 1.1.9 the GhostscriptRasterizer has -dDOINTERPOLATE set by default. The only parameters you can control via GhostscriptRasterizer class are TextAlphaBits and GraphicsAlphaBits.

I would recommend you to try to use other classes from the Ghostscript.NET if you want more control over the parameters.

Take a look at this samples: Image devices usage samples

You can add custom parameters (switches) this way:

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();

When I catch some time, I will extend GhostscriptRasterizer to accept custom parameters in the Open method for the Ghostscript.NET v.1.2.0 release.

Upvotes: 5

Related Questions