10

スキャンされたページ (約 600) の束があり、すべての PDF ビューアーが右端の余白なしで画像を表示しますが、左端の余白は約 2 インチです。(おそらく、スキャン中に間違った設定が使用されました...)

これらのページを、できれば小冊子として印刷したいと考えています。すべてのページ画像を中央に永久に移動し、PDF でこれらのページをより快適に表示する方法はありますか? Ghostscript はそれを行うことができますか? PDF処理ライブラリの助けを借りてプログラムで行うなど、他の方法でこれを行うことはできますか?

4

2 に答える 2

11

(Nikolaus が提案したように) 独自のプログラム コードを記述したくないが、代わりに Ghostscript コマンドラインを使用する場合は、次の 3 つのことを知っておく必要があります。

  1. PostScript には、パラメーターsetpagedeviceを取る演算子があります。PageOffset
  2. -c ...コマンドラインで PostScript コードのスニペットを渡すと、Ghostscript はそれらのスニペットを処理します。
  3. Ghostscript は、(一部の) PostScriptコードを直接PDF=>PDF変換に対しても評価および適用できます。

次のコマンドラインを試して、すべてのページ画像を 1 インチ (==72pt) 左にシフトします。

gswin32c.exe ^
  -sDEVICE=pdfwrite ^
  -o c:/path/to/output/pdf-shifted-by-1-inch-to-left.pdf ^
  -dPDFSETTINGS=/prepress ^
  -c "<</PageOffset [-72 0]>> setpagedevice" ^
  -f c:/path/to/input/pdf-original.pdf

-dPDFSETTINGS=/prepressスキャンの画質を落とさないように入れました...)

于 2010-08-14T13:59:09.670 に答える
1

iText を使用して、pdf ページを移動、スケーリング、またはトリミングできます

ソース ファイルの PdfReader とターゲット ファイルのドキュメントを定義する必要があります。次に、リーダーの場合はページを反復処理し、ドキュメントに新しいページを作成し、sourcePage をテンプレートとして新しいページに追加します (シフト、スケーリング)。好きな場所など)

    PdfReader reader = new PdfReader( input );
    int n = reader.getNumberOfPages();

    Rectangle psize = reader.getPageSize(1);
    float width = psize.getHeight();
    float height = psize.getWidth();

    Document document = new Document(new Rectangle(height, width));
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream( output ));

    document.open();

    PdfContentByte cb = writer.getDirectContent();

    int i = 0;
    while (i < n) {
        i++;
        document.newPage();
        PdfImportedPage page = writer.getImportedPage(reader, i);
        cb.addTemplate(page, factor, 0, 0, factor, left, down);
    }

    document.close();
于 2010-08-10T10:19:50.100 に答える