如何使用iTextSharp将PDF页面绘制到System.Drawing.Image中

本文关键字:System Drawing Image 绘制 iTextSharp 何使用 PDF | 更新日期: 2023-09-27 18:15:25

我对使用iTextSharp有点陌生。我在工作中有一个PDF文档存储库,我需要将其复制成图像(每页一个图像)并处理它们。这些PDF有文本、光栅图像和矢量图像,可能还有更多的东西在里面。我不是很熟悉PDF的结构,我宁愿使用iTextSharp,而不是不得不购买一些PDF软件包。

我已经在c#上使用iTextSharp从每个PDF文档中提取文本和光栅图像,但是试图将它们渲染成图像会产生混合结果,如果有矢量图形,我无法轻松地提取和渲染它们。

我很抱歉我对PDF内部工作和iTextSharp缺乏了解,但是是否有一种方法,使用iTextSharp,以相同的方式将每个PDF页面绘制到System.Drawing.Image对象中,就像它们出现在PDF阅读器程序上一样?如果有System.Drawing.Bitmap RenderPage(PdfReader reader, int iPage)这样的方法就好了。

谢谢大家。

如何使用iTextSharp将PDF页面绘制到System.Drawing.Image中

我找到了使用另一个库的方法。我用的是Ghostscript.NET

内容。.NET是Ghostscript库的本机代码的。NET包装器,因此,它可能无法在Windows RT设备上工作,因为它需要实际的本机代码DLL才能工作。

安装Ghostscript的说明. NET的NuGet包在这个网站:

https://www.nuget.org/packages/Ghostscript.NET/

一旦包被安装,你需要Ghostscript本地代码DLL。要获得它,请先从下面的链接安装Ghostscript,然后在安装目录中找到gsdll32.dll并将其复制到安全的地方:

http://www.ghostscript.com/download/gsdnld.html

这个DLL是32位的。如果您正在为64位编程,则应该下载并安装64位版本。在获得DLL后,您可以卸载Ghostscript,因为DLL是独立的。

最后,我编写了以下代码(假设Ghostscript原生DLL与应用程序在相同的路径上)来渲染PDF的页面到System.Drawing.Images:

string sDLLPath = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath),
    "gsdll32.dll");
GhostscriptVersionInfo gvi = new GhostscriptVersionInfo(sDLLPath);
using (GhostscriptRasterizer rasterizer = new GhostscriptRasterizer())
{
    rasterizer.Open("sample.pdf", gvi, false);
    int dpi_x = 96;
    int dpi_y = 96;
    for (int i = 1; i <= rasterizer.PageCount; i++)
    {
        Image img = rasterizer.GetPage(dpi_x, dpi_y, i);
        // System.Drawing.Image obtained. Now it can be used at will.
        // Simply save it to storage as an example.
        img.Save(Path.Combine("C:''Temp", "page_" + i + ".png")),
            System.Drawing.Imaging.ImageFormat.Png);
    }
}