javascript - 任何提供可调 dpi、可选文本和 CSS 支持的 HTML 到 PDF 渲染器?

标签 javascript php c++ pdf pdf-generation

我正在使用 Vue 为客户构建规范表,需要制作可查看和可打印的 PDF。

我一直在尝试 Puppeteer,但从我在网上看到的情况来看(如果我错了请纠正我),Puppeteer 不支持可选择的文本,也不支持调整 PDF 的 DPI。我还遇到 Puppeteer 以低质量呈现 PDF 的问题 - 字体模糊/没有抗锯齿。

有哪些(如果有的话)PDF 渲染器

  • 将 HTML 页面呈现为 PDF*
  • 支持可选文本*
  • 允许调整 DPI*
  • CSS 支持*(即它将呈现 CSS)
  • 可以接受URL作为参数
  • 允许多个页面
  • 并在 Node/Javascript 中运行(可选)

编辑:到目前为止我发现的最好的是 eKoopmans html2pdf ,但不幸的是,它不允许选择文本(据我所知)——这是一个交易破坏者。

似乎没有这样的 javascript 包,所以如果有 PHP 或 C++ 中的包 - 它也会被考虑。

最佳答案

我找到的最佳解决方案是 ebdrup/html2pdf.it .您可以找到现场演示 here .它使用 Phantom JS,似乎支持我需要的所有功能,但我尚未测试的分页符除外。

下一个障碍是弄清楚如何提取必要的函数,这样我就可以在我的脚本中使用这些功能,而不必传递 GET 查询字符串(这值得它自己的问题)。

编辑:我没有意识到的一个问题是似乎没有办法延迟 PDF 的生成,这是一个问题,因为我使用的是 Vue 并且必须先构建页面。

编辑 2020:

在这篇文章之后,我重新访问了 Puppeteer,它可以处理我需要的一切。

调整DPI

您可以通过设置页面视口(viewport)来调整 DPI。

Puppeteer 等同于 1in = 96px . ctrl+f 表示 unitToPixels

例子。

const browser = puppeteer.launch();

const page = await browser.newPage();

// Multiply the desired length in inches by 96
await page.setViewport({ 
   width: 8.5 * 96,
   height: 11 * 96,
});

等待...

您可以在完成之前等待选择器。在我的例子中,我将一个类附加到主体以供 Puppeteer 收听和捕获。

const browser = puppeteer.launch();

const page = await browser.newPage();

const html = buildDOM();  // Has js that appends .finished class to <body>

await page.setContent(html);

await page.waitForSelector('.finished');

关于javascript - 任何提供可调 dpi、可选文本和 CSS 支持的 HTML 到 PDF 渲染器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50394673/

相关文章:

php - 无法使用php jquery和ajax在mysql中输入数据

javascript - PhantjomJS 重定向原始 URL 请求

javascript - 为什么我的按钮上的功能不起作用?

php - 显示产品列表中特定类别的产品

php - 缩小动态 php 样式表

c++ - 仅使用对象的边界查找对象数组的边界

c++ - 在派生类中使用 'virtual'

c++ - 增加初始化列表中使用两次的变量 - 未定义的行为?

javascript - 使用脚本标签 Block 制作 Javascript document.write

javascript - 与 jquery 一起使用的良好模板引擎