2011-12-29 3 views
2

C로 PDF를 JPEG (또는 PNG ...와 같은 다른 이미지 형식)로 변환해야합니다.GhostScript를 사용하여 이미지로 PDF. 이미지 파일을 만들 수 없습니다.

PDF 경로가 있으며 다음과 같은 MemoryStream을 얻고 싶습니다. 이미지.

나는 Ghostscript와 GhostscriptSharp을 사용하여 관리했지만 실제 이미지 파일을 만든 다음이 파일을 읽고 MemoryStream을 만들어야합니다.

이 단계없이 수행 할 수 있습니까?

감사

답변

3

네,하지만 당신은 고스트 스크립트 DLL을 (당신은 C#을 언급 이후 Windows를 있으리라 믿고있어)를 사용하여 고스트에 직접 인터페이스해야합니다.

가장 간단한 해결책은 메모리 내 비트 맵을 부모 응용 프로그램으로 다시 보내는 디스플레이 장치를 사용하는 것입니다. 그러면 기본 GS 응용 프로그램이 창과 장치 컨텍스트를 만들고 비트 맵을 그립니다.

GS 어플리케이션을 시작점으로 사용하여 Ghostscript 바이너리를 다시 컴파일 할 필요가없는 자체 장치를 만들 필요가 없습니다.

0

예 Ghostscript.Net 래스터 화 기능에서 메모리 스트림을 만들 수 있습니다. 다음은 asp.net 사이트에서 사용한 예입니다.

void PDFToImage(MemoryStream inputMS, int dpi) 
    { 
     GhostscriptRasterizer rasterizer = null; 
     GhostscriptVersionInfo version = new GhostscriptVersionInfo(
                   new Version(0, 0, 0), @"C:\PathToDll\gsdll32.dll", 
                   string.Empty, GhostscriptLicense.GPL); 

     using (rasterizer = new GhostscriptRasterizer()) 
     { 
      rasterizer.Open(inputMS, version, false); 

      for (int i = 1; i <= rasterizer.PageCount; i++) 
      { 

       using (MemoryStream ms = new MemoryStream()) 
       { 
        DrawImage img = rasterizer.GetPage(dpi, dpi, i); 
        img.Save(ms, ImageFormat.Jpeg); 
        ms.Close(); 

        AspImage newPage = new AspImage(); 
        newPage.ImageUrl = "data:image/png;base64," + Convert.ToBase64String((byte[])ms.ToArray()); 

        Document1Image.Controls.Add(newPage); 
       } 

      } 

      rasterizer.Close(); 
     } 
    }