我正在尝试使用pdfpages
和维护所包含 PDF 文件中的内部书签。pdfpages
自述建议使用该pax
包用于此目的,所以我从 CTAN 安装了该包并刷新了我的数据库(MiKTeX 2.9)。
我在跑步Windows 7(64 位)并安装了 JRE 和 JDK(按顺序)和 Strawberry Perl(到文件夹C:\StrawberryPerl\
)。
我从以下网址下载了 PDFBox 0.7.3 版(据称与 兼容pax
)http://sourceforge.net/projects/pdfbox/files/并将其安装到C:\PDFBox
。
然后我将C:\PDFBox\
其添加C:\MiKTeX\scripts\pax\
到我的系统Path
变量并重新启动。
然后我pdfannotextractor.pl
使用命令行安装:
perl C:\MiKTeX\scripts\pax\pdfannotextractor.pl --install
结果如下:
C:\>perl C:\MiKTeX\scripts\pax\pdfannotextractor.pl --install PDFAnnotExtractor 0.1l,2012/04/18 - 版权所有 (c) 2008、2011、2012 Heiko Oberdiek。 * 无需执行任何操作,因为已经找到 PDFBox: 目录:\PDFBox 目录:\>
看来PDFBox
安装得还不错。但是,当我尝试pax
使用以下命令运行脚本时:
java -jar C:\MiKTeX\scripts\pax\pax.jar FileWithBookmarks.pdf
我得到这个结果:
线程“main”中出现异常 java.lang.NoClassDefFoundError: org/pdfbox/cos/ICOSVisitor 在 java.lang.Class.getDeclaredMethods0(本机方法) 在 java.lang.Class.privateGetDeclaredMethods(未知来源) 在 java.lang.Class.getMethod0(未知来源) 在 java.lang.Class.getMethod(未知来源) 在 sun.launcher.LauncherHelper.getMainMethod(未知来源) 在 sun.launcher.LauncherHelper.checkAndLoadMain(未知来源) 原因:java.lang.ClassNotFoundException:org.pdfbox.cos.ICOSVisitor 在 java.net.URLClassLoader$1.run(未知来源) 在 java.net.URLClassLoader$1.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(未知来源) 在 java.lang.ClassLoader.loadClass(未知来源) 在 sun.misc.Launcher$AppClassLoader.loadClass(未知来源) 在 java.lang.ClassLoader.loadClass(未知来源) ... 另外 6 个
如果我使用以下命令:
perl C:\MiKTeX\scripts\pax\pdfannotextractor.pl FileWithBookmarks.pdf
我得到与上面相同的 java 异常。
有人可以帮忙吗?
更新: 添加C:\PDFBox\
到我的 CLASSPATH 后,这是我的命令和调试结果:
C:\>perl C:\MiKTeX\scripts\pax\pdfannotextractor.pl --debug FileWithBookmarks.pdf PDFAnnotExtractor 0.1l,2012/04/18 - 版权所有 (c) 2008、2011、2012 Heiko Oberdiek。 * 类路径:[.;C:\Program Files (x86)\Java\jre6\lib\ext\QTJava.zip;C:\PDFBox\] * 获胜: [1] * 哪个 kpsewhich:[C:\MiKTeX\miktex\bin\kpsewhich.EXE] * 反引号:[kpsewhich --progname pdfannotextractor --format texmfscripts pax.jar] * 退出代码:[0/成功] * pax.jar:[C:/MiKTeX/scripts/pax/pax.jar] * CLASSPATH 中的 PDFBox:[是] * 哪个 java:[C:\Windows\system32\java.EXE] * 系统:[java -cp C:/MiKTeX/scripts/pax/pax.jar;C:\PDFBox;.;C:\Program Files (x86)\Java\jre6\lib\ext\QTJava.zip;C:\PDFBox\ pax.PDFAnnotExtractor FileWithBookmarks.pdf] 用法:java [-options] class [args...] (执行课程) 或 java [-options] -jar jarfile [args...] (执行 jar 文件) 其中选项包括: -d32 使用 32 位数据模型(如果可用) -d64 使用 64 位数据模型(如果可用) -server 选择“服务器”虚拟机 -hotspot 是“服务器”虚拟机的同义词[已弃用] 默认虚拟机是服务器。 -cp -类路径 ; 分隔的目录列表、JAR 档案、 和 ZIP 档案来搜索类文件。 -D= 设置系统属性 -详细[:类|gc|jni] 启用详细输出 -version 打印产品版本并退出 -版本: 需要运行指定版本 -showversion打印产品版本并继续 -jre-限制搜索|-no-jre-限制搜索 在版本搜索中包含/排除用户私有 JRE -? -help 打印此帮助信息 -X 打印非标准选项的帮助 -ea[:...|:] -启用断言[:...|:] 启用指定粒度的断言 -da[:...|:] -禁用断言[:...|:] 禁用指定粒度的断言 -esa | -启用系统断言 启用系统断言 -dsa|-禁用系统断言 禁用系统断言 -agentlib:[=] 加载本机代理库,例如 -agentlib:hprof 另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help -代理路径:[=] 通过完整路径名加载本机代理库 -javaagent:[=] 加载 Java 编程语言代理,参见 java.lang.instrument -溅: 显示具有指定图像的启动画面 有关更多详细信息,请参阅http://www.oracle.com/technetwork/java/javase/documentation/index.html。 * 退出代码:[1] 目录:\>
答案1
除了 Heiko 的回答之外,只是为了方便(仅限 Windows):
在本地 texmf 树的子文件夹下创建一个文件pax.bat
(或者pax.cmd
或任何你喜欢的名称pax
)bin
。在 MiKTeX 下,你可能需要先创建一个:在 MiKTeX 中创建本地 texmf 树。
现在首选的变体:执行 perl 文件(需要安装 Perl 发行版):
编辑pax.bat
,调整路径以适应您的设置
@echo off
SETLOCAL
set CLASSPATH=C:\PDFBox\lib\PDFBox-0.7.3.jar;%CLASSPATH%
perl C:\MiKTeX\scripts\pax\pdfannotextractor.pl %*
set CLASSPATH
如果您创建路径,甚至可以省略该行<localtexmf>\scripts\pax\lib
,将PDFBox-0.7.3.jar
其放入并刷新文件名数据库(fndb)。
然后在命令提示符下,您可以调用pax FileWithBookmarks.pdf
或pax --debug FileWithBookmarks.pdf > paxdebug.log
。这假设系统路径上没有其他pax.exe
或类似的路径,否则请始终使用 进行调用pax.bat ...
。
直接执行 java稍微复杂一点:
再次编辑pax.bat
并调整路径以适应您的设置
@echo off
SETLOCAL
set CLASSPATH=C:\PDFBox\lib\PDFBox-0.7.3.jar;C:\MiKTeX\scripts\pax\pax.jar;%CLASSPATH%
java pax.PDFAnnotExtractor %*
请注意,pax.jar
已添加到类路径中。我更喜欢设置环境变量CLASSPATH
,但命令行选项-classpath
(或简称-cp
)也同样有效,如 Heiko 所示。
答案2
除非您在 中有一个解压的 PDFBox C:\PDFBox
,否则CLASSPATH
是错误的。需要的是文件,而不是目录.jar
:C:\PDFBox\PDFBox-0.7.3.jar
。
不需要C:\PDFBox\
将C:\MiKTeX\scripts\pax\
其添加到系统Path
变量中。
java
选项的参数中的空格-cp
不应该是问题,因为 Perl 脚本使用函数的数组形式system
。但可以进行测试:
java -cp "C:\MiKTeX\scripts\pax\pax.jar;C:\PDFBox\PDFBox-0.7.3.jar" pax.PDFAnnotExtractor FileWithBookmarks.pdf
评论:
:
在 Linux/Unix 中,使用路径分隔符代替;
。- Project
pax
不支持 的较新版本PDFBox
。支持的版本是0.7.2
和0.7.3
。
答案3
在本安装教程中,我们依赖巧克力味,因为它大大简化了安装。
准备步骤
要安装 chocolatey,请以管理员权限打开 cmd 并运行:
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
看https://chocolatey.org/install了解详情。然后,请按照以下步骤操作:
- 安装Java运行时环境使用
choco install jre8
。巧克力页面。 - 使用 安装 unzip、wget 和 curl
choco install unzip wget curl
。 - 使用 安装 perl
choco install strawberryperl
。巧克力页面。
微特克斯
- 使用 MiKTeX 包管理器安装 pax
C:\MiKTeX
。 - 执行
perl C:\MiKTeX\scripts\pax\pdfannotextractor.pl --install
以启用下载适合 pax 的 pdfbox 版本。 - 忽略有关“MiKTeX 配置实用程序”的错误
- 启动“MiKTeX 设置”
- 点击“刷新 FNDB”
- 点击“更新格式”
- 现在,
pdfannotextractor.pl
准备出发
特克斯利夫
- 执行
mkdir "C:/Users/USERNAME/.texlive2018"
- 执行
perl C:\texlive\2018\texmf-dist\scripts\pax\pdfannotextractor.pl --install
如果第一个命令执行错误,你会看到如下内容:
> perl perl C:\texlive\2018\texmf-dist\scripts\pax\pdfannotextractor.pl --install
PDFAnnotExtractor 0.1l, 2012/04/18 - Copyright (c) 2008, 2011, 2012 by Heiko Oberdiek.
!!! Error: Cannot create directory `C:/Users/Oliver/.texlive2018/texmf-var'!