使用ImageMagick.NET将PDF转换为图像 – 如何设置DPI

我正在尝试将pdf文件转换为图像。 ImageMagick是一个很棒的工具,使用命令行工具可以得到我想要的结果。

但我需要在我的代码中执行此操作,因此添加了对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。 并且我找不到通过.Net包装器设置它的方法(96dpi或120dpi给出好的结果)。

我错过了什么,或者没有办法通过这个包装器设置它?

谢谢

我对此进行了简要介绍。

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)); + } } 

不幸的是,似乎一个错误阻止我们在您尝试执行时迭代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 ++exception。 虽然您可以在C#中捕获它,但包装器可能应该包含一个.NETexception类来表示ImageMagick错误。