簡體   English   中英

如何使用iTextSharp將PDF頁面繪制到System.Drawing.Image中?

[英]How to draw a PDF page into a System.Drawing.Image using iTextSharp?

我是使用iTextSharp的新手。 我有一個工作中的PDF文檔存儲庫,需要將其復制到圖像(每頁一張圖像)並進行處理。 這些PDF具有文本,光柵圖像和矢量圖像,並且可能包含更多內容。 我對PDF的結構不是很熟悉,我寧願在購買一些PDF包之前使用iTextSharp。

我已經完成了在C#上使用iTextSharp從每個PDF文檔中提取文本和光柵圖像的工作,但是嘗試將它們渲染為圖像會產生混合的結果,而且如果有矢量圖形,我將無能為力地輕松提取和渲染它們。

對於缺乏對PDF內部作品和iTextSharp的了解,我深表歉意,但是有一種方法可以使用iTextSharp將每個PDF頁面繪制到System.Drawing.Image對象上,就像在PDF閱讀器上一樣程序? 如果有諸如System.Drawing.Bitmap RenderPage(PdfReader reader, int iPage)類的方法,那將是很好的。

謝謝大家。 任何幫助將不勝感激。

我找到了使用另一個庫的方法。 我使用了Ghostscript.NET。

Ghostscript.NET是Ghostscript庫本機代碼的.NET包裝,因此,它可能無法在Windows RT設備上運行,因為它需要實際的本機代碼DLL才能工作。

通過NuGet軟件包安裝Ghostscript.NET的說明在此網站中:

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

安裝軟件包后,您需要Ghostscript本機代碼DLL。 要獲取它,請首先從下面的鏈接安裝Ghostscript,然后在安裝目錄中找到gsdll32.dll並將其復制到一個安全的地方:

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

這個DLL是32位的。 如果要使用64位編程,則應下載並安裝64位版本。 獲取DLL后,由於DLL是獨立的,因此可以卸載Ghostscript。

最后,我編寫了以下代碼(假設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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM