Как я могу создать PDF-файл из строки компиляции (подготовленной с помощью пакета handlebars) - PullRequest
0 голосов
/ 05 мая 2020

Что я делаю:
Я пытаюсь создать файл PDF, в котором я заранее готовлю некоторые данные, используя handlebars, а затем мне нужно сгенерировать файл.

То, что у меня есть:
У меня есть код, работающий, когда я компилирую данные с помощью compileWithHandleBar и сохраняю результат в виде файла myData.html.
Затем я использую phantom пакет, чтобы открыть этот файл и сгенерировать PDF.

Это выглядит примерно так (с использованием обещаний старого стиля, поскольку это довольно старый код):

const phantom = require('phantom')
const handlebars = require('handlebars')

const htmlTemplateCache = fs.readFileSync('myTemplate.html', 'utf8')

const compileWithHandleBar = (data) => {
  const template = handlebars.compile(htmlTemplateCache)
  return template(data)
}

const htmlString = compileWithHandleBar(data)
await fs.writeFileSync('myData.html', htmlString)

phantom.create().then((ph) => {
  ph.createPage().then((page) => {
    page.property('paperSize', {
      // ... someStuff,
      footer: {
        height: '2cm',
        contents: ph.callback(function (pageNum, numPages) {
          return 'importnat footer content'
        }),
      }
    })
    page.open('myData.html').then((status) => {
      if (status === 'success') {
        page.render(finalFilePath).then(function (result) {
            console.log('SUCEESS')
        })
      } else {
        console.log('ERROR')
      }
    })
  })
})

Что я ищу для выполнения:
Я бы хотел пропустить шаг, на котором мне нужно сохранить данные в файл, и они «открывают» его с помощью page.open().
Я ОЧЕНЬ осознаю, что этот пакет ( phantom) устарел, но я не могу найти какой-либо другой пакет, который мог бы принимать предварительно скомпилированный вывод handlebars и читать его как строку.

Например:
Я пробовал пакет pdf-html примерно так:

const pdf = require('html-pdf')

pdf.create(htmlString, details).toFile(finalFilePath, function(err, res) {
  if (err) {
    console.log('ERROR:', err)
  }
  return resolve()
})      

Но похоже, что он игнорирует все HTML материал, который я продолжаю с handlebars, так что от него мало пользы для меня.

Любые идеи или предложения приветствуются.

...