用上了 GNOME 3.2
GNOME 3 的 Aldabra 主题

ConTeXt 辅助 Xournal 实现页数较多的 PDF 文档的批注

Garfileo posted @ 2011年10月08日 09:55 in Linux 的世界 with tags linux Xournal PDF 文件分割 , 4429 阅读

如果你恰好拥有正版的 Windows 与 Acrobat 的话,恭喜你,这篇文档可以不用再读下去了。

在 Linux 桌面中阅读 PDF 格式的电子书,如何添加批注一直以来都是个问题。虽然 Okular 支持分离式的批注,但是那些不使用 KDE 桌面的用户是看不到批注的。虽然 Evince 现在可在 PDF 文档中嵌入批注,但是目前仅仅是可以观瞻而不实用,所缺乏的功能太多了。

目前 Linux 桌面环境中只有 Xournal 才可以算得上是一款真正的 PDF 批注软件。但是 Xournal 对于篇幅较长的 PDF 文档,可能会耗尽你所有的内存,因为它会将 PDF 文档中所有的页面都转化为图像数据置于内存之中并且不再释放。你可以做个实验,用 Xournal 打开一份 200 多页 PDF 文档,然后慢悠悠的从首页拖曳到尾页,保证每个页面都被显示一次,在拖曳的过程中注意 Xournal 占用内存的变化。通常不建议使用 Xournal 批注页数超过 50 页的文档。所以i要让 Xournal 支持页数更多的文档,我们首先应对文档进行分割。

可惜的是 Linux 里可对 PDF 文档进行分割的工具并不是太多,对周边环境依赖较少的工具应该是 pdfshuffler,但是它的项目也已经很久没有更新,现在正处于与 poppler 0.18 不兼容的阶段。不过,如果你恰好可以使用它,或者你找到了你认为更好的 PDF 文档分割工具,那么这篇文章也可以不必再读下去。

如果你读过『使用 ConTeXt 修改既有 PDF 文档的元数据』,应该能认识到 ConTeXt 可对 PDF 文档进行分割或页面批量提取。见下面对 davinci-code.pdf 提取 1-50 页的 notes.tex 文稿:

\define\MyDocument{davinci-code.pdf}
\define\SegmentBegin{0}
\define\SegmentEnd{51}

\getfiguredimensions[\MyDocument]

\setuppapersize[MyNotes]

\setuplayout[backspace=0cm,
             cutspace=0cm,
             topspace=0cm,
             bottomspace=0cm,
             header=0cm,
             footer=0cm,
             width=middle,
             height=middle]

\setuppagenumbering[location=]


\starttext
 
\dorecurse\noffigurepages{%
    \ifnum\recurselevel > \number\SegmentBegin%
        \ifnum\recurselevel < \number\SegmentEnd%
            \startTEXpage
            \externalfigure[\MyDocument][page=\recurselevel]%
            \stopTEXpage
        \fi
    \fi%
}
 
\stoptext

你可以将上述文档作为 PDF 文档分割模板,每次使用的时候只需根据实际情况修改以下代码段即可:

\define\MyDocument{davinci-code.pdf}
\define\SegmentBegin{0}
\define\SegmentEnd{51}

首先将 davici-code.pdf 换成待处理的文件名;然后设定页面提取范围,例如要提取 51-100 页,那么 \SegmentBegin 可设为 50,\SegmentEnd 可设为 101。

可以使用类似以下命令编译上述文档:

$ context --once notes.tex --result=davinci-code-01

这样便可以从 notes.tex 文稿获得 davinci-code.pdf 的前 50 页所形成的新文档 davinci-code-01.pdf。

如果你想对待分割的 PDF 文档进行一些版面的设计,诸如要留出足够的空白区域以放置批注内容,可以像下面这样修改上述的 notes.tex 文稿:

\define\MyDocument{davinci-code.pdf}
\define\SegmentBegin{0}
\define\SegmentEnd{51}

\getfiguredimensions[\MyDocument]

\definepapersize[MyNotes][width=12in,height=12in]
\setuppapersize[MyNotes]

\setuplayout[backspace=1cm,
             cutspace=1cm,
             topspace=0cm,
             bottomspace=0cm,
             header=1cm,
             footer=1cm,
             width=middle,
             height=middle]

\setuppagenumbering[location=]


\starttext
 
\dorecurse\noffigurepages{%
    \ifnum\recurselevel > \number\SegmentBegin%
        \ifnum\recurselevel < \number\SegmentEnd%
            \vfill%
            \externalfigure[\MyDocument][page=\recurselevel]%
            \vfill%
            \page%
        \fi
    \fi%
}
 
\stoptext

如果你对上述修改感到困惑,也许你需要阅读『ConTeXt 页面布局控制』。

有分割,那么自然就需要有合并。如果你读懂了上述的 notes.tex,那么合并的问题便不再是问题。

下图是页面布局调整后的 davinci-code.pdf 在 Xournal 添加批注的效果。

转载时,希望不要链接文中图片,另外请保留本文原始出处:http://garfileo.is-programmer.com


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter