2010-05-26 147 views
3

我試圖將PDF文件轉換爲圖像。 ImageMagick是一款出色的工具,使用命令行工具可以獲得理想的效果。使用ImageMagick.NET將PDF轉換爲圖像 - 如何設置DPI

,但我必須這樣做在我的代碼, 於是增加了一個參考http://imagemagick.codeplex.com/ 而下面的代碼示例呈現PDF的每一頁的圖像:

MagickNet.InitializeMagick(); 
using (ImageList im = new ImageList()) 
{ 
    im.ReadImages(@"E:\Test\" + fileName + ".pdf"); 
    int count = 0; 
    foreach (Image image in im) 
    { 
     image.Quality = 100; 
     image.CompressType = mageMagickNET.CompressionType.LosslessJPEGCompression; 
     image.Write(@"E:\Test\" + fileName + "-" + count.ToString() + ".jpg"); 
     ++count; 
    } 
} 

問題:IT看起來像CRAP 渲染的圖像幾乎不可讀。 我意識到的問題是它使用ImageMagick的默認72 DPI。 ,我無法找到一種方法來設置它(96dpi或120dpi提供良好的結果)通過.net包裝。

我錯過了什麼,或者真的沒有辦法通過這個包裝來設置它?

謝謝

+0

最終我用O2solutions pdfview4net - 快速且經濟實惠 – 2012-12-30 17:25:36

+0

http://www.o2sol.com/pdfview4net/overview.htm – 2012-12-31 08:32:11

回答

1

我對此進行了簡單的介紹。

Image.Resolution屬性可用於設置PDF呈現分辨率,但該屬性未由ImageMagick.NET包裝器公開。

將缺少的屬性添加到Image類非常簡單。

Index: ImageMagickNET/Image.h 
=================================================================== 
--- ImageMagickNET/Image.h (revision 59374) 
+++ ImageMagickNET/Image.h (working copy) 
@@ -532,6 +532,13 @@ 
     } 


+  // Vertical and horizontal resolution in pixels of the image. 
+  property Geometry^ Density 
+  { 
+   void set(Geometry^); 
+  } 
+ 
+ 
     //---------------------------------------------------------------- 
     // IO 
     //---------------------------------------------------------------- 
Index: ImageMagickNET/Image.cpp 
=================================================================== 
--- ImageMagickNET/Image.cpp (revision 59374) 
+++ ImageMagickNET/Image.cpp (working copy) 
@@ -1099,5 +1099,9 @@ 
     return bitmap; 
    } 

+ void Image::Density::set(Geometry^ density_) 
+ { 
+  image->density(*(density_->geometry)); 
+ } 
} 

遺憾的是,似乎a bug阻止我們設置渲染質量,同時通過PDF頁面迭代,你正在試圖做的事。

另一種選擇是單獨打開每個頁面:

Image image = new Image(); 
image.Density = new Geometry("1000"); // 1000 dpi 
image.Read(@"C:\u\test.pdf[2]");  // Open the 3rd page, index 0 is the first 

如果頁碼超出範圍,你得到一個原料 C++異常。雖然you can catch it in C#包裝應該可能包含用於表示ImageMagick錯誤的異常類。

+0

感謝您看這個, 試圖編譯源代碼,如在HTTP發佈:// WWW (在http://imagemagick.codeplex.com/找不到源代碼...可能丟失了一些東西) 我正在使用框架4.0,而原始版本包裝是2.0寫的,似乎我做了錯誤,因爲它編譯,但有一個運行時錯誤ouch .. 所以尋找另一種解決方案(不介意支付一個很好的解決方案) 找到兩個 1。 Aspose.pdf.kit非常非常緩慢和昂貴 2. O2solutions pdfview4net - 快速和可避免:-) – 2010-05-29 10:48:07

+0

無法在Codeplex上找到ImageMagick.NET的源代碼壓縮包。我不得不從源代碼控制中檢出代碼......如果你仍然在尋找替代品,我建議你考慮使用[Ghostscript](http://ghostscript.com/)或[Poppler](http:// poppler.freedesktop.org/)庫直接。這是兩個流行的開源PDF渲染庫。不知道.NET包裝器是否可用。 – 2010-05-29 15:34:10