GhostscriptRasterizer.PageCount始终返回零

时间:2019-08-29 11:39:35

标签: c# ghostscript.net

此问题已在此处讨论:GhostscriptRasterizer Objects Returns 0 as PageCount value 但是这个问题的答案并不能帮助我解决问题。

就我而言,从kat到旧版Ghostscript都无济于事。 26和25。我始终将PageCount = 0,如果版本低于27,则会出现错误“找不到本地Ghostscript库”。

private static void PdfToPng(string inputFile, string outputFileName)
            {
                var xDpi = 100; //set the x DPI
                var yDpi = 100; //set the y DPI
                var pageNumber = 1; // the pages in a PDF document

                 using (var rasterizer = new GhostscriptRasterizer()) //create an instance for GhostscriptRasterizer
                 {

                         rasterizer.Open(inputFile); //opens the PDF file for rasterizing

                        //set the output image(png's) complete path
                        var outputPNGPath = Path.Combine(outputFolder, string.Format("{0}_Page{1}.png", outputFileName,pageNumber));

                        //converts the PDF pages to png's 
                        var pdf2PNG = rasterizer.GetPage(xDpi, yDpi, pageNumber);

                        //save the png's
                        pdf2PNG.Save(outputPNGPath, ImageFormat.Png);

                        Console.WriteLine("Saved " + outputPNGPath);
                 }


            }

1 个答案:

答案 0 :(得分:1)

我在同样的问题上苦苦挣扎,最终只使用enter image description here来获取页数。以下是生产代码的片段:

using (var reader = new PdfReader(pdfFile))
{
    //  as a matter of fact we need iTextSharp PdfReader (and all of iTextSharp) only to get the page count of PDF document;
    //  unfortunately GhostScript itself doesn't know how to do it
    pageCount = reader.NumberOfPages;
}

这不是一个完美的解决方案,但这恰恰解决了我的问题。我在那儿留下了那条评论,以提醒自己,我必须以某种方式找到一种更好的方法,但是我从来没有想过要回来,因为它确实可以正常工作...

PdfReader类在iTextSharp.text.pdf命名空间中定义。

我正在使用Ghostscript.NET.GhostscriptPngDevice而不是GhostscriptRasterizer来光栅化PDF文档的特定页面。

这是我的光栅化页面并将其保存到PNG文件的方法

private static void PdfToPngWithGhostscriptPngDevice(string srcFile, int pageNo, int dpiX, int dpiY, string tgtFile)
{
    GhostscriptPngDevice dev = new GhostscriptPngDevice(GhostscriptPngDeviceType.PngGray);
    dev.GraphicsAlphaBits = GhostscriptImageDeviceAlphaBits.V_4;
    dev.TextAlphaBits = GhostscriptImageDeviceAlphaBits.V_4;
    dev.ResolutionXY = new GhostscriptImageDeviceResolution(dpiX, dpiY);
    dev.InputFiles.Add(srcFile);
    dev.Pdf.FirstPage = pageNo;
    dev.Pdf.LastPage = pageNo;
    dev.CustomSwitches.Add("-dDOINTERPOLATE");
    dev.OutputPath = tgtFile;
    dev.Process();
}

希望有帮助...