确定一个PDF页面上的最大分辨率(DPI)(Determine the max resolution

2019-09-26 16:39发布

我使用GhostScript.Net发送页面图像到打印机之前栅格化PDF页面图像。 我这样做,这样我可以随时向光栅化300dpi的。 这让我在PDF(主要是扫描的PDF文件)打印PDF在合理时间内,无论任何图像的大小。

但是,它给我的印象是,在某些情况下,不会有必要光栅高达300dpi的。 它可能会光栅化,以200dpi的,甚至100dpi的根据页面的内容。

有没有人试图确定最大DPI的PDF页面的内容? 也许使用iTextSharp的?

我当前的代码是这样的:

        var dpiList = new List<int> {50, 100, 150, 200, 250, 300, 350, 400, 450, 500};

        string inputPdfPath = @"C:\10page.pdf";
        string outputPath = @"C:\Print\";

        var lastInstalledVersion =
            GhostscriptVersionInfo.GetLastInstalledVersion(
                    GhostscriptLicense.GPL | GhostscriptLicense.AFPL,
                    GhostscriptLicense.GPL);

        var rasterizer = new GhostscriptRasterizer();

        rasterizer.Open(inputPdfPath, lastInstalledVersion, true);

        var imageFiles = new List<string>();

        for (int pageNumber = 1; pageNumber <= 10; pageNumber++)
        {
            foreach (var dpi in dpiList)
            {
                string pageFilePath = System.IO.Path.Combine(outputPath,
                    string.Format("{0}-{1}-{2}.png", pageNumber, Guid.NewGuid().ToString("N").Substring(0, 8), dpi));

                System.Drawing.Image img = rasterizer.GetPage(dpi, dpi, pageNumber);
                img.Save(pageFilePath, ImageFormat.Png);
                imageFiles.Add(pageFilePath);

                Console.WriteLine(pageFilePath);
            }
        }

        var imageCount = 0;

        var pd = new PrintDocument();
        pd.PrintPage += delegate(object o, PrintPageEventArgs args)
        {
            var i = System.Drawing.Image.FromFile(imageFiles[imageCount]);

            var pageBounds = args.PageBounds;
            var margin = 48;

            var imageBounds = new System.Drawing.Rectangle
            {
                Height = pageBounds.Height - margin,
                Width = pageBounds.Width - margin,
                Location = new System.Drawing.Point(margin / 2, margin / 2)
            };

            args.Graphics.DrawImage(i, imageBounds);
            imageCount++;
        };

        foreach (var imagefile in imageFiles)
        {
            pd.Print();
        }

Answer 1:

PDF页面没有解决。 在它们的图像可以被认为具有的分辨率,这是通过在页上的图像的宽度给定的,由在x方向上的图像样本的数目分割,图像的页上的高度由数除以在y方向上的图像样本。

因此,这让计算页面上的图像的宽度和高度。 这是通过在图像矩阵给出,由当前变换矩阵修改。 因此,为了制定出宽度和高度页面上,你需要解释的内容流达在图像渲染点,跟踪图形状态CTM。

对于一般的PDF文件,要知道这一点的唯一方法是使用PDF解释。 在整个页面的内容是一个单一的形象,你可以赌博,没有结垢发生,简单地除以图像宽度介质宽度,并通过图像高度的媒体的高度给予x和y决议严格限制的情况下, 。

但是这绝对不会在一般的情况下工作。



文章来源: Determine the max resolution (DPI) on a PDF page