Skip navigation
Home/Support/

Forums

6823 Views 12 Replies Latest reply: May 13, 2010 6:13 PM by zsd2 RSS
Calculating status... 2 posts since
Mar 14, 2008
Currently Being Moderated

Mar 14, 2008 3:43 AM

How to reload a document

Using acroread 8.1.2 on linux x86_64

Is there a way to get acroread to reload a pdf that has changed on disc? The only way I can find to do that is to close the document and then reopen it.

I frequently generate/edit pdf documents via LaTeX and would like to use acroread to preview results; but without a "refresh" option, previewing changes is excessively cumbersome.

Most other pdf readers (e.g. xpdf) have a "Refresh" option, often mapped to a keystroke. Some may even be set up to reload a document automatically if it changes on disc.

Lack of this functionality is a show-stopper for me.

Regards,
Lionel
  • User 53 posts since
    Aug 11, 2002
    Currently Being Moderated
    1. Mar 14, 2008 4:09 AM (in response to (Lionel_B))
    Re: How to reload a document
    Lionel,

    We've received similar feature requests from some other users as well. Currently this isn't supported in the Adobe Reader. However, we've recorded this request with us and would take a note of it during planning for the next release.

    Thanks,
    -vc
  • Calculating status... 1 posts since
    Apr 10, 2008
    Currently Being Moderated
    3. Apr 10, 2008 3:59 PM (in response to (Lionel_B))
    Re: How to reload a document
    I just wasted a bunch of time because I thought there must be some way to do this. Please add the feature. Thanks,
    Fred
  • Calculating status... 3 posts since
    May 14, 2008
    Currently Being Moderated
    4. May 14, 2008 9:15 AM (in response to (Lionel_B))
    Re: How to reload a document
    In old versions of Adobe Reader, this was possible: Close the file by pressing Ctrl-W and reopen it by either "Ctrl+Cursor left" or "Alt+Cursor left" (changed sometimes in history). This reopened the file at the same position with the same view (magnification etc.).

    Unfortunately, this does not work in Adobe Reader 8 anymore. I have to reopen the file by pressing "Alt+F 1". This way, Adobe Reader forgets about all view settings, and I have to move to the last opened page again. This even occurs when the setting "reopen at old position" (or similar, forgot the name) is switched on.

    Reinvoking the old function to reopen a file with "Ctrl+Curser left" would be very helpful already.
  • Calculating status... 1 posts since
    Mar 13, 2009
    Currently Being Moderated
    5. Mar 13, 2009 8:26 AM (in response to (Lionel_B))
    Re: How to reload a document
    Here is a slick method to do it through Javascript on Linux. Create a new text file called (for instance) reload.js and put it into the directory:

    ~/.adobe/Acrobat/8.0/JavaScripts/

    In the text file write these lines:

    reloadCurrentDoc = app.trustedFunction(
    function(currentDoc) {
    app.beginPriv();
    currentDocView=currentDoc.viewState;
    currentDocPath=currentDoc.path;
    currentDoc.closeDoc();
    currentDoc=app.openDoc(currentDocPath);
    currentDoc.viewState=currentDocView;
    app.endPriv();
    });

    app.addMenuItem({
    cName: "reloadCurDoc",
    cUser: "Reload",
    cParent: "File",
    cExec: "reloadCurrentDoc(event.target);",
    cEnable: "event.rc = (event.target != null);",
    nPos: 0
    });

    app.addToolButton({
    cName: "reloadCurDoc",
    cExec: "reloadCurrentDoc(event.target);",
    cToolText: "Reload the current document",
    cEnable: "event.rc = (event.target != null);",
    cLabel: "Reload",
    nPos: -1
    });

    Close and open Acrobat. A toolbox item called 'Reload' appears and a corresponding menu item in the 'File' menu is added.

    NOTE: On Ubuntu, remember to install the acrobat-plugins package from the medibuntu repository.

    Credit to Alexander Grahn for the idea
    http://www.tug.org/pipermail/pdftex/2009-January/007934.html
  • KaiStapel Calculating status... 2 posts since
    Mar 15, 2010
    Currently Being Moderated
    6. Mar 15, 2010 6:59 AM (in response to (Lionel_B))
    Re: How to reload a document

    Another way to do it is to use incron (that uses inotify).

    First you need a script that reloads acroreader, e.g.~/bin/acro-reload.sh (don't forget to make it executable with chmod a+x ~/bin/acro-reload.sh):

    #!/bin/bash

    # close document if already open
    ACRO_PID=`ps x | grep acroread | grep $1 | sed -n 's|\([0..9]*\) .*|\1|p'`

    if [[ -n $ACRO_PID ]]
    then   
    kill $ACRO_PID
    fi

    sleep 0.2

    # reload document
    /usr/bin/acroread --display=:0.0 $1 &

    exit 0

    Then you need to install incron

    sudo apt-get install incron

    and allow your user to use it by adding you user name to /etc/incron.allow

    sodo vim /etc/incron.allow

    Now we need to tell incron to start our script whenever a certain PDF (or path) changes by:

    crontab -e

    add the following line:

    /path/that/contains/pdf IN_CLOSE_WRITE,IN_NO_LOOP /home/user/bin/acro-reload.sh $@/$#

    The first path is the path that is being monitored. The second path is the reference to the script that is being called upon file changes in the first path. $@ and $# are placeholders for the path and file that just changed. They are passed to the script

    The script first looks for an already open instance of acroread. If it finds one it closes it, sleeps 200 msec, and then reopens acroread.

    If you encounter an error in the /var/log/Xorg.0.log similar to this

    AUDIT: Mon Mar 15 10:48:56 2010: 5565 X: client 43 rejected from local host (uid 1000)

    you need to execute the following

    xhost local:root

     

    I hope that helps.

    Best,
    Kai

  • Vaibhav Padlikar User 78 posts since
    Apr 6, 2009
    Currently Being Moderated
    7. Mar 17, 2010 6:40 AM (in response to KaiStapel)
    Re: How to reload a document

    Document "Reload" feature is included in all versions of Linux Reader 9.x from 9.1 onwards. Do File ->Reload or Ctrl+R to reload a document..

     

     

     

    -vaibhav

  • KaiStapel User 2 posts since
    Mar 15, 2010
    Currently Being Moderated
    8. Mar 17, 2010 7:22 AM (in response to Vaibhav Padlikar)
    Re: How to reload a document

    Good to hear that it finally got included.

     

    Still, the solution I posted facilitates an automatic reload of the document when it changes, e.g. when you recompile your Latex document.

     

    Best,

    Kai

  • James Quirk Calculating status... 93 posts since
    Mar 22, 2008
    Currently Being Moderated
    9. Apr 20, 2010 9:32 AM (in response to KaiStapel)
    Re: How to reload a document

    Kai,

     

    Your reload approach could be implemented in Perl using:

     

    #! /usr/bin/env perl
    my @ACROREAD = ('acroread',@ARGV);
    my $wfile  = $ACROREAD[$#ACROREAD];
    my $wdelay = 1;
    my $otime  = 0;
    my $kid;
    while(1) {
       my $ntime = (stat($wfile))[9];
       if($ntime != $otime) {
          $otime = $ntime;
          kill 9, $kid if($kid);
          unless(($kid = fork)) {
             exec @ACROREAD;
          }
       }
       select(undef, undef, undef, $wdelay);
    }

     

    and so there's no need for external third-party software, and no need

    to use a configuration file. Just save the above in a file myacroread

    and invoke as:

     

        myacroread my.pdf

     

    assuming, said file is in your path and marked with chmod +x .

     

    Note that this is a barebone script with no error checking, and it also assumes

    the watched file is the last argument. But it could easily be embelished

    to provide a more robust solution. And for those who don't like Perl,

    it could easily be translated into Python or Ruby.

     

    Now, for the interesting bit. After installing a package such as xdotool, see:

     

       http://www.semicomplete.com/projects/xdotool

     

    once could modify the above to be:

     

    #! /usr/bin/env perl
    my @ACROREAD = ('acroread',@ARGV);
    my $wfile  = $ACROREAD[$#ACROREAD];
    my $wdelay = 1;
    my $otime  = (stat($wfile))[9];
    unless((my $kid = fork)) {
       exec @ACROREAD;
    }
    while(1) {
       my $ntime = (stat($wfile))[9];
       if($ntime != $otime) {
          $otime = $ntime;
          chomp(my $wid= (qx{xdotool search --title "Adobe Reader"})[0]);
          system("xdotool windowactivate $wid");
          system("xdotool key ctrl+r");
       }
       select(undef, undef, undef, $wdelay);
    }

     

    which  uses Linux/AR's native Reload facility in an automated fashion.

     

    Neither of the above is presented as the last word in wrapping acroread,

    but some people might find them useful.

     

    James

  • zsd2 Calculating status... 2 posts since
    May 13, 2010
    Currently Being Moderated
    10. May 13, 2010 11:11 AM (in response to James Quirk)
    Re: How to reload a document

    There are a lot of what I consider to be difficult approaches to the problem outlined above.

     

    Look on CTAN for 'xpdfopen' and you will find a program called 'pdfopen' which will reload (or load, if the file is not currently being displayed) a PDF file.  Works for AR 5, 7, 9 and the ugly AR8.

     

    Call this program automagically from whatever you use to re-(la)tex your document and life will be good.

     

    Cheers

  • James Quirk User 93 posts since
    Mar 22, 2008
    Currently Being Moderated
    11. May 13, 2010 3:18 PM (in response to zsd2)
    Re: How to reload a document

    I'm not sure what you mean by difficult approaches, but it is worth noting that for AR9

    the latest version of xpdfopen essentially does what my Perl fragment does;

    it injects keyboard presses into the AR window. But given my postings to

    the texhax newsgroup, on the matter, this is probably not surprising.

     

    Anyhow as I stated upfront, the Perl fragments were not intended as the last word

    on wrapping AR. They simply serve to show how one can use the likes of

    xdotool to automate a commonly requested operation. Moreover

    the approach is easily generalized to other quite different scenarios,

    for applications other than PDF browsing, and so is worth bearing in mind

    for when there is no canned package to hand.

     

    James

  • zsd2 User 2 posts since
    May 13, 2010
    Currently Being Moderated
    12. May 13, 2010 6:13 PM (in response to James Quirk)
    Re: How to reload a document

    There are two things about some of the above approaches that strike be as problematic.

     

    First, some require a variety of other packages to be be installed.  (And yes, until TL2010 is out, I guess people would need to make the effort of getting the latest & greatest xpdfopen.)

     

    Second, any solution that requires polling is, IMHO, not very good.  Any process that sits there spinning its wheels is wasting CPU time.  Sure, are recent PC has gots lots of power, but the belief that everyone has so much CPU power that it is OK to waste it puts a lot of computers into landfills (or, hopefully, to recycling centers).

     

    It's just wrong to poll when it is possible to instead handle an interrupt.

More Like This

  • Retrieving data ...

Bookmarked By (0)