2017-05-09 8 views
0

私はdocx4jを使用して.htmlファイルで.docxファイルを生成しています。 htmlファイルは、最初にjTidyを使用してxhtmlで変換されます。 このファイルは私の文書の本文です。docx4jでヘッダーとしてhtmlファイルを適用する方法

私はヘッダーと同じことをやっていますが、私はこれもファイルがあります。

ヘッダを生成してドキュメントに追加できますが、htmlではなくプレーンテキストとしてのみ追加できます。ここで

は、ヘッダーのための私のコードです:

//Header Part start 
    HeaderPart headerPart = new HeaderPart(); 
    Relationship rel = wordMLPackage.getMainDocumentPart().addTargetPart(headerPart); 
    String hdrXml = "<w:hdr xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">" 
      + "<w:p>" 
      + "<w:pPr>" 
      //+ "<w:pStyle w:val=\"Header\"/>" 
      + "<w:jc w:val=\"center\"/>" 
      + "</w:pPr>" 
      + "<w:r>" 
      + "<w:t xml:space=\"preserve\">" + myFileContentInString + "</w:t>" 
      + "</w:r>" 
      // + "<w:fldSimple w:instr=\" PAGE \\* MERGEFORMAT \">" 
      // + "<w:r>" 
      // + "<w:rPr>" 
      // + "<w:noProof/>" 
      // + "</w:rPr>" 
      // + "</w:r>" 
      // + "</w:fldSimple>" 
      + "</w:p>" 
      + "</w:hdr>"; 

    Hdr hdr = (Hdr) XmlUtils.unmarshalString(hdrXml); 
    wordMLPackage.getDocumentModel().getSections().get(0).getHeaderFooterPolicy().getFirstHeader(); 
    headerPart.setJaxbElement(hdr); 

    List<SectionWrapper> sections = wordMLPackage.getDocumentModel().getSections(); 

    SectPr sectPr = sections.get(sections.size() - 1).getSectPr(); 
    // There is always a section wrapper, but it might not contain a sectPr 

    if (sectPr == null) { 
     sectPr = objectFactory.createSectPr(); 
     wordMLPackage.getMainDocumentPart().addObject(sectPr); 
     sections.get(sections.size() - 1).setSectPr(sectPr); 
    } 

    HeaderReference headerReference = objectFactory.createHeaderReference(); 
    headerReference.setId(rel.getId()); 
    headerReference.setType(HdrFtrRef.DEFAULT); 
    sectPr.getEGHdrFtrReferences().add(headerReference); 

    //Header Part End 

XHTMLコンテンツは、 "myFileContentInString" です。

私はこれについて何かを見つけることができなかったので、もし誰かが何か考えがあれば?

EDIT:あなたの答えの後、私はこのように自分のコードを更新しました(ここでは完全なコードがある):

String inputfilepath = "Offers/" + param.getKey1() + "_" + param.getKey2() + "/c.xhtml"; 
    String inputfilepath2 = "Offers/" + param.getKey1() + "_" + param.getKey2() + "/cc.xhtml"; 


    // Create an empty docx package 
    WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage(); 
    ObjectFactory objectFactory = Context.getWmlObjectFactory(); 

    NumberingDefinitionsPart ndp = new NumberingDefinitionsPart(); 
    wordMLPackage.getMainDocumentPart().addTargetPart(ndp); 
    ndp.unmarshalDefaultNumbering(); 

    XHTMLImporterImpl xHTMLImporter = new XHTMLImporterImpl(wordMLPackage); 
    xHTMLImporter.setHyperlinkStyle("Hyperlink"); 

    wordMLPackage.getMainDocumentPart().getContent().addAll(xHTMLImporter.convert(new File(inputfilepath), null)); 

    //Header Part start 
    HeaderPart headerPart = new HeaderPart(); 
    Relationship rel = wordMLPackage.getMainDocumentPart().addTargetPart(headerPart); 

    Hdr hdr = Context.getWmlObjectFactory().createHdr(); 
    hdr.getContent().addAll(xHTMLImporter.convert(new File(inputfilepath2), null)); 
    wordMLPackage.getDocumentModel().getSections().get(0).getHeaderFooterPolicy().getFirstHeader(); 
    headerPart.setJaxbElement(hdr); 

    List<SectionWrapper> sections = wordMLPackage.getDocumentModel().getSections(); 

    SectPr sectPr = sections.get(sections.size() - 1).getSectPr(); 
    // There is always a section wrapper, but it might not contain a sectPr 

    if (sectPr == null) { 
     sectPr = objectFactory.createSectPr(); 
     wordMLPackage.getMainDocumentPart().addObject(sectPr); 
     sections.get(sections.size() - 1).setSectPr(sectPr); 
    } 

    HeaderReference headerReference = objectFactory.createHeaderReference(); 
    headerReference.setId(rel.getId()); 
    headerReference.setType(HdrFtrRef.DEFAULT); 
    sectPr.getEGHdrFtrReferences().add(headerReference); 

    // Saving file 
    wordMLPackage.save(new java.io.File("Offers/" + param.getKey1() + "_" + param.getKey2() + "/html_output.docx")); 

は "inputfilepath2は" 私のヘッダのXHTMLファイルFOパスが含まれています。 ヘッダーに単純なHello Worldを挿入しようとしましたが、本文とヘッダーの "inputfilepath"を取っているようです。

答えて

0

あなたは正しいheaderPartへの参照を持っていると仮定すると、何かのように:

Hdr hdr = Context.getWmlObjectFactory().createHdr(); 
    hdr.getContent().addAll( 
      XHTMLImporter.convert(/* fill this in */); 
    headerPart.setJaxbElement(hdr); 
+0

私が持つにもかかわらず、それが働いていたが、ヘッダを作るために撮影したファイルは、本体1と同じであるようだと思いました良い人は宣言した。 –

+0

あなたが何を意味するのかを明確にしてください。更新されたコードは何ですか? – JasonPlutext

+0

編集したコードをメインメッセージに追加しました –

関連する問題