Дата истечения срока действия PDF-файлов в узле

#node.js #pdf

#node.js #PDF

Вопрос:

Я пытаюсь сгенерировать PDF-файл с датой истечения срока действия (автоматически истекает через 24 часа).

У меня большой опыт работы с pdf-библиотекой, но при поиске в их репозитории нет упоминания о сроках годности.

Я также нашел две статьи о том, как это сделать на C # и Python:

  1. 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
  2. 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.