2011-02-27 76 views

回答

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); 
2

困難的方法:使用ConTeXt/LuaTeX重新排列頁面。

合理的方法:組合pdf shuffler,PDFjam和或PDF Split & Merge應該完成這項工作。

+0

或[JPDF TWEAK(HTTP:// jpdftweak .sourceforge.net /),或者... – 2011-02-27 16:26:22

7

與嘗試:

  • Briss(免費)易於使用,只有拖放矩形來創建新的頁面。
  • A-PDF Page Cut(共享軟件)不知道...它將水印添加到新頁面。
+1

Briss解決方案非常完美,謝謝! – 2013-06-04 22:17:18