4

我们正在使用包princexml pdf转换器从html文件创建一个pdf文件。对于 html 文件的创建,数据由服务器提供。在使用 jquery 的浏览器中,为创建 pdf 创建输入字符串(html 代码)。从浏览器接收输入字符串后,服务器创建一个html文件,该文件是princexml pdf转换器的输入,用于创建pdf。

Example for the input string
var sample = "<html>text</html>";//browser side
sample.html converted to sample.pdf //server side 

没有浏览器的帮助,是否可以在服务器端做同样的事情?

4

7 回答 7

6

我知道这是一个有点老的问题,但是因为我找到了一个很棒的模块,所以我想与大家分享它。

名为Puppeteer的模块,可以让你在 Headless 模式下运行 Chrome并通过 API 与之交互。因此,现在您可以创建一个模板并通过 POST 调用获取该模板的占位符的值,并在 server 中动态生成 PDF

我创建了一个小型 POC,这里是它的链接:Demo-Puppeteer

让我在这里做一点解释:

    ...........
    const content = await compile(templateName, data);

    /***
     * Launched the headless chrome in memory.
     */
    const browser = await puppeteer.launch();

    /***
     * Created a new page(tab)
     */
    const page = await browser.newPage();

    /***
     * Set the content of the new page
     */
    await page.setContent(content, { waitUntil: 'networkidle0' });
    /***
     * Telling chrome to emulate screen i.e how the page looks if 
     * it would have been rendered in the normal browser.
     */
    await page.emulateMedia('screen');

    const byteArray = await page.pdf({
        format: "A4",
        landscape: true,
        scale: 1.29,
        printBackground: true
    });

    const buffer = Buffer.from(byteArray, 'binary');
    /**
     * We don't need the acknowledgement of this call that is the 
     * reason we are not waiting for this call to return.
     */
    browser.close();

    return buffer;
    .......

现在,这个缓冲区基本上是一个二进制数据,你必须使用 Node.js 的文件模块将它写入一个文件中。

如需进一步解释,请查看Exlpanation Link

于 2019-01-29T14:50:40.420 回答
3

你可以使用像http://phantomjs.org/这样的无头浏览器。这允许从渲染页面生成图像。另请参阅http://www.lelesys.com/en/media/technology/phantomjs-as-screen-capture-to-generate-image-pdf-files.html

这允许您使用 jquery 和其他所有内容 - 因为它使用实际渲染引擎。我猜你甚至不需要princexml。还有一个关于捕获的常见问题页面:http: //phantomjs.org/screen-capture.html

于 2015-01-12T10:46:24.397 回答
2

查看wkhtmltopdf - 使用 Webkit (QtWebKit) @ http://wkhtmltopdf.org将 HTML 转换为 PDF

于 2015-01-18T03:10:09.273 回答
2

您可以借助以下任何一个库来实现这一点...

FPDF - FPDF 是一个 PHP 类,它允许使用纯 PHP 生成 PDF 文件,也就是说不使用 PDFlib 库。FPDF 中的 F 代表 Free:您可以将其用于任何用途并根据您的需要进行修改。

HTML2PDF - HTML2PDF 是用 PHP4(使用 FPDF)和 PHP5(使用 TCPDF)编写的 HTML 到 PDF 转换器。它允许将有效的 HTML 4.01 转换为 PDF 格式,并在 LGPL 下分发。

dompdf - dompdf 是一个 HTML 到 PDF 的转换器。从本质上讲,dompdf 是(大部分)用 PHP 编写的符合 CSS 2.1 的 HTML 布局和渲染引擎。它是一个样式驱动的渲染器:它将下载和读取外部样式表、内联样式标签以及单个 HTML 元素的样式属性。它还支持大多数表现形式的 HTML 属性。

GIT 位置https ://github.com/dompdf/dompdf

pdfcrowd - Pdfcrowd API 是一个在线工具,可让您在 PHP 应用程序中轻松地将网页和原始 HTML 代码转换为 PDF。PDF 在云端生成,不需要第三方库。您所需要的只是一个小型 PHP API 客户端库。

于 2015-01-12T11:33:53.723 回答
1

您可以在不使用浏览器的情况下执行此操作。目前您使用 jQuery 来生成 HTML 内容,所以您需要浏览器,因为 jQuery 在浏览器中运行,对吧?

您可以通过编写生成所需 HTML 内容并将其发送到 pdf 转换器的服务器端应用程序来将 HTML 代码的生成移动到服务器端。

Princexml 可以从许多服务器端编程语言中调用,您可以在此处看到:http: //www.princexml.com/doc/9.0/

从列表中选择一种服务器端语言,生成该语言的 HTML 并将 HTML 发送到 pdf 转换器。就这样。

于 2015-01-19T09:49:38.240 回答
1

您可以像这样调用princexml服务器端:

prince sample.html -o sample.pdf 

请参阅命令行文档

于 2015-01-12T12:22:03.803 回答
0

请参阅此处的文档 http://www.princexml.com/doc/7.1/ 您可以选择服务器端语言并完成工作。只需制作一个表格并提交数据。

于 2015-01-16T17:51:03.827 回答