我正在编写一个Java实用程序,它使用DITA工具包和Apache FOP执行批处理文件以生成PDF。它通过使用pdftk为首页添加水印来完成。如果我使用“开始”> CMD在Windows中执行批处理文件,批处理文件中的这一行将起作用:
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(而不是直接调用批处理文件),但这也没有效果。
有什么想法吗?
答案 0 :(得分:1)
您可以尝试在cmd中启动java之前手动设置路径:
开始cmd.exe
。然后输入:
SET PATH=%PATH%;C:\Program Files (x86)\PDFtk Server\bin
java MyProgram
如果这样做,你必须检查是否编辑了正确的PATH变量。在Windows中,您可以为每个用户提供不同的PATH环境变量,此外还有一个系统范围的PATH变量(请参见屏幕截图),该变量将始终应用并与用户变量结合使用。
e.g。如果您确实为用户设置了路径,然后使用管理员提升权限来执行java,则PATH将无法正确设置。
确保使用系统变量。
还要确保在编辑变量后重新启动窗口,因为打开的应用程序和控制台通常只会在启动时获取环境变量。
答案 1 :(得分:0)
从Windows Server 2003 Resource Kit获取pathman
:
USAGE: /as path[;path[;path ...]] Adds the semicolon-separated paths to the system path. /au path[;path[;path ...]] Adds the semicolon-separated paths to the user path. /rs path[;path[;path ...]] Removes the semicolon-separated paths from the system path. /ru path[;path[;path ...]] Removes the semicolon-separated paths from the user path.