@pdfme/pdf-lib
Version:
Create and modify PDF files with JavaScript
142 lines • 6.73 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = __importDefault(require("fs"));
const index_1 = require("../../../src/index");
const fancyFieldsPdfBytes = fs_1.default.readFileSync('assets/pdfs/fancy_fields.pdf');
describe(`PDFRadioGroup`, () => {
it(`can read its options`, async () => {
const pdfDoc = await index_1.PDFDocument.load(fancyFieldsPdfBytes);
const form = pdfDoc.getForm();
const historicalFigures = form.getRadioGroup('Historical Figures 🐺');
expect(historicalFigures.getOptions()).toEqual([
'Marcus Aurelius 🏛️',
'Ada Lovelace 💻',
'Marie Curie ☢️',
'Alexander Hamilton 🇺🇸',
]);
});
it(`can read its selected value`, async () => {
const pdfDoc = await index_1.PDFDocument.load(fancyFieldsPdfBytes);
const form = pdfDoc.getForm();
const historicalFigures = form.getRadioGroup('Historical Figures 🐺');
expect(historicalFigures.getSelected()).toEqual('Marcus Aurelius 🏛️');
});
it(`can clear its value`, async () => {
const pdfDoc = await index_1.PDFDocument.load(fancyFieldsPdfBytes);
const form = pdfDoc.getForm();
const historicalFigures = form.getRadioGroup('Historical Figures 🐺');
historicalFigures.clear();
expect(historicalFigures.getSelected()).toBe(undefined);
});
it(`can select a value`, async () => {
const pdfDoc = await index_1.PDFDocument.load(fancyFieldsPdfBytes);
const form = pdfDoc.getForm();
const historicalFigures = form.getRadioGroup('Historical Figures 🐺');
historicalFigures.select('Marie Curie ☢️');
expect(historicalFigures.getSelected()).toBe('Marie Curie ☢️');
});
it(`can read its flag states`, async () => {
const pdfDoc = await index_1.PDFDocument.load(fancyFieldsPdfBytes);
const form = pdfDoc.getForm();
const historicalFigures = form.getRadioGroup('Historical Figures 🐺');
expect(historicalFigures.isExported()).toBe(true);
expect(historicalFigures.isReadOnly()).toBe(false);
expect(historicalFigures.isRequired()).toBe(false);
expect(historicalFigures.isMutuallyExclusive()).toBe(true);
expect(historicalFigures.isOffToggleable()).toBe(false);
});
it(`supports mutualExclusion=true`, async () => {
const pdfDoc = await index_1.PDFDocument.create();
const page = pdfDoc.addPage();
const form = pdfDoc.getForm();
const radioGroup = form.createRadioGroup('test.group');
radioGroup.enableMutualExclusion();
radioGroup.addOptionToPage('foo', page);
radioGroup.addOptionToPage('bar', page);
radioGroup.addOptionToPage('foo', page);
radioGroup.addOptionToPage('qux', page);
const getOnWidgets = () => radioGroup.acroField
.getWidgets()
.filter((w) => w.getOnValue() === radioGroup.acroField.getValue());
expect(getOnWidgets().length).toBe(0);
radioGroup.select('foo');
expect(getOnWidgets().length).toBe(1);
expect(radioGroup.getOptions()).toEqual(['foo', 'bar', 'foo', 'qux']);
const onValues = radioGroup.acroField
.getWidgets()
.map((w) => w.getOnValue());
expect(onValues).toEqual([
index_1.PDFName.of('0'),
index_1.PDFName.of('1'),
index_1.PDFName.of('2'),
index_1.PDFName.of('3'),
]);
const opt = radioGroup.acroField.Opt();
expect(opt).toBeInstanceOf(index_1.PDFArray);
expect(opt.size()).toBe(4);
expect(opt.get(0).decodeText()).toBe('foo');
expect(opt.get(1).decodeText()).toBe('bar');
expect(opt.get(2).decodeText()).toBe('foo');
expect(opt.get(3).decodeText()).toBe('qux');
});
it(`supports mutualExclusion=false`, async () => {
const pdfDoc = await index_1.PDFDocument.create();
const page = pdfDoc.addPage();
const form = pdfDoc.getForm();
const radioGroup = form.createRadioGroup('test.group');
radioGroup.disableMutualExclusion();
radioGroup.addOptionToPage('foo', page);
radioGroup.addOptionToPage('bar', page);
radioGroup.addOptionToPage('foo', page);
radioGroup.addOptionToPage('qux', page);
const getOnWidgets = () => radioGroup.acroField
.getWidgets()
.filter((w) => w.getOnValue() === radioGroup.acroField.getValue());
expect(getOnWidgets().length).toBe(0);
radioGroup.select('foo');
expect(getOnWidgets().length).toBe(2);
expect(radioGroup.getOptions()).toEqual(['foo', 'bar', 'foo', 'qux']);
const onValues = radioGroup.acroField
.getWidgets()
.map((w) => w.getOnValue());
expect(onValues).toEqual([
index_1.PDFName.of('0'),
index_1.PDFName.of('1'),
index_1.PDFName.of('0'),
index_1.PDFName.of('3'),
]);
const opt = radioGroup.acroField.Opt();
expect(opt).toBeInstanceOf(index_1.PDFArray);
expect(opt.size()).toBe(4);
expect(opt.get(0).decodeText()).toBe('foo');
expect(opt.get(1).decodeText()).toBe('bar');
expect(opt.get(2).decodeText()).toBe('foo');
expect(opt.get(3).decodeText()).toBe('qux');
});
it(`produces printable widgets when added to a page`, async () => {
const pdfDoc = await index_1.PDFDocument.create();
const page = pdfDoc.addPage();
const form = pdfDoc.getForm();
const radioGroup = form.createRadioGroup('a.new.radio.group');
const widgets = () => radioGroup.acroField.getWidgets();
expect(widgets().length).toBe(0);
radioGroup.addOptionToPage('foo', page);
expect(widgets().length).toBe(1);
expect(widgets()[0].hasFlag(index_1.AnnotationFlags.Print)).toBe(true);
});
it(`sets page reference when added to a page`, async () => {
const pdfDoc = await index_1.PDFDocument.create();
const page = pdfDoc.addPage();
const form = pdfDoc.getForm();
const radioGroup = form.createRadioGroup('a.new.radio.group');
const widgets = () => radioGroup.acroField.getWidgets();
expect(widgets().length).toBe(0);
radioGroup.addOptionToPage('foo', page);
expect(widgets().length).toBe(1);
expect(widgets()[0].P()).toBe(page.ref);
});
});
//# sourceMappingURL=PDFRadioGroup.spec.js.map