2013-11-15 3 views
0

사용자가 placex를 사용하여 docx- 문서를 업로드 할 수있는 기능을 개발 중입니다. 이 자리 표시자는 나중에 데이터베이스의 데이터로 대체됩니다. 사용자가 사전 정의 된 자리 표시 자만 사용하는지 확인하려면 정의 된 필드 (mergefield)가 유효한 자리 표시자인 Ms 액세스 파일 (.mdb)을 선택해야합니다. 나는 mergefields를 내 데이터로 대체하는데 성공한다. 그러나 Access 파일에 대해 정의 된 관계를 제거 할 수는 없습니다. 나는 다음 내 DOCX - 문서의 XML에서 제거하는 것을 알고 :Docx4J : MailMerge에 대한 관계를 제거하는 방법은 무엇입니까?

<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와 함께이 문제를 해결하기 위해? 다음과 같은 방법으로 편지 병합 태그 :

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

불행하게도, 나는 DocumentSettingsPart을 변경할 수 아니에요 가 나는 w를 발견했다.

+0

왜 DocumentSettingsPart를 변경할 수 없습니까? 귀하의 질문은 "어떻게 DocumentSettingsPart를 변경합니까"입니까? – JasonPlutext

+0

DocumentSettingsPart에 대한 적절한 set-method를 찾지 못했습니다. 기존 DocumentSettingsPart를 수정하는 방법을 알고 있습니까? – user1335772

답변

0

나는 마침내 나를 위해 일하는 방법을 찾았습니다. 다음 방법은 편지 병합 설정을 제거합니다.

private void removeMailmergeRelationship(WordprocessingMLPackage wordMLPackage) { 
    DocumentSettingsPart dsp = wordMLPackage.getMainDocumentPart().getDocumentSettingsPart(); 
    CTSettings settings = dsp.getJaxbElement(); 
    settings.setMailMerge(null); 
} 
+0

그건 정확히 '올바른'방법입니다 :-) – JasonPlutext