2010-05-26 6 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 LOOKS LIKE CRAP 렌더링 된 이미지를 거의 읽을 수 없습니다. 내가 깨달은 문제는 ImageMagick의 기본 72 DPI를 사용한다는 것입니다. 그리고 .Net 래퍼를 통해 (96dpi 또는 120dpi로 좋은 결과를 얻을 수있는) 설정 방법을 찾을 수 없습니다.

내가 누락되었거나 실제로이 래퍼를 통해 설정할 방법이 없습니까?

감사합니다.

+0

결국 내가 O2solutions의 pdfview4net 사용 -가 http에서 발표 한이 찾고에 대한 빠르고 저렴한 –

+0

http://www.o2sol.com/pdfview4net/overview.htm –

답변

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 오류를 나타 내기 위해 .NET 예외 클래스를 포함해야합니다.

+0

감사합니다, 는 소스를 컴파일하려고 : // www가 .codeproject.com/KB/dotnet/ImageMagick_in_VBNET.aspx 게시물 (http://imagemagick.codeplex.com/에서 소스를 찾을 수 없습니다.) 아마도 누락 된 것이 있습니다. 프레임 워크 4.0으로 작업 중이며 원본 래퍼는 2.0 용으로 작성된 것입니다. 컴파일 된 이후에 오류가 발생했습니다.하지만 런타임 오류가 발생했습니다. 다른 솔루션을 찾았습니다 (좋은 해결책을 찾지 마세요) 2 개 1. Aspose.pdf.kit 매우 매우 느리고 값 비쌉니다. 2. O2 솔루션 pdfview4net - 빠르고 유용합니다 :-) –

+0

Codeplex에서 ImageMagick.NET의 소스 타볼을 찾을 수 없습니다. 소스 코드에서 코드를 체크 아웃해야했습니다 ... 여전히 대안을 찾고있는 경우 [Ghostscript] (http://ghostscript.com/) 또는 [Poppler] (http : //)를 사용하는 것이 좋습니다. poppler.freedesktop.org/) 라이브러리에 직접. 이 두 가지 오픈 소스는 PDF 렌더링 라이브러리입니다. 좋은 .NET 래퍼를 사용할 수 있는지 확실하지 않습니다. –