Ghostscript.NET проблема качества текста изображения
Я пытаюсь преобразовать документ PDF в изображения, используя ghostscript. Требуемое разрешение составляет 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);
}
2 ответа
В 1.1.9 GhostscriptRasterizer имеет -dDOINTERPOLATE
устанавливается по умолчанию. Единственными параметрами, которыми вы можете управлять через класс GhostscriptRasterizer, являются: TextAlphaBits
а также GraphicsAlphaBits
,
Я бы порекомендовал вам попробовать использовать другие классы из 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 для принятия пользовательских параметров в методе Open для выпуска Ghostscript.NET v.1.2.0.
У меня такая же проблема. Исправлено добавлением CustomSwitches
с разрешением на GhostscriptRasterizer
:
using (var rasterizer = new GhostscriptRasterizer())
{
rasterizer.CustomSwitches.Add("-r500x500");
...other code here
}