2017-02-06 3 views
0

Ghost Script를 사용하여 memoryStream을 사용하고 이미지를 반환하는 방법을 알아 내려고했습니다. 여기에 내가 rasterizer.Open 실행 코드뿐만 아니라 한번지고있어 오류는 다음과 같습니다GhostScript 오류 : 정의되지 않은 파일 이름

public static System.Drawing.Image PDFToImage(MemoryStream inputMS) 
    { 
     GhostscriptRasterizer rasterizer = null; 
     GhostscriptVersionInfo version = null; 
     if (Environment.Is64BitProcess) 
      version = new GhostscriptVersionInfo(
       new Version(0, 0, 0), @"C:\Program Files\gs\gs9.20\bin\gswin64.exe", 
       string.Empty, GhostscriptLicense.GPL); 
     else 
      version = new GhostscriptVersionInfo( 
       new Version(0, 0, 0), @"C:\Program Files (x86)\gs\gs9.20\bin\gswin32.exe", 
       string.Empty, GhostscriptLicense.GPL); 

     int dpi = 96; 
     System.Drawing.Image img = null; 

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

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

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

      } 
      rasterizer.Close(); 
     } 
     return img; 
    } 

GhostScriptConsole

답변

1

문제는 dll 대신 exe 파일을 가리키고 있다는 것입니다. 'gswin64.exe'를 'gsdll64.dll'(32 비트 verion과 동일)로 바꾸면 코드가 작동합니다.

+1

응답 Habjan을 보내 주셔서 감사합니다. 지금 PDF 파일을 이미지로 변환합니다! – Crumblenautjs

1

음, 고스트 스크립트는이 파일을 '열 수 없습니다 당신을 말하고있다/설정 : C : \ Users \ Sean.McNary \ ApexRemington \ .vs \ config \ applicationhosts.config '파일을 찾을 수 없습니다.

당신이 Ghostscript (C로 작성된 DLL) 주위에 어떤 종류의 래퍼를 사용하고 있다고 가정합니다. C#을 사용하고 있기 때문에, 거기에 무엇을 사용하고 있는지 밝히면 도움이 될 것입니다.

사용중인 모든 래퍼와 비슷하며 입력 파일 이름이 주어지기를 기대하며 단순히 Ghostscript로 전달합니다. 메모리에서 Ghostscript로 데이터를 전달하고 렌더링 된 결과를 메모리에 반환하는 것이 가능하지만 입력이 PDF 파일이면 아무 것도 저장하지 않는다는 것을 알아야합니다. Ghostscript가 전체 입력을 임시 파일을 처리하기 전에 PDF 파일을 탐색해야하므로 무작위로 액세스해야하므로 파일로 기록됩니다.

래퍼로 디버깅하고 그 동작을 확인해야합니다.

+0

안녕하세요. GhostScript.NET을 사용하고 있습니다. 달성하고자하는 것은이 PDF의 메모리 스트림을 전달하고 이미지를 반환하는 것입니다. 그런 다음이 이미지를 스트림으로 다시 변환하여 스트림 대기열에 추가하고 모든 스트림을 인쇄하려고합니다. 내가 PDF를 스트림으로 직접 변환하는 것이 아니라 stream.enqueue (PDF)를 사용하는 이유는 GDI + 일반 오류가 발생하기 때문입니다. 스트림의 원래 대기열은 이미지입니다. 당신이 이것을하는 더 좋은 방법을 안다면, 나는 그것을 위해 모든 것입니다. – Crumblenautjs

+0

작성자가 알아 차리고 언급하는 방식으로 Ghostscript.net 태그를 질문에 추가해야합니다. 저는 C# 프로그래머가 아니므로, 여러분이 정말로 이루고자 노력하고 있는지 잘 모르겠습니다. 여러분의 설명을 이해하지 못하는 것 같습니다 .- (필자의 주요 포인트는 PDF 파일을 메모리에 저장한다는 의미였습니다. Ghostscript는이 파일을 임시 파일로 작성하므로 아무 것도 저장할 수 없습니다. PDF 파일을 프린터로 인쇄 할 때 Ghostscript는 이미 mswinpr2 장치를 사용하여이를 수행 할 수 있습니다. 프린터 해상도 – KenS

+0

Ghostscript.NET이 ghostscript exe와 작동하지 않습니다. ghostscript dll을 가리켜 야합니다. – HABJAN