1

docx4j を使用してドキュメント テンプレートからドキュメント生成を実装しました。私のコードでは、プレースホルダーを持つテンプレートは、プレースホルダーを値に置き換えます。問題は、docx4j がプレースホルダーを別のエンティティとして取得できないことです。例: テンプレートは「tempnew.docx」です。

         welcome to <<name>>,Have a nice day in <<name>>

after running the script, i got the retrieved texts "welcome ", "to", " <<", "name>>" etc.. (check the values of 'content' each time inside the for loop in method 'replaceParagraph' of line     'Text content = (Text) t;')

instead of "welcome ", "to ", "<<name>>" etc..

私のコード:

    public static void main(String[] args) throws IOException, Docx4JException {
       GenerateDoc genDoc = new GenerateDoc();
    String templateFile = "C:\\testdoc\\tempnew.docx";
    WordprocessingMLPackage object = genDoc.getTemplate(templateFile);

    String toAdd = "India";
    genDoc.replaceParagraph( toAdd, object, object.getMainDocumentPart());
    genDoc.writeDocxToStream(object, "C:\\testdoc\\docgen.docx");
}


   private static List<Object> getAllElementFromObject(Object obj, Class<?> toSearch) {
    List<Object> result = new ArrayList<Object>();
    if (obj instanceof JAXBElement) obj = ((JAXBElement<?>) obj).getValue();

    if (obj.getClass().equals(toSearch))
        result.add(obj);
    else if (obj instanceof ContentAccessor) {
        List<?> children = ((ContentAccessor) obj).getContent();
        for (Object child : children) {
            result.addAll(getAllElementFromObject(child, toSearch));
        }

    }
    return result;
}

      private void replaceParagraph( String textToAdd, WordprocessingMLPackage template, ContentAccessor addTo) {

    // 1. get the paragraph
     String pholderStart ="<<";
     String pholderEnd =">>";
     int placeHolderStartIndex, placeHolderEndIndex;

    List<Object> paragraphs = getAllElementFromObject(template.getMainDocumentPart(), P.class);

    P toReplace = null;
    for (Object p : paragraphs) {
    List<Object> texts = getAllElementFromObject(p, Text.class);
    for (Object t : texts) {
    Text content = (Text) t;
    ...
           ..........}..}
4

2 に答える 2

0

私があなたを正しく理解していれば、あなたのdocxでは、「<<」と「>>」が別々の実行に分割されていると思います。

解決策については、 VariablePrepareを参照してください。

于 2013-05-08T12:01:59.677 に答える