【问题标题】:How to write javascript to reorder pages of a pdf document?如何编写 javascript 来重新排序 pdf 文档的页面?
【发布时间】:2012-10-30 01:54:30
【问题描述】:

我有一个双面文档作为两个单独的 pdf 文件——一个文档中的正面页面和第二个文档中的背面页面。

front.pdf
rear.pdf

我还将它们组合成一个文档,其中包含所有页面,但所有正面页面都位于背面页面之前。页面排序格式为{1,3,5,7,...,[n],2,4,6,8,...,[n-1 OR n+1]}

all.pdf

我希望编写一个可以在 Adob​​e Abrobat X Pro 内部运行的简单 javascript。理想情况下,它会计算文档all.pdf 的页数,处理总页数为奇数或偶数的两种情况,然后将它们重新排序以使其保持原始顺序:

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

上面的小前导代码 sn-p 来自 user171577 在 SuperUser 在这个问题上的回答:https://superuser.com/questions/181596/software-that-merges-pdf-every-other-page

【问题讨论】:

  • 嗨。你不能使用javascript。如果您可以使用 Java,那么有一个名为 iText 库的库。您可以使用它。 api.itextpdf.com
  • @yms 是的,你可以。有两种方法可以做到这一点:您可以使用Doc.insertPages() 将页面从一个PDF 添加到另一个,或者如果您的所有页面都已经在一个PDF 中,您可以使用Doc.movePage() 来移动页面。这是 API 参考的链接:adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/…
  • @DhruvenkumarShah 您可以通过 JavaScript API 使用 GUI 界面在 Acrobat 上执行几乎所有可以执行的操作 - 包括移动页面。

标签: javascript pdf adobe


【解决方案1】:

我能够完成以下来自 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();

【讨论】:

    【解决方案2】:

    谢谢,这是一个很大的帮助。只是想指出我发现的限制是它只能以偶数页的形式工作。虽然可能可以编写更复杂的计算脚本,但我采取了简单的方法,只是在我的 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(); 
    

    【讨论】:

      【解决方案3】:

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

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

      然后,一旦它们组合在一起,打开组合文件,您要在其中运行代码

      for (i = 0; i

      运行此类代码的分步详细信息如下:

      1) 打开 PDF。

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

      2) 按 Control + J

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

      4) 在底部窗口中,替换应为

      之类的文本

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

      for (i = 0; i

      5) 按回车键一次。按两次可能会再次运行代码(您不希望这样做)。

      6) 检查您的 pdf 以查看页面是否已交错。如果没有,请重试第 5 步。

      7) 您现在是 Java 向导。恭喜。

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题,我的扫描仪只有单面,扫描仪软件在完成自动进纸器后,询问是否还有更多要扫描的内容。如果您抓住堆栈,将其翻过来并再次送入,您最终将得到一个 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();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多