diff --git a/fjson/fielddata_test.go b/fjson/fielddata_test.go index e8d034af..bb7551cd 100644 --- a/fjson/fielddata_test.go +++ b/fjson/fielddata_test.go @@ -148,6 +148,7 @@ func TestJSONExtractAndFill(t *testing.T) { fieldDataExp, err := LoadFromJSONFile("./testdata/advancedform.json") require.NoError(t, err) jsonDataExp, err := fieldDataExp.JSON() + require.NoError(t, err) // Check templates for equality. require.Equal(t, jsonDataExp, jsonData) @@ -184,6 +185,7 @@ func TestJSONExtractAndFill(t *testing.T) { fieldDataExp, err = LoadFromJSON(bytes.NewReader(jsonBytes)) require.NoError(t, err) jsonDataExp, err = fieldDataExp.JSON() + require.NoError(t, err) // Fill test PDF form fields and write to buffer. f, err := os.Open(inputFilePath) @@ -212,6 +214,47 @@ func TestJSONExtractAndFill(t *testing.T) { fieldData, err = LoadFromPDF(bytes.NewReader(buf.Bytes())) require.NoError(t, err) jsonData, err = fieldData.JSON() + require.NoError(t, err) + + // Check field data for equality. + require.Equal(t, jsonDataExp, jsonData) +} + +func TestJSONFillAndExtract(t *testing.T) { + // Read JSON fill data. + fieldDataExp, err := LoadFromJSONFile("./testdata/mixedfields.json") + require.NoError(t, err) + jsonDataExp, err := fieldDataExp.JSON() + require.NoError(t, err) + + // Fill test PDF form fields and write to buffer. + f, err := os.Open("./testdata/mixedfields.pdf") + require.NoError(t, err) + defer f.Close() + + reader, err := model.NewPdfReader(f) + require.NoError(t, err) + + err = reader.AcroForm.Fill(fieldDataExp) + require.NoError(t, err) + + var buf bytes.Buffer + writer := model.NewPdfWriter() + for i := range reader.PageList { + err := writer.AddPage(reader.PageList[i]) + require.NoError(t, err) + } + + err = writer.SetForms(reader.AcroForm) + require.NoError(t, err) + err = writer.Write(&buf) + require.NoError(t, err) + + // Load field data from buffer. + fieldData, err := LoadFromPDF(bytes.NewReader(buf.Bytes())) + require.NoError(t, err) + jsonData, err := fieldData.JSON() + require.NoError(t, err) // Check field data for equality. require.Equal(t, jsonDataExp, jsonData) diff --git a/fjson/testdata/mixedfields.json b/fjson/testdata/mixedfields.json new file mode 100644 index 00000000..3ee55d32 --- /dev/null +++ b/fjson/testdata/mixedfields.json @@ -0,0 +1,94 @@ +[ + { + "name": "Given Name Text Box", + "value": "Jane" + }, + { + "name": "Family Name Text Box", + "value": "Doe" + }, + { + "name": "House nr Text Box", + "value": "100" + }, + { + "name": "Address 2 Text Box", + "value": "Generic Avenue" + }, + { + "name": "Postcode Text Box", + "value": "11122" + }, + { + "name": "Country Combo Box", + "value": "France" + }, + { + "name": "Height Formatted Field", + "value": "175" + }, + { + "name": "City Text Box", + "value": "Paris" + }, + { + "name": "Driving License Check Box", + "value": "Yes", + "options": [ + "Yes", + "Off" + ] + }, + { + "name": "Favourite Colour List Box", + "value": "Yellow" + }, + { + "name": "Language 1 Check Box", + "value": "Yes", + "options": [ + "Yes", + "Off" + ] + }, + { + "name": "Language 2 Check Box", + "value": "Off", + "options": [ + "Yes", + "Off" + ] + }, + { + "name": "Language 3 Check Box", + "value": "Yes", + "options": [ + "Yes", + "Off" + ] + }, + { + "name": "Language 4 Check Box", + "value": "Off", + "options": [ + "Yes", + "Off" + ] + }, + { + "name": "Language 5 Check Box", + "value": "Yes", + "options": [ + "Yes", + "Off" + ] + }, + { + "name": "Gender List Box", + "value": "Woman" + }, + { + "name": "Address 1 Text Box", + "value": "Generic Street" + } +] diff --git a/fjson/testdata/mixedfields.pdf b/fjson/testdata/mixedfields.pdf new file mode 100644 index 00000000..72d0d21d Binary files /dev/null and b/fjson/testdata/mixedfields.pdf differ