#node.js #pdf
#node.js #PDF
Вопрос:
Я пытаюсь сгенерировать PDF-файл с датой истечения срока действия (автоматически истекает через 24 часа).
У меня большой опыт работы с pdf-библиотекой, но при поиске в их репозитории нет упоминания о сроках годности.
Я также нашел две статьи о том, как это сделать на C # и Python:
- C # / VB: https://www.e-iceblue.com/Tutorials/Spire.PDF/Spire .PDF-Program-Guide/Security/How-to-Add-Expiry-Date-to-PDF-Files-in-C-VB.NET.html
- https://docs.aspose.com/pdf/java/set-pdf-expiration-in-python/
Я пытаюсь сделать так, чтобы срок действия PDF-файла истекал на устройстве пользователя после того, как он загрузил его с сервера, и с удивлением обнаружил, что в области node / pdf поддержки не так много.
Есть предложения? Возможно ли это?
import { PDFDocument, StandardFonts, rgb } from 'pdf-lib'
const pdfDoc = await PDFDocument.create()
const timesRomanFont = await pdfDoc.embedFont(StandardFonts.TimesRoman)
const page = pdfDoc.addPage()
const { width, height } = page.getSize()
const fontSize = 30
page.drawText('Creating PDFs in JavaScript would be great if the PDF had an expiry date!', {
x: 50,
y: height - 4 * fontSize,
size: fontSize,
font: timesRomanFont,
color: rgb(0, 0.53, 0.71),
})
// TODO: add expiry before the save.
const pdfBytes = await pdfDoc.save()
Ответ №1:
Вы можете использовать addJavascript
метод, чтобы ваш код выглядел так:
import { PDFDocument, StandardFonts, rgb } from 'pdf-lib'
const pdfDoc = await PDFDocument.create()
const timesRomanFont = await pdfDoc.embedFont(StandardFonts.TimesRoman)
pdfDoc.addJavaScript(
'main',
'var year=2020; var month=11;today = new Date();today = new Date(today.getFullYear(), today.getMonth());expiry = new Date(year, month);if (today.getTime() > expiry.getTime())app.alert("The file is expired. You need a new one.");',
);
const page = pdfDoc.addPage()
const { width, height } = page.getSize()
const fontSize = 30
page.drawText('Creating PDFs in JavaScript would be great if the PDF had an expiry date!', {
x: 50,
y: height - 4 * fontSize,
size: fontSize,
font: timesRomanFont,
color: rgb(0, 0.53, 0.71),
})
const pdfBytes = await pdfDoc.save()
Вы можете подробнее изучить это там https://github.com/Hopding/pdf-lib/commit/30d2aa22c0c0d694189ae3202562d4c0565cce42
Комментарии:
1. Не похоже, что addJavascript был добавлен ни в одну из их выпущенных версий, какую версию вы используете?
2. да, они добавили его 9 дней назад и еще не выпустили. Но вы можете клонировать их репозиторий непосредственно из главной ветки и использовать
npm run build
команду для создания версии сaddJavascript
функцией. Я только что попробовал, и все сработало нормально.3. В Firefox я вижу всплывающее окно с предупреждением, но после нажатия кнопки «ОК» я могу продолжить чтение pdf.