2010-05-26 146 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