2009-05-19 6 views
15

나는 pdf에서 한 페이지의 이미지 생성에 pdf를하기 위해 ghostscript를 사용 해왔다. 이제는 pdf에서 여러 페이지를 가져 와서 긴 세로 이미지를 생성 할 수 있어야합니다.Ghostscript Multipage PDF to PNG

내가 허용하지 않는 인수가 있습니까?

지금까지 내가 고스트 스크립트를 호출 할 때 다음 인수를 사용하고 있습니다 :

string[] args ={ 
       "-q",      
       "-dQUIET",     
       "-dPARANOIDSAFER", // Run this command in safe mode 
       "-dBATCH", // Keep gs from going into interactive mode 
       "-dNOPAUSE", // Do not prompt and pause for each page 
       "-dNOPROMPT", // Disable prompts for user interaction       
       "-dFirstPage="+start, 
       "-dLastPage="+stop, 
       "-sDEVICE=png16m", 
       "-dTextAlphaBits=4", 
       "-dGraphicsAlphaBits=4", 
       "-r300x300",     

       // Set the input and output files 
       String.Format("-sOutputFile={0}", tempFile), 
       originalPdfFile 
      }; 

답변

10

페이지 당 하나의 파일을 생성 할 수 있도록 "OutputFile"매개 변수에 "% d"을 추가했습니다. 그럼 난 그냥 모든 파일을 읽고과 같이 내 C# 코드에서 함께 스티치 :

montage -mode Concatenate -tile 1x -density 144 -type Grayscale input.pdf output.png 

: 당신은 ImageMagick를 사용할 수있는 경우

var images =pdf.GetPreview(1,8); //All of the individual images read in one per file 

using (Bitmap b = new Bitmap(images[0].Width, images.Sum(img=>img.Height))) { 
    using (var g = Graphics.FromImage(b)) { 
     for (int i = 0; i < images.Count; i++) { 
      g.DrawImageUnscaled(images[i], 0, images.Take(i).Sum(img=>img.Height)); 
     } 
    } 
    //Do Stuff 
} 
+0

위의 C#처럼 높은 수준의 코드로 연결하지 않고도 스크립트/bash 수준에서 할 수 있습니까? – Supra

+0

@Supra'man gs'는'-sOutputFile ='과'% d'을 사용하여 각 페이지를 개별적으로 인쇄하는 섹션을 가지고 있습니다 – dat

1

먼저 출력 장치 옵션을 확인; 그러나 나는 그것에 대한 선택권이 있다고 생각하지 않는다.

대부분의 경우, GhostScript로 PostScript 프로그램을 작성하거나, 렌더링 된 결과 페이지를 ImageMagick 또는 유사한 것으로 바느질해야합니다.

PostScript 경로를 시도하려면 (가장 효율적일 수 있음) GhostScript 패키지에 포함 된 N-up 예제를 확인하십시오.

6

, 당신은 그것의 좋은 명령 중 하나를 사용할 수 있습니다

  • -density 144 dpi로 determins 해상도, 필요한 경우 증가, 기본은 PDF가 더있는 경우 72
  • -type Grayscale 그것을 사용하지 않습니다 색상을 사용하면 생성 된 이미지에 KB가 저장됩니다.