2

ページを数インチ右にシフトする必要があるPDFドキュメントがあります。つまり、ページの左側に余白を置くのが好きです。

CAM::PDFまたはPDF::API2のいずれかで実行できますか?それとも誰かがそれを経験したことがありますか?

ありがとう。

4

3 に答える 3

3

私はCAM::PDFの作者です。次の小さなプログラムは、ページの内容を100ポイント右にシフトします。

use CAM::PDF;
my $pdf = CAM::PDF->new('my.pdf');
my $page = $pdf->getPage(1);
$page->{MediaBox}->{value}->[0]->{value} -= 100;
$page->{MediaBox}->{value}->[2]->{value} -= 100;
$pdf->cleanoutput('out.pdf');

「useData::Dumper; print Dumper($ page);」を使用しました。$pageのデータ構造を思い出してください。

于 2010-04-14T02:52:01.477 に答える
2

これが私がPDF::API2でそれを行う方法です:

use PDF::API2;

my $in  = PDF::API2->open('/path/to/file.pdf');
my $out = PDF::API2->new();

# Choose your margin (72 = one inch)
my $x_offset = 72;
my $y_offset = 0;

foreach my $page_num (1 .. $in->pages()) {
    # Take the source page and import it as an XObject
    my $xobject = $out->importPageIntoForm($in, $page_num);

    # Add the XObject to the new PDF
    my $page = $out->page();
    my $gfx = $page->gfx();
    $gfx->formimage($xobject, $x_offset, $y_offset);
}
$out->saveas('/path/to/new.pdf');

動作する別の方法は、メディアボックス(および場合によっては他のボックス)の座標を調整することです。

use PDF::API2;

my $pdf = PDF::API2->open('/path/to/file.pdf');

# Choose your margin (72 = one inch)
my $x_offset = 72;
my $y_offset = 0;

foreach my $page_num (1 .. $pdf->pages()) {
    my $page = $pdf->openpage($page_num);

    # Get the coordinates for the page corners
    my ($llx, $lly, $urx, $ury) = $page->get_mediabox();

    # Add the margin by shifting the mediabox in the opposite direction
    $llx -= $x_offset;
    $lly -= $y_offset;
    $urx -= $x_offset;
    $ury -= $y_offset;

    # Store the new coordinates for the page corners
    $page->mediabox($llx, $lly, $urx, $ury);
}

$pdf->saveas('/path/to/new.pdf');

コンテンツが途切れる問題が発生した場合は、、、、の1つ以上を取得して設定する必要がありますが、cropboxほとんどの場合、これは機能するはずですbleedboxtrimboxartbox

于 2011-02-24T02:12:57.847 に答える
1

Ghostscriptでもそれを行うことができます。Windows用のコマンドの例をいくつか示します(Unixを使用している場合は、に置き換えgswin32c.exegsください)。

gswin32c.exe ^
   -o input-shifted-pages-1-inch-to-left.pdf ^
   -sDEVICE=pdfwrite ^
   -c "<</PageOffset [-72 0]>> setpagedevice" ^
   -f /path/to/input.pdf
  1. -o:出力ファイルを指定します。暗黙的にも使用し-dNOPAUSE -dBATCH -dSAFERます。
  2. -sDEVICE=...:GhostscriptにPDFを出力するように要求します。
  3. -c <<...:ページシフトを実行するためにコマンドラインで渡されるPostScriptコードスニペット
  4. -f ...:入力PDFを指定します(-f使用後に必要です-c)。

によって使用される単位/PageShiftはPostScriptポイントです。72 pt==1インチ。値[-72 0]は72pt==1in左にシフトし、0inを上/下にシフトします。これで、2インチ右にシフトする方法がわかりました。

gswin32c ^
   -o input-shifted-pages-2-inches-to-right.pdf ^
   -sDEVICE=pdfwrite ^
   -c "<</PageOffset [144 0]>> setpagedevice" ^
   -f /path/to/input.pdf

下に0.5インチ、右に1インチシフトしますか?

gswin32c.exe ^
   -o input-shifted-pages-1-inch-to-right-half-inch-down.pdf ^
   -sDEVICE=pdfwrite ^
   -c "<</PageOffset [72 -36]>> setpagedevice" ^
   -f /path/to/input.pdf
于 2010-09-09T21:07:26.023 に答える