如何在 Acrobat Professional 7 中仅打印注释页面?
我在某个网页上发现了一条建议,即使用 javascript 仅提取评论页面,但是我无法完成该脚本。
- Use a JavaScript to scan the PDF "this.syncAnnotScan"
- Then make a variable (i.e. "a" ) equal to zero and then increment it one for every page in the doent.
- Make another variable (i.e. "b") equal to "this.getAnnots" using the first variable ( "a" ) as the "nPage:" value.
- Set an "IF" statement checking if the second value ( "b") is not NULL then use "this.print" using the first variable ( "a") as both the "nStart:" and "nEnd" parameters.
- Make sure that you have the preference set to print comments in the Acrobat Preferences.
我已尝试但无法完成脚本。
请帮助我。
答案1
我正在寻找同一问题的解决方案(仅打印带有注释的 PDF 页面),并且我在这里分享脚本,以便其他人可以受益。
只需将以下内容保存为printAnnotatedPages.js并将其放入JavaScriptAdobe Acrobat 安装的子文件夹:
// Print only pages with annotations in them
function printAnnotatedPages() {
// Sync document annotations
this.syncAnnotScan();
// Check if printRange is available (Acrobat 11 or newer)
var pagesRange = null;
if (typeof app.formsVersion != "undefined" && app.formsVersion >= 11.0)
{
// Enable printRange
pagesRange = [];
}
// Scan pages for annotations
var startPage = -1;
var new_set = false;
for (var page = 0; page < this.numPages; page++)
{
// Check whether the current page has annotations
var hasComments = this.getAnnots({nPage: page});
if (hasComments != null) {
// This page has annotations
// Check whether this is a new set
if (!new_set) {
// Start new set of pages
startPage = page;
new_set = true
}
} else {
// This page hasn't annotations
// Print the set of pages (if any)
if (new_set) {
new_set = false;
if (pagesRange != null) {
// Add set of pages to print list
pagesRange.push([startPage, (page-1)]);
} else {
// Print this set (displays Print UI)
this.print({nStart: startPage, nEnd: (page-1)});
}
}
}
};
// Final check
if (pagesRange != null) {
// Print the last set of pages (if any)
if (new_set) {
// Add the last set of pages to print list
new_set = false;
pagesRange.push([startPage, (page-1)]);
}
// Print using the range function
if (pagesRange.length > 0) {
var pp = this.getPrintParams();
pp.interactive = pp.constants.interactionLevel.full;
pp.printRange=pagesRange;
this.print(pp);
} else {
// No pages with annotations
app.alert({nIcon: 1, cTitle: "Print annotated pages",
cMsg: "There are no annotated pages in this document."});
}
} else {
// Print the last set (displays Print UI)
if (new_set) {
new_set = false;
this.print({nStart: startPage, nEnd: (page-1)});
}
}
}
// Add menu item to the File menu
app.addMenuItem({ cName:"PrintAnnotatedPages", cUser:"Print pages with annotations...", cParent:"File",
cExec:"printAnnotatedPages();", cEnable: "event.rc = (event.target != null);", nPos: 16 });
这将添加新菜单打印带有注释的页面...在下面文件在 Acrobat 中打开文档时;我已经测试过,可以成功与 v9 和 DC 配合使用。但是,对于 11 之前的版本 - 由于缺少 API - 您必须在打印每组页面之前确认打印对话框。
答案2
使用 Acrobat Reader XI 时,会创建带有多余空格的列表,导致无法正确打印。即,对于以下内容: 9 、 17 - 21 、 23 、 25 - 26 、 29 - 30 、 33 - 36 、 40 - 41 、 45 - 47 、 49 、 52 - 54 、 56 - 59 、 64 - 68 、 70 - 73 、 76 - 78 、 83 - 90 、 92 - 93 、 95 - 96 、 99 、 104 、 107 - 108 、 113 、 117 - 120 、 123 - 124 、 163 - 165 、 194 - 196 、 223 - 224 、 226 、 230 、 233 , 237,239-240
仅打印第一页。
如果我手动删除多余的空格:9、17-21,
运行正常。是否可以调整脚本以删除空格?我认为逗号后面的空格就可以了。