如何在 Windows 上安装 PDFBox 以使其与 pax 一起工作?

如何在 Windows 上安装 PDFBox 以使其与 pax 一起工作?

我正在尝试使用pdfpages和维护所包含 PDF 文件中的内部书签。pdfpages自述建议使用该pax包用于此目的,所以我从 CTAN 安装了该包并刷新了我的数据库(MiKTeX 2.9)。

我在跑步Windows 7(64 位)并安装了 JRE 和 JDK(按顺序)和 Strawberry Perl(到文件夹C:\StrawberryPerl\)。

我从以下网址下载了 PDFBox 0.7.3 版(据称与 兼容paxhttp://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或任何你喜欢的名称paxbin。在 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.pdfpax --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是错误的。需要的是文件,而不是目录.jarC:\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 中,使用路径分隔符代替;
  • Projectpax不支持 的较新版本PDFBox。支持的版本是0.7.20.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了解详情。然后,请按照以下步骤操作:

微特克斯

  • 使用 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'!

(灵感来自https://tex.stackexchange.com/a/44104/9075

相关内容