6

嗨,我是 phantomjs 的新手,

我已经使用命令生成了 HTML 到 PDF。但我想通过单击页面上的按钮来生成 PDF。并通过某种方式调用 phantomjs 以生成我给定的 pdf URL。

您还可以建议一些 api 生成带有图表和图像的 HTML 格式的 PDF,并且可以轻松地与 JSP 和 Servlet 集成。

4

2 回答 2

23

我假设您想要做的是从 Java 代码中运行 phantomjs 可执行文件。

您首先需要知道要执行的命令的完整路径,在您的情况下是 phantomjs。如果您下载了 zip,这是您将文件解压缩到的目录,您可以在其中看到 phantomjs.exe 可执行文件。如果您通过包管理器下载它,要找出从终端运行的完整路径:

which phantomjs

这将显示类似

/usr/bin/phantomjs

一旦你有了它,你将不得不使用Runtime类,除其他外,它允许你使用 exec 直接在操作系统上运行命令。然后,您运行的内容将作为进程处理,您可以使用该进程从中读取命令的输出。

一个没有您应该做的任何异常处理的快速示例。

    Process process = Runtime.getRuntime().exec("/usr/bin/phantomjs myscript.js");
    int exitStatus = process.waitFor();
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader (process.getInputStream()));

    String currentLine=null;
    StringBuilder stringBuilder = new StringBuilder(exitStatus==0?"SUCCESS:":"ERROR:");
    currentLine= bufferedReader.readLine();
    while(currentLine !=null)
    {
        stringBuilder.append(currentLine);
        currentLine = bufferedReader.readLine();
    }
    System.out.println(stringBuilder.toString());

确保进行正确的错误处理,因为您正在创建 JVM 外部的进程,JVM 不能完全控制它,如果您不能很好地管理错误,可能会给程序的其余部分带来问题。

于 2013-06-03T06:50:22.057 回答
2

从 phantomjs 版本 1.8 开始提供 Ghost Driver,它是 WebDriver Wire Protocol 的一种实现。

它允许将 phantomjs 作为远程服务器启动,从而实现与它的 http 通信。

$ phantomjs --webdriver=PORT

这使得与任何编程语言的集成变得容易

有关更多详细信息,请查看此处

于 2014-02-07T08:20:31.393 回答