Adobe Acrobat Reader Tabs Saving And Autoloading

假装没事ソ 提交于 2019-11-28 15:51:19

问题


I've created Javascript for Acrobat Reader which allows you to save the currently open tabs. It adds the menu items: "Save tabs", "Load tabs", and "Toggle auto load". It saves tabs and page numbers, and restores them as well.

It's especially helpful for Linux, where there aren't many pdf readers available. However, I haven't been able to figure out how to catch open or close document events, or to set some timer event to automatically store current list of tabs.

Here is the original API reference for Adobe Acrobat.

/*
   Here is the script, put it in $HOME/.adobe/Acrobat/9.0/JavaScripts (or in 
   the equivalent program files folder under Windows,) and it will automatically
   be loaded. 

   When you need to save current state, choose menu "view -> Save Tabs", to restore 
   recently saved tabs choose "view -> Load Tabs". 
*/

var delim = '|';
var parentMenu = "View";

/*
 Loading Saved Tabs
*/
function LoadTabs() {

  if (global.tabs_opened == null) {
    return;
  }

  var flat = global.tabs_opened.split(delim);
  for (i = 0; i < flat.length; i += 2) {
    try {
      app.openDoc(flat[i]);
      app.execMenuItem("FirstPage");
      for (ii = 0; ii < flat[i + 1]; ++ii) {
        app.execMenuItem("NextPage");
      }
    } catch (ee) {
      app.alert("Error while opening the requested document.\n" + flat[i], 3);
    }
  }
}

/*
 Function with trusted section returning opened documents
*/
trustedActiveDocs = app.trustedFunction(function () {
  app.beginPriv();
  var d = app.activeDocs;
  app.endPriv();
  return d;
})

/*
 Saving Tabs that are opened
*/
function SaveTabs() {
  var d = trustedActiveDocs();
  var tabs = '';

  for (var i = 0; i < d.length; i++) {
    if (i > 0)
      tabs += delim;
    //    app.alert(d[i].path+"------"+d[i].pageNum,3);
    tabs += d[i].path;
    tabs += delim;
    tabs += d[i].pageNum;
  }
  global.tabs_opened = tabs;
  global.setPersistent("tabs_opened", true);
  app.alert("Tabs Saved", 3);

}
/*
 Toggle auto load tabs
 automatically loading tabs when reader starts
*/
function ToggleAuto() {
  if (global.tabs_auto == 0 || global.tabs_auto == null) {
    global.tabs_auto = 1;
    global.setPersistent("tabs_auto", true);
    app.alert("Tabs auto loading enabled", 3);
  } else {
    global.tabs_auto = 0;
    global.setPersistent("tabs_auto", true);
    app.alert("Tabs auto loading disabled", 3);
  }
}


app.addMenuItem({
  cName: "-",
  cParent: parentMenu,
  cExec: "void(0);"
});

app.addMenuItem({
  cName: "&Save Tabs",
  cParent: parentMenu,
  cExec: "SaveTabs();"
});

app.addMenuItem({
  cName: "&Load Tabs",
  cParent: parentMenu,
  cExec: "LoadTabs();"
});

app.addMenuItem({
  cName: "Toggle auto load",
  cParent: parentMenu,
  cExec: "ToggleAuto();"
});

if (global.tabs_auto == 1) {
  LoadTabs();
}

回答1:


Thanks for the fantastic start to implementing this glaring feature omission from a mature product. An Autohotkey script will accomplish what you're looking for. I've created one below that will automatically save the tab layout when you close Acrobat.

This script works with the latest version of Acrobat Pro DC. In this version, the script menu options appear at the bottom of the "view" menu. If your version differs, you'll have to modify this script; please report in the comments if your Acrobat version puts the custom Javascript menu options elsewhere.

if WinActive("ahk_class #32770") & WinActive("Adobe Acrobat", "Do you want to close all tabs or the current tab") {
    Send, !c
    WinWaitActive, ahk_class AcrobatSDIWindow
    Send, !v{Up 3}{Enter}
    WinWaitActive, Warning: JavaScript, Tabs Saved
    Send, {Space}
    WinMenuSelectItem, ahk_class AcrobatSDIWindow, , View, Save Tabs
    Send, ^q
}


来源:https://stackoverflow.com/questions/12689154/adobe-acrobat-reader-tabs-saving-and-autoloading

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!