Puppeteer PDF 标题和作者(元数据)

lir*_*ron 5 pdf metadata author title puppeteer

在我所有的搜索和代码挖掘都没有帮助之后,我在这里寻求提示:

如何使用 Puppeteer PDF 生成来设置文件的元数据(特别是标题和作者)?

我试过在我的 HTML 中设置元标记,但它没有将这些输出到文件元数据中。

Gra*_*ler 9

Puppeteer 没有内置功能来编辑或将元数据写入 PDF。

相反,您可以安装exiftool命令行实用程序来编辑使用 Puppeteer 生成的 PDF 的元数据:

sudo apt install libimage-exiftool-perl
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用 Node.jschild_process.exec()函数在生成 PDF 后从您的程序调用命令行实用程序:

'use strict';

const puppeteer = require('puppeteer');
const exec = require('util').promisify(require('child_process').exec);

const execute = async command => {
  const {stdout, stderr} = await exec(command);

  console.log((stderr || stdout).trim());
};

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.goto('https://example.com/');

  await page.pdf({
    path: 'example.pdf',
  });

  await execute('exiftool -title="Example PDF" -author="John Doe" /var/www/example.com/public_html/example.pdf');

  await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)


Ste*_*e L 8

接受的答案是正确的,目前Puppeeter不支持设置pdf元数据。但我只是想提供一个使用节点包而不是本机库的解决方案:pdf-lib

你需要 :

  • 使用 puppeeter 生成 pdf
  • 使用返回的缓冲区加载 pdf'libPdfDocument
  • 设置你想要的元数据
  • 发送(和/或保存)结果文档
import puppeteer from 'puppeteer'
import { PDFDocument } from 'pdf-lib'
import fs from 'fs'

// generate pdf page as usual with puppeeter
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.setContent(`Some html`),
const puppeeterPdf = await page.pdf()
await browser.close()

// Give the buffer to pdf-lib
const pdfDoc = await PDFDocument.load(puppeeterPdf)
pdfDoc.setTitle('A title')
pdfDoc.setAuthor('An author')
const pdfBytes = await pdfDoc.save()

// write to disk
await fs.promises.writeFile('path/to/file.pdf', pdfBytes)
// send via http
res.send(Buffer.from(pdfBytes))
Run Code Online (Sandbox Code Playgroud)