Contents

Convert PDF To Image-ImageMagick

Convert PDF To Image-ImageMagick

PDF檔案轉存為圖片,目前Google搜尋上,此功能絕大多數的文章停留在 .NET Framework,經過數天的嘗試,好不容易才找到適用於 .NET Core 的,趁記憶猶新趕快記錄下來。

ImageMagick 是一款開放原始碼的圖片處理套件,透過 Ghostscript ,也可以將 PDF 轉換為圖片,且使用上十分簡單。

環境

  • 電腦需安裝 Ghostscript
  • Nuget > Magick.NET.Core
  • Nuget > Magick.NET-Q16-AnyCPU

實作

  1. 安裝 Ghostscript

    Magick.NET 轉換 PDF 需要先安裝 Ghostscript

  2. 安裝 Magick.NET.Core 及 執行 Magick.NET-Q16-AnyCPU

    /static/Convert_PDF_To_Image_ImageMagick_83262404c2444fc1996aa563df3c0a37/2020-11-30_18-03-19.png

    名稱中 Q8、Q16 代表像素,Q8的版本是為 8bit,而Q16是為16bit。Q16 相當於不損失精度的情況下讀取或寫入16bit圖像,但所需資源是Q8版本的兩倍。另外還有 Q16-HDRI ,當然是越高圖片品質越好,但也越耗效能。

  3. 讀取PDF檔並寫入圖片

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    void Main()
    {
    	using var images = new MagickImageCollection(@"C:\temp\test.pdf");
    
    	// Create new image that appends all the pages horizontally
    	using var horizontal = images.AppendHorizontally();
    	horizontal.Write(@"C:\temp\test_horizontal.png");
    
    	// Create new image that appends all the pages vertically
    	using var vertical = images.AppendVertically();
    	vertical.Write(@"C:\temp\test_vertical.png");
    }
    

補充

Asp.net Core 讀取 PDF 轉換為圖片下載

1
2
3
4
5
6
7
8
using var images = new MagickImageCollection();
images.Read(pdfile);

using var vertical = images.AppendVertically();
using var stream = new MemoryStream();
vertical.Write(stream, format: MagickFormat.Jpg);

return File(stream.ToArray(), "image/jpeg", $"test.jpg");

參考

ImageMagick GitHub

https://github.com/dlemstra/Magick.NET

Ghostscript

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

Ghostscript ConvertPDF

https://github.com/dlemstra/Magick.NET/blob/master/docs/ConvertPDF.md