2009-05-19 12 views
15

私はpdfから1ページの画像生成にpdfを使うためにghostscriptを使用してきました。今私はpdfから複数のページを引っ張り、長い垂直の画像を生成する必要があります。Ghostscript Multipage PDFからPNG

私にはこれが許されていないという議論がありますか?

は、これまでのところ、私はghostscriptのを呼び出すときは、次の引数を使用しています:

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"を追加して、ページごとに1つのファイルが生成されるようにしました。そして、私は、すべてのファイルを読み込み、そのように私のC#コードでそれらを一緒にステッチ:

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アップの例を確認してください。

6

あなたがImageMagickのを使用することができる場合、あなたはその良いのいずれかのコマンドを使用することができます

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

DPIで

  • -density 144 determins解像度、必要であれば、デフォルトは72
  • -type GrayscaleあなたのPDFがノーを持っている場合は、それを使用され、それを増やしますいくつかのKBを結果イメージに保存します
関連する問題