web-dev-qa-db-ja.com

2つのPDFページを同じページに表示するにはどうすればよいですか?

PDFドキュメントのページを再配置し、シートごとに複数のページを結合できる無料のツールを探しています。最初の部分(再配置)は、多くのツールで簡単に解決できます。 PyPDF )。

問題は2番目の要件にあります。2つ(またはそれ以上)のページを1つのページに結合することです。たとえば、2つのページ(AとB)を取り、それらを回転させ、拡大縮小して、このように1つのページに結合します

------       ------            ------
|     |      |      |          |     |
|  A  |      |  B   |          | a   |
|     |      |      |          |     |
|     |      |      |  --->    ------
|     |      |      |          |     |        
|     |      |      |          | b   |        
|     |      |      |          |     |        
------       ------            ------

このソリューションはLinux上で、できればWindows上でも動作する必要があります。 PythonまたはPerlバインディングを備えたコンソールアプリケーションまたはライブラリを探しています。

Editpdfnup この種類の変換を正確に実行するはずのライブラリがあり、クロスプラットフォームですが、私はできません this に似たバグのために使用してください。

25
Boris Gorelik

この回答 を使用します 多価 を使用してPDF pages

2
danio

これは、PDF(psupとpsbookに相当するものを見つけたかった)

  • ブックレットの作成:pdfbook、pdf-tools(コマンド:pdfbklt)
  • Merge PDF files:pdfmerge、pdfjam(コマンド:pdfjoin)
  • ページの回転:pdfjam(コマンド:pdf90)
  • シートごとの複数ページ:pdfjam(コマンド:pdfnup)
  • ポスターの作成(ページごとに複数のシート):pdfposter

私のパッケージマネージャーから:

A6ブックレットを作成します。

pdfbook -2 -p a5 infile.pdf outfile.pdf

pdf-toolsの内容:

  • pdfbklt:小冊子を作成する
  • pdfrevert:PDFファイルへの変更の1つのレイヤーを削除し、出力ファイルのサイズを最大化しようとします(線形化されたPDFを考慮して))。
  • pdfstamp:指定された文字列を、指定された場所、フォント、サイズでinfile .pdfファイルに追加します。

多価もあります: http://multivalent.sourceforge.net/Tools/index.html

24
Mildred

Linuxでは、PDFファイルをPostscriptに変換し、psnupを使用できます。それを呼び出す正確な方法は、ページをどのようにまとめるかによって異なります。回転させたい、使用したい用紙サイズなどが必要ですが、次のようになります。

pdf2ps infile.pdf infile.ps
psnup -2 infile.ps outfile.ps
ps2pdf outfile.ps outfile.pdf

使用可能なツールによっては、より効率的な方法があります-psnupは確かに唯一の方法ではありませんが、比較的有名なプログラムです(とにかくLinuxで)。

9
David Z

Linuxを使用している場合は、 BookletImposer を使用して、複数のPDFページを1つのページに配置できます。

Ubuntuユーザーの場合、このツールはUbuntu Software Centerで入手できます。

あなたの質問に答えるには、PDF「インポジション」ツールが必要です。これは、PDF新しいシングルを作成する特定の配列PDFページ。新聞の組版のようなものだと想像してください。特定の列幅、特定の行数で、スロットの配列を定義します。特定の固定寸法(cm)のページ。次に、空のスロットを上から下、左から右にpdfソースファイルのページで埋めます。OPの場合、構成された単一のページを作成します。 1x2配列(1列、2行)に配置された2つの8.5x11ページのうち、ページは次の順序で配列にドロップされます:1,2。したがって、最初のページ(pdfのページ1)をドロップします配列の最初のスロット(列1、行1)、2番目のページ(ページ2)を2番目のスロット(列1、行2)にドロップしています。

ツールを使用してこれを実現する方法:Multivalentの古いバージョンをダウンロードします。作者が説明なしで最新版から優れたツールクラスを削除したため、古いものを使用する必要があることに注意してください。 02/12の時点での作業リンクは次のとおりです。 http://code.google.com/p/pdfsizeopt/downloads/detail?name=Multivalent20060102.jar 簡単にするために、jarファイルの名前をmに変更しました.jar。言うまでもなく、これを機能させるにはJREをインストールする必要がありますが、それを公開します。 m.jarをJavaクラスパス環境変数(スクリプト用)に追加するか、-cpオプションと相対パス(以下を参照)を使用してコマンドライン構文を実行します。以下の例では、インストールディレクトリのコマンドライン、そうでない場合はルートからの絶対パス(c:\ 1\bin\m.jarなど)を指定します。

OPが投稿した内容を正確に達成する例を次に示します。C:\ 1\bin> Java -cp m.jar tool.pdf.Impose -dim 1x2 -verbose -papersize "21.59x55.88cm" -layout "1,2 "yourfilename.pdf

-dimオプションは、列x行に配列を作成することに注意してください。 -papersizeはここではセンチメートルで指定されますが、インチが必要な場合は、インチを2.54倍してcmを取得します。 -layoutオプションを使用すると、配列の空のスロットを上から下、左から右に埋める順序を指定できます。この場合、上部のpdfの1ページ目と下部の2ページ目が必要なので、引数は「1,2」です。最後の引数は、実際のソースファイルです。完了すると、ツールはyourfilename-up.pdfというファイルを出力します。

お役に立てば幸いです。

-マット・ツヴァイル

1
Matt Zweil

このサイズの2倍のシート(A4、ポートレート)でページ(A5、ランドスケープなど)を2回繰り返すためのスクリプトを次に示します。

#!/bin/bash
INPUTFILE=$*
PAGENUM=`pdftk ${INPUTFILE} dump_data | grep NumberOfPages | cut -d : -f 2  | cut -d " " -f 2`
PAGES=`seq 1 ${PAGENUM}`
DUPAGES=`for i in ${PAGES} ; do echo $i $i | tr "\n" " " ; done`
OUTPUT1=`basename ${INPUTFILE} .pdf`.dup.pdf
OUTPUT2=`basename ${INPUTFILE} .pdf`.double.pdf
pdftk ${INPUTFILE} cat ${DUPAGES} output ${OUTPUT1}
pdfjam --nup 1x2 ${OUTPUT1} --outfile ${OUTPUT2}

それは本当にエレガントではありません。 2回目のpdftk呼び出しなしで実行できますが、スペースを含むファイルでは機能しません。ただし、複数ページのPDFでは機能します。

0
Seegras

PyPDFのソースコード、特にrotateClockwise()メソッドを確認してください。ページのコンテンツが書き込まれる場所が必要です。コンテンツの前に「q」演算子(状態を保存)と「cm」(スケーリングマトリックスの正しいパラメーターを使用)を挿入し、その後に「Q」演算子(状態を復元)を挿入します。

演算子の説明とページの構造については、 PDFドキュメント を参照してください(有用なリンクについては、下にスクロールしてください)。

PyPDFにパッチを送信することを忘れないでください:)

[編集] pdfnupコマンドを含む pdfjam sources を確認することもできます。

0
Aaron Digulla

これは、サードパーティアプリからprnファイルでいっぱいのディレクトリを取得し、単一のマージされたpdfを作成するために使用するPerl関数です。

sub runMerged($)
{
    my($path) = @_;

    print "Generating merged PDFs for $path\n";

    my @files = sort(getFiles($path, ".prn\$"));
    if (scalar(@files))
    {
        open(MERGE, ">$path/merged.prn");
        for (my $i = 0; $i < scalar(@files); $i++)
        {
            print MERGE "^L\n" if ($i > 0);

            open(FN, "$path/" . $files[$i]);
            while (my $line = <FN>)
            {
                print MERGE $line;
            }
            close(FN);
        }

        chdir("$BASE_PATH/txt2pdf");
        print `./txt2pdf.pl $path/merged.prn`;
    }
}
0
user44585

私はあなたと同じ問題を抱えていましたが、これが私がやったことです:

  1. PDFファイル内のすべてのページをそれぞれ個別のファイルとして抽出しました
  2. IrfanView(プラグイン付き)で、垂直方向の「パノラマ」画像を作成しました
  3. PDFファイルを画像セクションにドラッグしました
  4. クリックして作成
  5. 「イメージ」は、すべてのページが1つの非常に長い垂直イメージとして互いに続く状態で作成されます
  6. 品質をほとんど損なうことなくPDF=にエクスポートできます。
  7. 楽しい
0
J. Fernando N

Adobe Acrobat XI Proを使用して、最初のドキュメントを開きます。編集し、「スナップショットを撮る」を選択してから、コピーしたいものの上隅をクリックして反対側の隅にドラッグします。ペイントで開いたきれいなシートを用意します。ペイントでクリーンシートをクリックし、Vキーを押して最初のドキュメントをクリーンシートに貼り付けます。ペイントシートで一時的に2番目のアイテムを1番目のアイテムの下に配置することを除いて、同じページで結合する2番目のアイテムに対して繰り返します。次に、2番目のアイテムをドラッグして、ペイントシートの必要な場所に配置します。ペイントシートファイルを保存すれば完了です!

0
Mouse1999

今週も同様のニーズがありました。しかし、後でA3シート(ポートレート)でA4ページ(風景)を「2回」繰り返し、後で半分にカットする必要がありました。

多数の面付け機能を備えたAcrobatプラグインを見つけました。これは私のニーズにぴったりで、完全に機能する30日間の試用版です。

他の誰かに役立つことを願っています。
http://www.pdfsnake.com/

0
Putuko