From d51e7e86ffbb82f2912d3687ab160c4448a68b6d Mon Sep 17 00:00:00 2001 From: Calixte Denizet Date: Wed, 16 Sep 2020 18:47:25 +0200 Subject: [PATCH] Use the same kind of strings for radio values --- src/core/annotation.js | 2 +- test/unit/annotation_spec.js | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/core/annotation.js b/src/core/annotation.js index 20e16ac5f..38ee820c0 100644 --- a/src/core/annotation.js +++ b/src/core/annotation.js @@ -1760,7 +1760,7 @@ class ButtonWidgetAnnotation extends WidgetAnnotation { } for (const key of normalAppearance.getKeys()) { if (key !== "Off") { - this.data.buttonValue = key; + this.data.buttonValue = this._decodeFormValue(key); break; } } diff --git a/test/unit/annotation_spec.js b/test/unit/annotation_spec.js index d19bd08f2..a7713bedf 100644 --- a/test/unit/annotation_spec.js +++ b/test/unit/annotation_spec.js @@ -2133,6 +2133,40 @@ describe("annotation", function () { }, done.fail); }); + it("should handle radio buttons with a field value not an ascii string", function (done) { + const parentDict = new Dict(); + parentDict.set("V", Name.get("\x91I=\x91\xf0\x93\xe0\x97e3")); + + const normalAppearanceStateDict = new Dict(); + normalAppearanceStateDict.set("\x91I=\x91\xf0\x93\xe0\x97e3", null); + + const appearanceStatesDict = new Dict(); + appearanceStatesDict.set("N", normalAppearanceStateDict); + + buttonWidgetDict.set("Ff", AnnotationFieldFlag.RADIO); + buttonWidgetDict.set("Parent", parentDict); + buttonWidgetDict.set("AP", appearanceStatesDict); + + const buttonWidgetRef = Ref.get(124, 0); + const xref = new XRefMock([ + { ref: buttonWidgetRef, data: buttonWidgetDict }, + ]); + + AnnotationFactory.create( + xref, + buttonWidgetRef, + pdfManagerMock, + idFactoryMock + ).then(({ data }) => { + expect(data.annotationType).toEqual(AnnotationType.WIDGET); + expect(data.checkBox).toEqual(false); + expect(data.radioButton).toEqual(true); + expect(data.fieldValue).toEqual("‚I=‚ðfiàŠe3"); + expect(data.buttonValue).toEqual("‚I=‚ðfiàŠe3"); + done(); + }, done.fail); + }); + it("should handle radio buttons without a field value", function (done) { const normalAppearanceStateDict = new Dict(); normalAppearanceStateDict.set("2", null);