Support 'flat' form field names in PDF loading

Issue #1391 resolved
Brian Lewis repo owner created an issue

Normally field names in hierarchical format e.g. Survey.SchoolName, Enrol.Data.R01.C02.M imply a “real” hiarchy in the PDF expressed as ‘parents’ and ‘kids’ ( in PDF parlance).

hyperref for LatEx does not observe this condition and creates “flat” fields with no parents and the name with embedded dots.

This creates a faulty Xfdf on export; the survey uploader ( and a model for any potential pdf processing) works by treating the hierarchical data under each direct child of the fields node as a coherent data set that can be updated with one stored procedure (see Process in PdfSurvey.cs)

We can support such faulty field collections by reformatting them to reclaim the parent/child relations based on the positions of dots.

This is a precondition to moving to generation of Pdf Surveys (and other tools) using LatEx

Comments (7)

  1. Brian Lewis reporter

    Here’s a mockup of a messay fiel that includes some real hierarchy and some implicit hierarchy:

    <?xml version="1.0" encoding="utf-8"?>
    <xfdf xmlns="http://ns.adobe.com/xfdf/">
        <f href="d:\files\f2.pdf"/>
        <ids original="6A67AC7A35A2D8836DCBA62F266B85D0" modified="6A67AC7A35A2D8836DCBA62F266B85D0"/>
        <fields>
            <field name="me.name">
                <value>Foo</value>
            </field>
            <field name="me.father">
                <value>Father</value>
            </field>
            <field name="h.First"/>
    
            <field name="boggly">
                <value>BogglyValue</value>
            </field>
            <field name="TopNotch"></field>
            <field name="TopNotchEmptyValue">
                <value></value>
            </field>
            <field name="me.mother.given.middle">
                <value>Nais</value>
            </field>
            <field name="me.mother.given">
                <field name="Initial">
                <value>N</value>
                </field>
            </field>
            <field name="Enrol.Data.R08.C05.M">
                <value>15</value>
            </field>
            <field name="Enrol.Data.R08.C05.F">
                <value>14</value>
            </field>
            <field name="Enrol.Data.R07.C05.M">
                <value>15</value>
            </field>
            <field name="Enrol.Data.R07.C06.F">
                <value>14</value>
            </field>
    
            <field name="Survey.SchoolName">
                <value>Oodnahdatta High School</value>
            </field>
            <field name="Survey.SchoolNo">
                <value>OOD119</value>
            </field>
            <field name="Survey">
                <field name="SurveyYear">
                    <value>2024</value>
                </field>
            </field>
            <field name="disab">
                <field name="M">
                    <value>17</value>
                </field>
                <field name="F">
                    <value>20</value>
                </field>
            </field>
            <field name="disab.type.MIMS">
                <field name="Male">
                    <value>17</value>
                </field>
                <field name="Female">
                    <value>20</value>
                </field>
            </field>
            <field name="Enrol.Data">
                <field name="R03.C02.M">
                    <value>15</value>
                </field>
            </field>.>
            <field name="Enrol.Data.R01.C01">
                <field name="F">
                    <value>125</value>
                </field>
            </field>
            <field name="Enrol">
                <field name="Data.R02.C06">
                    <field name="F">
                        <value>14</value>
                    </field>
    
                </field>
            </field>
            <field name="h.Last"/>  
        </fields>
    </xfdf>
    

    Desired result after loading is to have all the dots in field names replaced with nested fields:

    <xfdf xmlns="http://ns.adobe.com/xfdf/">
      <fields>
        <field name="me">
          <field name="name">
            <value>Foo</value>
          </field>
          <field name="father">
            <value>Father</value>
          </field>
          <field name="mother">
            <field name="given">
              <field name="middle">
                <value>Nais</value>
              </field>
              <field name="Initial">
                <value>N</value>
              </field>
            </field>
          </field>
        </field>
        <field name="h">
          <field name="First" />
          <field name="Last" />
        </field>
        <field name="boggly">
          <value>BogglyValue</value>
        </field>
        <field name="TopNotch" />
        <field name="TopNotchEmptyValue" />
        <field name="Enrol">
          <field name="Data">
            <field name="R08">
              <field name="C05">
                <field name="M">
                  <value>15</value>
                </field>
                <field name="F">
                  <value>14</value>
                </field>
              </field>
            </field>
            <field name="R07">
              <field name="C05">
                <field name="M">
                  <value>15</value>
                </field>
              </field>
              <field name="C06">
                <field name="F">
                  <value>14</value>
                </field>
              </field>
            </field>
            <field name="R03">
              <field name="C02">
                <field name="M">
                  <value>15</value>
                </field>
              </field>
            </field>
            <field name="R01">
              <field name="C01">
                <field name="F">
                  <value>125</value>
                </field>
              </field>
            </field>
            <field name="R02">
              <field name="C06">
                <field name="F">
                  <value>14</value>
                </field>
              </field>
            </field>
          </field>
        </field>
        <field name="Survey">
          <field name="SchoolName">
            <value>Oodnahdatta High School</value>
          </field>
          <field name="SchoolNo">
            <value>OOD119</value>
          </field>
          <field name="SurveyYear">
            <value>2024</value>
          </field>
        </field>
        <field name="disab">
          <field name="M">
            <value>17</value>
          </field>
          <field name="F">
            <value>20</value>
          </field>
          <field name="type">
            <field name="MIMS">
              <field name="Male">
                <value>17</value>
              </field>
              <field name="Female">
                <value>20</value>
              </field>
            </field>
          </field>
        </field>
      </fields>
    </xfdf>
    

  2. Brian Lewis reporter

    In practice we won't have input as badly structured as above: either the editing tool will support hierarchy or it won’t. LatEx / hyperref does not; so all form fields will be represented by bottom level fields whose names are the full path.

  3. Brian Lewis reporter

    feat(pdfsurvey): demonstration of simple working generate/prepopulate of form. Support for form name hierarchy based on ! delimiters, in both generate and upload

    Resolves #1391, #1396

    → <<cset 1f0e8c1da142>>

  4. Log in to comment