【问题标题】:Node JS pdf-lib - Fill Form - Either missing template or form fields undefinedNode JS pdf-lib - 填写表单 - 缺少模板或表单字段未定义
【发布时间】:2021-12-19 06:54:18
【问题描述】:

我在另一篇文章中看到了PDFescape,并尝试了编辑表单字段名称。运行我的 prog 并确实填写了表单字段,但我的模板文件中的其余内容丢失了。

我尝试了Fill Form 示例文件,但它找不到表单字段名称,所以我还将它加载到 PDFescape 并从那里保存,然后模板的其余部分丢失但表单字段已填充的相同结果.

我认为 PDFescape 可能是问题,所以我购买了 Adob​​e 试用版以便能够编辑表单字段名称,但又一次,pdf-lib 找不到它们(错误:PDFDocument 没有名称为“的表单字段” prodCode") 即使肯定是这样保存的 -

我到底哪里错了?!供您参考的代码 -

const { PDFDocument } = require('pdf-lib');
const fs = require('fs');

(async () => {

    const pdfUTF8 = fs.readFileSync('./test.pdf','utf8')
    var formPdfBytes = new TextEncoder("utf-8").encode(pdfUTF8);
  
    // Load a PDF with form fields
    const pdfDoc = await PDFDocument.load(formPdfBytes)

    // Get the form containing all the fields
    const form = pdfDoc.getForm()

    // Get all fields in the PDF by their names
    const productCodeField = form.getTextField('prodCode')
    const certNumberField = form.getTextField('certNumber')

    productCodeField.setText('Product code here')
    certNumberField.setText('Cert number here')

    // Serialize the PDFDocument to bytes (a Uint8Array)
    const pdfBytes = await pdfDoc.save()

    const data = fs.writeFileSync('./done.pdf', new Buffer.from(pdfBytes))

})().catch(e => {
  console.log(e)
});

【问题讨论】:

    标签: node.js


    【解决方案1】:

    我阅读了十几个包的文档并实现了大约 5 个,唯一一个我可以在 Node JS 中满足要求并且可以从我的 MongoDB 加载远程 PDF 文件并将其填写为pdfform.js

    const pdfform = require('pdfform.js');
    
    const Mail = require('./tools/sendgrid/sendgrid');
    
    const mongoose = require('mongoose');
    
    mongoose.connect(process.env.MONGODB_URI, {useNewUrlParser: true, useUnifiedTopology: true})
    const db = mongoose.connection
    db.on('error', (error) => console.error(error))
    db.once('open', () => console.log('Connected to Database'))
    
    
    db.collection('warrantycerts').findOne({_id : 4}, function(err, doc){
        if (err) {
            console.error(err);
        }
        
        const pdf_buf = doc.bin.buffer
    
        var pdfFieldsJson = pdfform().list_fields(pdf_buf)
    
        console.log(pdfFieldsJson)
    
        var fields = {
            'prodCode': ['prod code here'],
            'certNumber': ['cert here'],
            'model': ['model here'],
            'serial': ['serial here'],
            'date': ['11-10-21'],
        };
    
        var out_buf = pdfform().transform(pdf_buf, fields);
    
        Mail.emailAttach(me, 'testing', 'testing', 'cert_test.pdf', new Buffer.from(out_buf).toString('base64'))
    
    })
    

    关于 pdf-lib 的仅供参考的问题是 submitted,但还没有太大的吸引力。

    【讨论】:

      猜你喜欢
      • 2017-07-26
      • 2020-03-15
      • 1970-01-01
      • 1970-01-01
      • 2018-02-15
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多