我正在加载 PDF 文档,我需要确保名称具有特定模式的每个字段都转换为 COMB 字段。碰巧某个字段可以重复,这意味着可以找到具有相同字段的另一个字段。
对于每个领域...
const fieldChanged = await PDFNet.runWithCleanup(() => combFieldAdjustmentCallBack(pdfField, configuredMaxLen), this.configurationService.webViewerPDFTronKey);
combFieldAdjustmentCallBack 实现
const combFieldAdjustmentCallBack = async (pdfField: Core.Annotations.Forms.Field,
configuredMaxLen: number) => {
let fieldChanged: boolean;
const itr = await pdfDoc.getFieldIterator(pdfField.name);
for (; await itr.hasNext(); await itr.next()) {
const docField = await itr.current();
// if the field has not set the flag comb; set it and mark the field as changed
const comb = await docField.getFlag(PDFNet.Field.Flag.e_comb);
if (!comb) {
await docField.setFlag(PDFNet.Field.Flag.e_multiline, false);
await docField.setFlag(PDFNet.Field.Flag.e_password, false);
await docField.setFlag(PDFNet.Field.Flag.e_no_spellcheck, true);
await docField.setFlag(PDFNet.Field.Flag.e_no_scroll, true);
await docField.setFlag(PDFNet.Field.Flag.e_rich_text, false);
await docField.setFlag(PDFNet.Field.Flag.e_comb, true);
const comb = await docField.getFlag(PDFNet.Field.Flag.e_comb);
// Always "Field XYZ is a comb field: false"
console.log(`Field ${pdfField.name} is a comb field: ${comb}`);
fieldChanged = true;
}
// Set max length
const currentMaxLength = await docField.getMaxLen();
if (configuredMaxLen != currentMaxLength) {
await docField.setMaxLen(configuredMaxLen);
fieldChanged = true;
}
if (fieldChanged) {
docField.refreshAppearance();
}
return fieldChanged ?? false;
}
};
当字段仅出现一次时,此逻辑有效,但当字段在 PDF 中重复出现时,此逻辑不起作用。请注意 始终“字段 XYZ 是梳状字段: false
我缺少什么
看起来您正在尝试重新定义 const 变量,因此如果将其设置为 false,它将始终为 false。
最诚挚的问候 泰勒
代码是正确的。 该决议是一个经典的开箱即用的决议。
经过一些测试,我们观察到以下行为:
结论
因此,根据我们的测试,我们得出结论,该特定文件中的特定字段存在问题。创建该文件的另一个版本解决了问题。