我有一个PDF文档,我需要将页面向右移动几英寸。我喜欢在页面的左侧放一个边距。
CAM :: PDF或PDF :: API2可以吗? 或者有人有经验吗?
感谢。
答案 0 :(得分: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');
我使用“使用Data :: Dumper; print Dumper($ page);”提醒自己$ page数据结构。
答案 1 :(得分: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');
如果您遇到内容被切断的问题,您可能需要获取并设置cropbox
,bleedbox
,trimbox
和artbox
中的一个或多个好吧,但这在大多数情况下都适用。
答案 2 :(得分:1)
您也可以使用Ghostscript执行此操作。我将为您提供一些Windows示例命令(使用Unix时,只需将gswin32c.exe
替换为gs
):
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 <<...
:在命令行上传递的PostScript代码段,以实现页面转换-f ...
:指定输入PDF(使用-f
后需要-c
)。 /PageShift
使用的单位是PostScript点。 72磅== 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