2016-05-30 9 views
0

Ich habe eine docx-Datei, die eine Fußnote enthält. Ich habe einen Platzhalter im Fußnotentext, der ersetzt werden muss. Beim Extrahieren der Knoten und Ändern des Textwerts wurde dieser Platzhalter nicht übergangen. Aus irgendeinem Grund denke ich, dass es den in der Fußnote angegebenen Text nicht aufnimmt.So ändern Sie Fußnotenplatzhalter in docx4j

Können Sie mir bitte zeigen, wie Sie einen Platzhalter in der Fußnote ersetzen können.

Antwort

0

Da die Antwort von @ JasonPlutext nicht funktionierte In meinem Fall poste ich, was bei mir funktioniert

FootnotesPart fp = template.getMainDocumentPart().getFootnotesPart(); 
List<Object> texts = fp.getJAXBNodesViaXPath("//w:t", true); 

for(Object obj : texts) { 
    Text text = (Text) ((JAXBElement) obj).getValue(); 
    String textValue = text.getValue(); 
    // do variable replacement 
    text.setValue(textValue); 
} 

Aber immer noch ich das Problem beim Exportieren dieses als PDF mit Docx4J.toPDF (..); Die Ausgabe übernimmt nicht die Fußnotenreferenz.

+0

Welche Version von docx4j benutzt du? Welche Methode der PDF-Ausgabe (FO oder der kommerzielle Konverter)? – JasonPlutext

+0

Ich verwende docx4j-3.2.1 und verwende die Methode Docx4J.toPDF (wordMLPackage, FileOutputStream). Ich verwende nicht den kommerziellen Konverter. –

+0

Kann eine Einschränkung im FO-basierten Ansatz sein. Sie könnten das debuggen/verbessern, oder Sie könnten den kommerziellen Konverter bei http://converter-eval.plutex.com/ versuchen – JasonPlutext

0

Ansatz 1

schneller, wenn Sie noch nicht verursacht haben unmarshalling auftreten:

FootnotesPart fp = wordMLPackage.getMainDocumentPart().getFootnotesPart(); 
fp.variableReplace(mappings); 

Ansatz 2

FootnotesPart fp = wordMLPackage.getMainDocumentPart().getFootnotesPart(); 

    // unmarshallFromTemplate requires string input 
    String xml = XmlUtils.marshaltoString(fp.getJaxbElement(), true); 
    // Do it... 
    Object obj = XmlUtils.unmarshallFromTemplate(xml, mappings); 
    // Inject result into docx 
    fp.setJaxbElement((CTFootnotes) obj); 
+0

Derzeit verwende ich WordMLPackage.getMainDocumentPart() und dann Extrahieren über XPath, die JAXB Knoten und Ändern der Werte von Platzhaltern durch normale String ersetzen. Bei diesem Ansatz kann ich die Fußnote im Ausgabedokument nicht sehen. Dort ist nur "1" geschrieben, um den Index der Fußnote anzuzeigen. Meine Frage ist, kann ich JAXB Knoten "" aus dem WordMLPackage.getMainDocumentPart() und diesen Fußnoten Teil extrahieren? –

+0

Die Fußnoten befinden sich im Fußnotenteil. Natürlich können Sie den Index desjenigen verwenden, den Sie manipulieren möchten ... – JasonPlutext

+0

Es passiert nicht, ich habe Ansatz 1 versucht. Sollte ich Ihnen die Ausgabedatei zeigen? Ich kann es irgendwo posten –