[英]PDF.js Setting a field value?
我希望你们一切都好。 所以我已经使用 Mozilla 的 PDF.js 一段时间了。 我们用它来显示 PDF forms 以在移动应用程序上填写。 一切都很好,我只是想实现一个功能,您可以在其中缓存用户条目,以便他们可以从他们离开的地方恢复。 由于一些原因,我不能只下载 PDF 来保存它,然后在他们要恢复时重新加载它。
本质上,我想存储所有用户条目和每个条目的字段 ID,我已经开始工作了,然后当用户想要恢复时,我希望它加载空的 PDF,然后自动重新填充所有具有缓存条目的字段。
我知道我可以设置单独的文本字段,但是当我这样做时它不适用于 annotationStorage 所以当我解析表单时,这些字段被读取为空白。
我尝试了以下代码行,试图设置一个 ID 为“5R”的字段值
PDFViewerApplication.pdfDocument.annotationStorage.setValue('5R', "Shirboogle");
PDFViewerApplication.pdfDocument.annotationStorage.getAll()['5R'].value = "Shirboogle";
var objs = await PDFViewerApplication.pdfDocument.getFieldObjects();
objs['Address 1 Text Box'][0].value = "Shirboogle";
// and
objs['Address 1 Text Box'][0].defaultValue = "Shirboogle";
// This will actually set the value of the text field, but when I look for it in annotationStorage OR
// getFieldObjects() the value is still unchanged.
document.getElementById('pdfjs_internal_id_5R').value = 'Shapoopsies';
以及许多其他尝试。 我找遍了,似乎没有可用的东西,所以如果您有任何想法,请告诉我!
如果有人遇到这个问题,这是我想出的解决方案。 它似乎非常适合我的用例,但可能不足以满足所有情况。 我想我至少会分享我的工作。
它基本上手动设置所有内容。 仍然有一些 UI 元素我需要做一个 if 语句来设置,但无论如何。 这是我的代码。 祝你好运:)
function getFieldValue(id) {
return PDFViewerApplication.pdfDocument.annotationStorage.getAll()[id].value;
}
async function getFieldObjById(id) {
var objs = await PDFViewerApplication.pdfDocument.getFieldObjects();
for(var i=0; i<Object.values(objs).length; i++) {
if(Object.values(objs)[i][0].id == id) {
return Object.values(objs)[i][0];
}
}
}
async function setFieldValue(id, val) {
var fElementId = "pdfjs_internal_id_" + id;
var fObject = await getFieldObjById(id);
var objType = fObject.type;
// Depending on the element type we set the value accordingly.
if(objType == 'text') {
document.getElementById(fElementId).value = val;
PDFViewerApplication.pdfDocument.annotationStorage.setValue(id, {value: val});
}
else if(objType == 'checkbox') {
document.getElementById(fElementId).checked = val;
PDFViewerApplication.pdfDocument.annotationStorage.setValue(id, {value: val});
}
else if(objType == 'combobox') {
document.getElementById(fElementId).selectedIndex = val;
var sLabel = document.getElementById(fElementId).options[document.getElementById(fElementId).selectedIndex].label;
PDFViewerApplication.pdfDocument.annotationStorage.setValue(id, {value: sLabel});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.