JavaScript 在 Acrobat X 中:打印页面范围
JavaScript in Acrobat X: Printing Ranges of Pages
在 Adobe Acrobat(X 版)中,我想以某种不寻常的顺序将书页发送到打印机。事实证明,这比我想象的还要难。由于 Acrobat 的打印对话框接受手动输入最多 100 个字符的页面范围,我需要一个更好的解决方案。
我希望我可以通过 Javascript 做到这一点。
为了测试,我使用了以下内容:
var pp = this.getPrintParams();
pp.printRange = [[2,5], [8,8], [10,10]];
this.print(pp);
应该打印第 3-6、9、11 页
然而,它并没有这样做。我打印的总是整本书(300 页)。
这里有什么问题?
注:我的真实打印作业
上面使用的页面范围仅用于测试。我最终想要的是按特定顺序打印页面,例如
> 1, 151, 152, 2, 3, 153, 154, 4...
等等
这显然要翻译成0-based
> [0,0],[150,150],[151,151],[1,1]...
或者至少,我想是这样。
如果我的(页面)数组长达 300 个项目(或更多),可能会出现其他问题,我不知道 pp.printRange 是否接受那么多...
再测一次
我也试过了
var pages = [[0,0],[150,150],[151,151],[1,1]]
var pp = this.getPrintParams();
pp.printRange = pages;
this.print(pp);
结果:Acrobat 再次忽略页码数组并顽固地打印整个文档。
打印只是一种方式...
我的任务是重新排列一本书的页数(按照某种算法)。以特定的新顺序打印它们只是我重新排序它们的懒惰解决方案。如果可以通过其他方式进行重新排序(例如,提取然后按所需顺序重新组合),那也是一个解决方案。
不幸的是,答案是 printRange
参数首先由 Acrobat 版本 11 (XI) 支持。您可以从 documentation.
查看这些内容
我建议您无论如何按照文档中的建议检查脚本中的版本:
if (typeof app.viewerVersion != "undefined" && app.viewerVersion >= 11.0)
{
// Perform version specific operations.
}
那么,如果不支持printRange
,你当然可以求助于其他方法。例如,您可以暂时删除不需要的页面,然后打印整个文档 - 这有点老套,但只影响低于 XI 的版本。
最终我对这个问题的解决方案如下:
我购买了 Gilad Denneboom (http://try67.blogspot.com/) 为此目的制作的工具 (Javascript),他还有很多其他 Acrobat 工具,其中一些是免费的,一些是购买的(负担得起)。
解决我问题的工具是他的提取非连续页面脚本。最初有一些问题要完全得到它 运行,但 Gilad 立即解决了这些问题。
Extract Non-Sequential Pages 完全符合我的要求(也是我首先想自己编程的):
1) 启动时,它会显示一个对话框,要求输入一系列页码,例如5,7,13,6,101,2,4,200-210 或任何组合。这可以输入或复制粘贴。
2) 然后它从原始文档中按该顺序提取页面并将它们(按该顺序)收集到新文档中。新文档被赋予了一些随机名称。
3) 可以存储此新文档,然后按新顺序打印页面。
var pp = this.getPrintParams();
/*initial print range*/
pp.printRange=[[1,3]];
/*additional ranges are added to array through javascript push*/
pp.printRange.push([20,21]);}
pp.printerName="Adobe PDF";
this.print(pp);
在 Adobe Acrobat(X 版)中,我想以某种不寻常的顺序将书页发送到打印机。事实证明,这比我想象的还要难。由于 Acrobat 的打印对话框接受手动输入最多 100 个字符的页面范围,我需要一个更好的解决方案。
我希望我可以通过 Javascript 做到这一点。
为了测试,我使用了以下内容:
var pp = this.getPrintParams();
pp.printRange = [[2,5], [8,8], [10,10]];
this.print(pp);
应该打印第 3-6、9、11 页
然而,它并没有这样做。我打印的总是整本书(300 页)。
这里有什么问题?
注:我的真实打印作业
上面使用的页面范围仅用于测试。我最终想要的是按特定顺序打印页面,例如
> 1, 151, 152, 2, 3, 153, 154, 4...
等等
这显然要翻译成0-based
> [0,0],[150,150],[151,151],[1,1]...
或者至少,我想是这样。
如果我的(页面)数组长达 300 个项目(或更多),可能会出现其他问题,我不知道 pp.printRange 是否接受那么多...
再测一次
我也试过了
var pages = [[0,0],[150,150],[151,151],[1,1]]
var pp = this.getPrintParams();
pp.printRange = pages;
this.print(pp);
结果:Acrobat 再次忽略页码数组并顽固地打印整个文档。
打印只是一种方式...
我的任务是重新排列一本书的页数(按照某种算法)。以特定的新顺序打印它们只是我重新排序它们的懒惰解决方案。如果可以通过其他方式进行重新排序(例如,提取然后按所需顺序重新组合),那也是一个解决方案。
不幸的是,答案是 printRange
参数首先由 Acrobat 版本 11 (XI) 支持。您可以从 documentation.
我建议您无论如何按照文档中的建议检查脚本中的版本:
if (typeof app.viewerVersion != "undefined" && app.viewerVersion >= 11.0)
{
// Perform version specific operations.
}
那么,如果不支持printRange
,你当然可以求助于其他方法。例如,您可以暂时删除不需要的页面,然后打印整个文档 - 这有点老套,但只影响低于 XI 的版本。
最终我对这个问题的解决方案如下:
我购买了 Gilad Denneboom (http://try67.blogspot.com/) 为此目的制作的工具 (Javascript),他还有很多其他 Acrobat 工具,其中一些是免费的,一些是购买的(负担得起)。
解决我问题的工具是他的提取非连续页面脚本。最初有一些问题要完全得到它 运行,但 Gilad 立即解决了这些问题。
Extract Non-Sequential Pages 完全符合我的要求(也是我首先想自己编程的):
1) 启动时,它会显示一个对话框,要求输入一系列页码,例如5,7,13,6,101,2,4,200-210 或任何组合。这可以输入或复制粘贴。
2) 然后它从原始文档中按该顺序提取页面并将它们(按该顺序)收集到新文档中。新文档被赋予了一些随机名称。
3) 可以存储此新文档,然后按新顺序打印页面。
var pp = this.getPrintParams();
/*initial print range*/
pp.printRange=[[1,3]];
/*additional ranges are added to array through javascript push*/
pp.printRange.push([20,21]);}
pp.printerName="Adobe PDF";
this.print(pp);