Docx4J: Как удалить отношения для MailMerge?

Я разрабатываю функцию, с помощью которой пользователи могут загружать docx-документы с заполнителями. Эти заполнители позже будут заменены данными из базы данных. Чтобы убедиться, что пользователь использует только предопределенные заполнители, он должен выбрать файл Ms Access (.mdb), в котором определенные поля (поля слияния) являются допустимыми заполнителями. Мне удалось заменить поля слияния моими данными. Однако я не могу избавиться от определенной связи с файлом Access. Я знаю, что из xml моего docx-документа необходимо удалить следующее:

<pkg:part pkg:name="/word/_rels/settings.xml.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml"><pkg:xmlData>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/recipientData" Target="recipientData.xml"/>
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/mailMergeSource" Target="file:///D:\Downloads\Lager.mdb" TargetMode="External"/></Relationships></pkg:xmlData></pkg:part>


<w:mailMerge><w:mainDocumentType w:val="formLetters"/><w:linkToQuery/><w:dataType w:val="native"/><w:connectString w:val="Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=P:\SINA\Projektteam\Referat413\Basisklassen fuer Schablonen\Lager.mdb;Mode=Read;Extended Properties=&quot;&quot;;Jet OLEDB:System database=&quot;&quot;;Jet OLEDB:Registry Path=&quot;&quot;;Jet OLEDB:Engine Type=6;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=&quot;&quot;;Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False"/><w:query w:val="SELECT * FROM `Office Address List` "/><w:odso><w:udl w:val="Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=D:\Benutzer-Profile\boehmv\Downloads\Lager.mdb;Mode=Read;Extended Properties=&quot;&quot;;Jet OLEDB:System database=&quot;&quot;;Jet OLEDB:Registry Path=&quot;&quot;;Jet OLEDB:Engine Type=6;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=&quot;&quot;;Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;Jet OLEDB:Bypass UserInfo Validation=False"/>
<w:table w:val="Office Address List"/>
<w:src r:id="rId1"/><w:colDelim w:val="9"/><w:type w:val="addressBook"/><w:fHdr/><w:fieldMapData><w:column w:val="0"/><w:lid w:val="de-DE"/></w:fieldMapData><w:fieldMapData><w:column w:val="0"/><w:lid w:val="de-DE"/></w:fieldMapData><w:fieldMapData><w:column w:val="0"/><w:lid w:val="de-DE"/></w:fieldMapData><w:fieldMapData><w:column w:val="0"/><w:lid w:val="de-DE"/></w:fieldMapData><w:fieldMapData><w:column w:val="0"/><w:lid w:val="de-DE"/></w:fieldMapData><w:recipientData r:id="rId2"/></w:odso>
</w:mailMerge>

Любая идея, как решить эту проблему с помощью docx4j? Я нашел тег w:mailMerge следующим образом:

String xml = XmlUtils.marshaltoString(wordMLPackage.getMainDocumentPart().getDocumentSettingsPart().getJaxbElement(), true, true);

К сожалению, я не могу изменить DocumentSettingsPart.


person user1335772    schedule 15.11.2013    source источник
comment
Почему вы не можете изменить DocumentSettingsPart? Ваш вопрос, как изменить DocumentSettingsPart?   -  person JasonPlutext    schedule 16.11.2013
comment
Я не нашел подходящего метода set для DocumentSettingsPart. Знаете ли вы, как изменить существующую часть DocumentSettingsPart?   -  person user1335772    schedule 18.11.2013


Ответы (1)


Я, наконец, нашел способ, который работает для меня. Следующий метод удаляет настройки слияния:

private void removeMailmergeRelationship(WordprocessingMLPackage wordMLPackage) {
    DocumentSettingsPart dsp = wordMLPackage.getMainDocumentPart().getDocumentSettingsPart();
    CTSettings settings = dsp.getJaxbElement();
    settings.setMailMerge(null);
}
person user1335772    schedule 18.11.2013
comment
Обратите внимание, что это решение удаляет всплывающее окно, которое запрашивает файлы, но файлы все еще присутствуют в файле Word, а именно, если вы разархивируете его в _rels/settings.xml.rels. - person Tom; 31.05.2021