페이지를 오른쪽으로 몇 인치 이동해야하는 PDF 문서가 있습니다. 나는 페이지의 왼편에 여백을 두는 것을 좋아한다.펄을 사용하여 PDF 페이지를 이동하는 방법 (CAM :: PDF, PDF :: API2)?
CAM :: PDF 또는 PDF :: API2로 처리 할 수 있습니까? 아니면 경험이있는 사람이 있습니까?
감사합니다.
페이지를 오른쪽으로 몇 인치 이동해야하는 PDF 문서가 있습니다. 나는 페이지의 왼편에 여백을 두는 것을 좋아한다.펄을 사용하여 PDF 페이지를 이동하는 방법 (CAM :: PDF, PDF :: API2)?
CAM :: PDF 또는 PDF :: API2로 처리 할 수 있습니까? 아니면 경험이있는 사람이 있습니까?
감사합니다.
저는 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');
"Data :: Dumper; print Dumper ($ page);"를 사용했습니다. $ page 데이터 구조를 생각 나게합니다.
Ghostscript으로도 가능합니다. (유닉스를 사용하는 경우, 단지 gs
에 의해 gswin32c.exe
교체) 나는 당신에게 윈도우에 대한 몇 가지 예를 들어 명령을주지 :
gswin32c.exe^
-o input-shifted-pages-1-inch-to-left.pdf^
-sDEVICE=pdfwrite^
-c "<</PageOffset [-72 0]>> setpagedevice"^
-f /path/to/input.pdf
-o
은 : 출력 파일을 지정합니다. 암시 적으로 -dNOPAUSE -dBATCH -dSAFER
도 사용합니다.-sDEVICE=...
: Ghostscript가 PDF를 출력하도록 요청합니다. -c <<...
-f
이
-c
사용 후 필요) 입력 PDF를 지정 명령 줄에 전달 된 포스트 스크립트 코드는 페이지 이동
-f ...
을 일어날 수 있도록한다./PageShift
에 의해 사용되는 단위는 포스트 스크립트 포인트입니다. 72pt == 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
내가 PDF : API2에 그것을 할 것입니다 방법은 다음과 같습니다
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');
:
는
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');
작동합니다
또 다른 방법은하여 mediabox에 대한 좌표 (그리고 아마도 다른 상자)을 조정하는 것입니다
콘텐츠가 잘리는 문제가 발생하는 경우 cropbox
, bleedbox
, trimbox
및 artbox
중 하나 이상을 가져와 설정해야 할 수 있습니다. 하지만 대부분의 경우이 방법이 효과적입니다.
필자는 항상 PDF :: API2에 내 자신의 모듈 인 CAM :: PDF보다 멋진 API가 있다고 생각했습니다. 나는 자유 시간의 녀석이있는 경우에, 나는 그 (것)들을 단 하나 최고 PDF 도서관으로 합병하고 싶으면 ... –
소리가 힘들다. – Mike
여백과 HWMargin을 설정하여 고스트 스크립트를 사용하여 수행 할 수 있지만 시스템을 통해 외부 명령을 호출하는 대신 Perl에서 수행하려고합니다. – est