Javascript 尝试使用pdf lib在客户端用来自服务器的JSON数据填充pdf表单字段,有两个问题

Javascript 尝试使用pdf lib在客户端用来自服务器的JSON数据填充pdf表单字段,有两个问题,javascript,json,pdf,pdf-form,Javascript,Json,Pdf,Pdf Form,我正在研究使用pdf库表单操作pdf表单。该软件包位于以下位置: 已编辑在获得正确的脚本标记库后,仅包含至少部分工作的代码段的问题。我有一个示例表单,其中表单字段填充在以下url中: 在这里放一些主要有效的代码。示例的url在上面,虚拟数据也在这里: 该代码段不起作用,因为它无法调用外部url,但很容易在本地主机上设置。我想做的第一部分几乎是工作,即用JSON文件中的数据或稍后从DB中填充表单字段 我不确定单选按钮和复选框是否正常工作,因为我看到许多单选按钮出现如下错误。可能只是设置正确,但我

我正在研究使用pdf库表单操作pdf表单。该软件包位于以下位置:

已编辑在获得正确的脚本标记库后,仅包含至少部分工作的代码段的问题。我有一个示例表单,其中表单字段填充在以下url中:

在这里放一些主要有效的代码。示例的url在上面,虚拟数据也在这里:

该代码段不起作用,因为它无法调用外部url,但很容易在本地主机上设置。我想做的第一部分几乎是工作,即用JSON文件中的数据或稍后从DB中填充表单字段

我不确定单选按钮和复选框是否正常工作,因为我看到许多单选按钮出现如下错误。可能只是设置正确,但我不知道如何设置这些似乎。我尝试将选项设置为“是”、“否”、“1”、“0”(有时“2”表示“NA”),但仍然存在一些问题

`option` must be one of '1' or 'Yes', but was actually ' 0'
`option` must be one of '1' or 'Yes', but was actually '0'
`option` must be one of '1' or 'Yes' or 'Yes', but was actually '2'
从长远来看,我希望将表单展平,并可能将表单数据提交到数据库和/或提交已填写表单的PDF版本以上载到文件系统。需要先让第一部分工作

$(“#pdf”)。加载时,函数(e){
自动调整大小($(此));
});
函数自动调整大小(iframe){
//iframe.height($(iframe.contents().find('html').height());
i框架高度(“1650px”);
i帧宽度(“1275px”);
iframe.show();
}
$(文档).ready(函数(){
console.log(“准备就绪!”);
$('#preauthform')。更改(函数(){
decoded=JSON.parse($(this.val());
var formurl=decoded.formurl;
//从后端获取formfield数据JSON可能需要传递参数来动态创建要返回的数据。
//现在使用原始JSON,可以在PHP中使用DB和JSON_encode()对数据进行编码。
$.ajax({
类型:“POST”,
url:decoded.dataurl,
数据类型:“json”,
数据:{},
})
.done(函数(数据、文本状态、jqXHR){
RenderData(formurl、数据);
});
});
const{PDFDocument,PDFDocumentWriter,rgb}=PDFLib
异步函数RenderData(表单、字段){
const url_file=form
const formPdfBytes=wait fetch(url\u文件)。然后(res=>res.arrayBuffer())
const PDFDocument=PDFLib.PDFDocument
//从现有PDF字节加载PDFDocument
const pdfDoc=等待PDFDocument.load(formPdfBytes)
//获取包含所有字段的表单
var formfields=pdfDoc.getForm()
//注册'fontkit'实例
//pdfDoc.registerFontkit(fontkit)
//在文档中嵌入自定义字体
//const customFont=await pdfDoc.embedFont(fontBytes)
//遍历表单数据并根据类型填充。
$.each(字段、函数(字段名、字段数据){
console.log(字段名);
控制台日志(现场数据);
开关(fielddata.type){
案例“文本”:
试一试{
formfields.getTextField(fieldname).setText(fielddata.value);
}
捕捉(错误){
控制台日志(错误消息);
}
打破
案例“无线电”:
试一试{
formfields.getRadioGroup(fieldname)。选择(fielddata.value);
console.log(“将收音机设置为”+fielddata.value);
}
捕捉(错误){
控制台日志(错误消息);
}
打破
案例“检查”:
试一试{
如果(fielddata.value==“0”){
formfields.getCheckBox(fieldname).uncheck();
}
else formfields.getCheckBox(fieldname.check();
console.log(“将检查设置为”+fielddata.value);
}
捕捉(错误){
控制台日志(错误消息);
}
打破
违约:
}
});
const pdfBytes=await pdfDoc.saveAsBase64({dataUri:true})
//console.log(pdfBytes)
//窗口。打开(pdfBytes,“_blank”);
document.getElementById('pdf').src=pdfBytes;
//下载(pdfBytes,“pdf-lib_creation_example.pdf”,“application/pdf”);
}
});

挑选
MRI-Windows.pdf