10

私は次のように順番に名前が付けられた一連のPDFを持っています:

  • 01_foo.pdf
  • 02_bar.pdf
  • 03_baz.pdf

Rubyを使用して、これらを順番に保ちながら1つの大きなPDFに結合することは可能ですか?私は仕事をするために必要な宝石をインストールすることを気にしません。

これがRubyで不可能な場合、別の言語はどうですか?可能であれば、商用コンポーネントはありません。


更新: Jason Navarreteの提案は、完璧な解決策につながります。

結合する必要のあるPDFファイルをpdftkと一緒にディレクトリに配置し(またはpdftkがPATHにあることを確認して)、次のスクリプトを実行します。

pdfs = Dir["[0-9][0-9]_*"].sort.join(" ")
`pdftk #{pdfs} output combined.pdf`

または、コマンドラインからワンライナーとして実行することもできます。

ruby -e '`pdftk #{Dir["[0-9][0-9]_*"].sort.join(" ")} output combined.pdf`'

素晴らしい提案ジェイソン、完璧な解決策、ありがとう。彼に賛成票を投じてください。

4

7 に答える 7

14

Ruby-Talkの投稿では、pdftkツールキットを使用して PDF をマージすることを提案しています。

pdftkを外部プロセスとして 呼び出してマージを処理させるのは比較的簡単です。PDF::Writerはやり過ぎかもしれません。達成しようとしているのは単純な追加だけだからです。

于 2008-09-17T17:28:59.197 に答える
2

pdftk ソリューションを試してみましたが、SnowLeopard と Tiger の両方で問題が発生しました。Tiger にインストールすると、実際にシステムに大混乱が生じ、スクリプト/サーバーを実行できなくなりました。幸いなことに、これは Web 開発から引退したマシンです。

その後、別のオプションが見つかりました: - joinPDF。完全に簡単で迅速なインストールで、完璧に機能します。

また、GhostScript を試してみましたが、惨めに失敗しました (フォントを読み取ることができず、画像のみの PDF になってしまいました)。

しかし、この問題の解決策を探している場合は、joinPDF を試してみてください。

于 2009-09-17T03:11:35.193 に答える
2

プラットフォームにゴーストスクリプトがある場合は、シェルアウトして次のコマンドを実行します。

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=finished.pdf <ソース PDF ファイル>

于 2009-03-14T20:22:29.137 に答える
2

これは、PostScript に変換して元に戻すことで実行できます。PostScript ファイルは簡単に連結できます。たとえば、Ghostscript ツール ps2pdf および pdf2ps を使用する Bash スクリプトを次に示します。

#!/ビン/バッシュ
01_foo.pdf 02_bar.pdf 03_baz.pdf のファイルの場合。行う
    pdf2ps $file - >> temp.ps
終わり

ps2pdf temp.ps output.pdf
rm temp.ps

私は Ruby に詳しくありませんが、ほぼ確実にsystem()、特定のコマンド ラインを呼び出す関数 (呼び出される可能性があります (推測)) が存在します。

于 2008-09-17T17:23:16.120 に答える
0

Rubyにはそのためのツールがないと思います。ImageMagick と Cairo を確認してください。ImageMagick を使用して複数の写真/ドキュメントを結合できますが、PDF の場合はわかりません。

繰り返しになりますが、この種のことを行うための Windows ツール (商用) は確かに存在します。

私はPDF の生成に Cairo を使用しています。PDFがあなたからのものである場合、おそらくそれが解決策になるでしょう(複数のページをサポートしています)。幸運を!

于 2008-09-17T17:14:34.253 に答える
0

GhostScript (GNU ライセンス) を使用する PDFCreator (VB、私が間違っていなければ、別の言語で同様のコードを実装するだけなので問題ありません) のコードを確認することをお勧めします。または、GhostScript 自体を直接掘り下げてください。また、GhostPDF と呼ばれるファサード レイヤーも利用できます。

VB で GhostScript を制御できるなら、C で制御できます。つまり、Ruby で制御できます。

Ruby には IO.popen もあります。これを使用すると、これを実行できる外部プログラムを呼び出すことができます。

于 2008-09-17T17:28:13.317 に答える
-1

実際のアプリケーションでこれを行う Ruby コードは、おそらく非常に遅くなります。私は仕事をするためにUNIXツールを探し出そうとしました。これは Mac OS X を使用する利点の 1 つで、非常に高速な PDF 機能が組み込まれています。次善の策は、おそらく UNIX ツールです。

実際、私はrtexである程度の成功を収めました。ここを見ればある程度の情報は得られます。私が使用したどの Ruby ライブラリよりもはるかに高速であり、latex には他のソースから PDF データを取り込む機能があると確信しています。

于 2008-09-18T07:40:55.763 に答える