Что я делаю:
Я пытаюсь создать файл 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
, так что от него мало пользы для меня.
Любые идеи или предложения приветствуются.