如何编写javascript来重新排序pdf文档的页面?

时间:2012-11-09 17:46:33

标签: javascript pdf adobe

我有一个双面文档作为两个单独的pdf文件 - 一个文档中的前向页面和第二个中的后向页面。

front.pdf
rear.pdf

我还将它们组合成一个包含所有页面的单个文档,但在后向页面之前包含所有前向页面。页面排序的格式为{1,3,5,7,...,[n],2,4,6,8,...,[n-1 OR n+1]}

all.pdf

我希望编写一个可以在Adobe Abrobat X Pro中运行的简单JavaScript。理想情况下,它会计算文档all.pdf的页面,处理两个总页数奇数或偶数时的情况,然后重新排序,使它们按原始顺序排列:

page [1>3>4>2] => page [1>2>3>4]

以上微小的主要代码段来自SuperUser在此问题中的 user171577 的回答:https://superuser.com/questions/181596/software-that-merges-pdf-every-other-page

4 个答案:

答案 0 :(得分:3)

我能够通过NullUserException完成以下建议:

此脚本需要一个由所有奇数页面组成的文档,后跟所有偶数页面。它将处理n偶数页和n+1个奇数页的情况。

我输入了名为InterleavePages的'文档JavaScript',其代码如下:

function InterleavePages() {

var n = this.numPages;
var nOdd = Math.floor(n / 2);
var nEven = n - nOdd;
var x;
var y;
var i;

for(i = 0; i < nEven; i++) {
                         // movePage x, toAfterPage y
                         // note page numbers are 0-indexed
    x = nOdd + (i);      //
    y = i * 2     ;      //  
    this.movePage(x,y); 
   }
}
InterleavePages();

答案 1 :(得分:1)

谢谢,这是一个很好的帮助。只是想指出我发现的限制是它只能用偶数页编写。虽然可能编写一个更复杂的计算脚本,但我采取了简单的方法,只是在我的17页测试文档的末尾添加了一个空白页面。但是,我确实添加了警报,所以我不会忘记在必要时添加额外的页面......

function InterleavePages() {

var n = this.numPages;
var nOdd = Math.floor(n / 2);
var nEven = n - nOdd;
var x;
var y;
var i;

app.alert({
cMsg: "Total pages must be an even number",
cTitle: "Even Number of Pages Required!",
nIcon: 1, nType: 1
});

this.pageNum = 0;

for(i = 0; i < nEven; i++) {
                         // movePage x, toAfterPage y
                         // note page numbers are 0-indexed
    x = nOdd + (i);      //
    y = i * 2     ;      //  
    this.movePage(x,y); 
   }
}
InterleavePages(); 

答案 2 :(得分:0)

正如其他一些交流中所提到的,要将两个pdfs交织在一起,您可以使用Java控制台。

第一步是将pdfs合并到一个文档中。我会通过突出显示两个文件,然后右键单击其中一个文件来完成此操作。应该有一个选项“在Acrobat中组合支持的文件”。

然后,组合它们后,打开要运行代码的组合文件

for(i = 0; i&lt; = this.numPages / 2-1; i ++)this.movePage(this.numPages-1,this.numPages / 2-i-1);

运行此类代码的详细步骤如下:

1)打开pdf。

2)转到第二页。这样做可以让您注意到是否发生了更改。您不必执行此步骤,但它会有所帮助。

2)按Control + J

3)在弹出的窗口中,我总是转到“查看”下拉菜单,并将其设置为“脚本和控制台”。

4)在底部窗口中,替换应该读取类似

的文本

“Acrobat EScript内置函数版本10.0 Acrobat SOAP 10.0“

for(i = 0; i&lt; = this.numPages / 2-1; i ++)this.movePage(this.numPages-1,this.numPages / 2-i-1);

5)按一次输入。按两次可能会再次运行代码(您不需要)。

6)检查pdf以查看页面是否已隔行扫描。如果没有,请再次尝试第5步。

7)您现在是一个Java向导。祝贺。

答案 3 :(得分:0)

我遇到了同样的问题,我的扫描仪只有单面,扫描仪软件在完成自动进纸器后,询问是否还有更多要扫描的东西。如果您抓住堆栈,将其翻转并再次送入,您将最终得到一个单独的 PDF,其中 n 页文档排列为 1f、2f、3f ... nb, (n-1)b, ( n-2)b ... 1b(f=正面,b=背面,基于 1 的页码)。根据定义,您将拥有偶数个扫描页面,用于重新排列整个内容的 javascript(小心,在这种情况下仅适用于偶数页!)是:

// rearrange the pages from single-side scanner, 0-based page# where
// pages 0 .. n/2-1 are front, pages n/2 .. n-1 are back
function Rearrange() {
    var tpn=0;      // target page number
    for (count = 0; count < this.numPages/2; count++)   { 
        this.movePage(this.numPages-1,tpn);
        tpn=tpn+2;
    }
}
Rearrange();