答案 0 :(得分:8)
尝试:
答案 1 :(得分:2)
困难的方法:使用ConTeXt / LuaTeX重新排列页面。
合理的方法:pdf shuffler,PDFjam和/或PDF Split & Merge的组合可以完成这项工作。
答案 2 :(得分:1)
如果某个现有PDF工具尚未执行此功能,那么这是一个关于如何使用CAM::PDF解决问题的高级头脑风暴。我不确定它是否有用。
在我的脑海中,我不知道额外的超出裁剪框内容是否会被隐藏,或者它是否会影响渲染......
更新:我实施了一个大多数工作,简单化的解决方案,如下所示。它复制有问题的页面,旋转两个副本,并在每个页面上设置CropBox,选择第一页的左半部分和第二页的右半部分。您可能不需要轮换,不确定。
#!/usr/bin/perl
use strict;
use warnings;
use CAM::PDF;
my $pdffile = 't/sample1.pdf';
my $pdfout = 'temp2.pdf';
my $pagenum = 1;
my $pdf = CAM::PDF->new($pdffile) or die $CAM::PDF::errstr;
my ($objnum, $gennum) = $pdf->getPageObjnum($pagenum);
my $pagedict = $pdf->getPage($pagenum);
$pagedict->{Rotate} = CAM::PDF::Node->new('number', 90);
my $oldbox = $pdf->getValue($pagedict->{CropBox} || $pagedict->{MediaBox});
my @box = map {$pdf->getValue($_)} @{$oldbox};
$pagedict->{CropBox} = CAM::PDF::Node->new('array', [
map {CAM::PDF::Node->new('number', $_)} $box[0], $box[1], $box[2], ($box[3]+$box[1])/2
]);
my $duplicate = CAM::PDF->new($pdffile) or die $CAM::PDF::errstr;
$duplicate->extractPages($pagenum);
$pdf->appendPDF($duplicate); # appends at end instead of inserting
$pagedict = $pdf->getPage($pdf->numPages());
$pagedict->{Rotate} = CAM::PDF::Node->new('number', 90);
$pagedict->{CropBox} = CAM::PDF::Node->new('array', [
map {CAM::PDF::Node->new('number', $_)} $box[0], ($box[3]+$box[1])/2, $box[2], $box[3]
]);
if ($objnum) {
$pdf->{changes}->{$objnum} = 1;
}
$pdf->cleanoutput($pdfout);