3

我正在编写一个 Java 实用程序,它使用 DITA 工具包和 Apache FOP 执行批处理文件以生成 PDF。它通过使用 pdftk 为首页添加水印来完成。如果我在 Windows 中使用 Start>CMD 执行批处理文件,批处理文件中的这一行有效:

pdftk "%DITA_OUTPUT%book.pdf" multibackground C:\doc_build_system\watermark.pdf output "%DITA_OUTPUT%external.pdf" compress verbose

当我通过 Runtime.exec() 执行批处理文件时,同一行失败。

失败的原因是通过Java执行时PATH变量不完整。它应该有一个类似的条目:

C:\Program Files (x86)\PDFtk Server\bin\

...但事实并非如此。我试图通过调用 runtime.exec("cmd /c batchfile.bat") (而不是直接调用批处理文件)来强制通过 CMD 执行,但这也没有效果。

有任何想法吗?

4

2 回答 2

1

您可以尝试在 cmd 中启动 java 之前手动设置路径:

开始cmd.exe。然后输入:

SET PATH=%PATH%;C:\Program Files (x86)\PDFtk Server\bin
java MyProgram

如果这有效,您必须检查是否编辑了正确的 PATH 变量。在 Windows 中,您可以为每个用户使用不同的 PATH 环境变量,此外还有一个系统范围的 PATH 变量(见屏幕截图)将始终应用并与用户变量组合。 在此处输入图像描述

例如,如果您确实为您的用户设置了路径,然后使用管理员提升权限来执行 java,则 PATH 将无法正确设置。

确保使用系统变量。

还要确保在编辑变量后重新启动窗口,因为打开的应用程序和控制台通常只会在启动时获取一次环境变量。

于 2013-09-03T15:14:44.153 回答
0

只需pathmanWindows Server 2003 Resource Kit中获取:

用法:

        /as 路径[;路径[;路径 ...]]
                将分号分隔的路径添加到系统路径。

        /au 路径[;路径[;路径 ...]]
                将分号分隔的路径添加到用户路径。

        /rs 路径[;路径[;路径 ...]]
                从系统路径中删除分号分隔的路径。

        /ru 路径[;路径[;路径 ...]]
                从用户路径中删除分号分隔的路径。

于 2013-09-03T20:22:28.560 回答