2016-10-07 8 views
4

ここは私の状況です。私は、@bottom-centerなどのような印刷媒体のプロパティを含むhtml/cssを持っています。これはflying-saucerでpdfに変換されます。javaのmswordにhtml + css(印刷媒体)を変換する

ここでも、同じリソースをmsword(docまたはdocx)形式に変換する必要があります。

私はdocx4j-ImportXHTMLdocuments4jライブラリを使用しようとしましたが残念ながら、特にスタイルシートの印刷メディアプロパティでは希望の結果が得られません。実行する必要のある特別な設定はありますか?ライブラリはそれをサポートしていませんか?理想的には、私はpdfとdocxの出力がほぼ同じに見えるようにしたい。

感謝

サンプルリソース:

のpom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.pleft</groupId> 
    <artifactId>html2word</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <dependencies> 
     <dependency> 
      <groupId>org.docx4j</groupId> 
      <artifactId>docx4j-ImportXHTML</artifactId> 
      <version>3.3.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.logging.log4j</groupId> 
      <artifactId>log4j-api</artifactId> 
      <version>2.7</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.logging.log4j</groupId> 
      <artifactId>log4j-core</artifactId> 
      <version>2.7</version> 
     </dependency> 

     <dependency> 
      <groupId>org.xhtmlrenderer</groupId> 
      <artifactId>flying-saucer-pdf</artifactId> 
      <version>9.0.6</version> 
     </dependency> 
    </dependencies> 

</project> 

Html2Word.java

import com.lowagie.text.DocumentException; 
import org.docx4j.convert.in.xhtml.XHTMLImporterImpl; 
import org.docx4j.openpackaging.exceptions.Docx4JException; 
import org.docx4j.openpackaging.packages.WordprocessingMLPackage; 
import org.xhtmlrenderer.pdf.ITextRenderer; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 

public class Html2Word { 
    public static void main(String[] args) throws Docx4JException, IOException, DocumentException { 

     WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage(); 

     XHTMLImporterImpl XHTMLImporter = new XHTMLImporterImpl(wordMLPackage); 
     final File file = new File("sample.html"); 
     wordMLPackage.getMainDocumentPart().getContent().addAll(
       XHTMLImporter.convert(file, null)); 
     wordMLPackage.save(new File("sample.docx")); 

     ITextRenderer renderer = new ITextRenderer(); 
     renderer.setDocument(file); 
     renderer.layout(); 
     renderer.createPDF(new FileOutputStream(new File("sample.pdf"))); 

    } 
} 

サンプル.htmlの

<!--?xml version="1.0" encoding="UTF-8"?--><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>SAMPLE</title> 
    <style> 
    @page { 
     size: A4 landscape; 
     margin: 3.8cm 2.0cm 1.5cm 1.5cm; 

     @top-center { 
      content: element(header); 
     } 

     @bottom-center { 
      content: element(footer); 
     } 
    } 

    @page :first { 
     margin-bottom: 3.0cm; 

     @bottom-center { 
      content: element(firstPageFooter); 
     } 
    } 
    #header { 
     position: running(header); 
    } 

    #pagenumber:before { 
     content: counter(page); 
    } 

    #pagecount:before { 
     content: counter(pages); 
    } 

    #footer { 
     text-align: center; 
     position: running(footer); 
    } 

    .header-left { 
    float: left; 
    margin-top: 1.30cm; 
    margin-left: 0.20cm; 
    } 

    .header-right { 
     float: right; 
     margin-top: 0.60cm; 
     margin-right: 0.10cm; 
     /*margin-bottom: 0.10 cm;*/ 
    } 

    .confidentiality { 
     color: #0046AD; 
     font-size: 10pt; 
     font-weight: bold; 
     display: block; 
    } 
    </style> 
</head> 
<body> 
<div id="header"> 
    <div class="header-left"> 
     <span class="confidentiality">This is the header left aligned</span> 
    </div> 
    <div class="header-right"> 
     <table> 
      <tbody> 
      <tr> 
       <td style="text-align: right"><span id="pagenumber"></span> (<span id="pagecount"></span>)</td> 
      </tr> 
      <tr> 
       <td></td> 
      </tr> 
      <tr> 
       <td></td> 
      </tr> 
      <tr> 
       <td></td> 
      </tr> 
      <tr> 
       <td></td> 
      </tr> 
      </tbody> 
     </table> 
    </div> 
</div> 
<div id="firstPageFooter" style="position: running(firstPageFooter);"> 
    <div style="text-align: center; margin-top: 1em"> 
     This is page 1 footer 
    </div> 
</div> 
<div id="footer"> 
    This is footer 
</div> 
<!-- CONTENT --> 
<div class="content"> 
    <div> 
     <p> 
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus vitae orci nec elit congue dapibus nec ut ipsum. Nulla dapibus efficitur erat non aliquet. Sed in leo consectetur, faucibus purus sit amet, sollicitudin ipsum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean pretium, nisl ut vehicula ornare, lacus magna venenatis quam, vel commodo urna nunc et turpis. Maecenas placerat tortor sed velit vestibulum egestas. Donec vel magna dolor. Aliquam in massa bibendum, tempus augue vitae, lacinia nunc. Etiam sed urna vel eros maximus volutpat at sit amet libero. Mauris ac fringilla est. Ut fringilla tincidunt nisi et blandit. Nullam tincidunt, mi quis ullamcorper cursus, tellus ante placerat mauris, quis feugiat libero tellus eget nisl. 
     </p> 
     <p> 
      Sed tincidunt sit amet justo et convallis. Vestibulum et placerat nunc, dictum blandit orci. Nullam molestie posuere justo, quis tempor dui consequat vel. Vivamus vitae posuere tortor. Mauris aliquet velit eget neque molestie lobortis. Suspendisse at efficitur risus. Proin aliquam porttitor sapien ut malesuada. In hac habitasse platea dictumst. Etiam porta sem sit amet mollis feugiat. Aliquam erat volutpat. 
     </p> 
     <p> 
      Donec varius ante vel diam malesuada molestie. Sed et metus elit. Sed pellentesque, ex nec posuere rhoncus, sapien tortor porta est, ac facilisis neque neque vitae mi. Phasellus egestas arcu id varius ornare. Aliquam vel nulla arcu. Proin bibendum enim et tellus laoreet porttitor. Quisque non mollis libero. Etiam magna metus, maximus a velit et, posuere suscipit nibh. Praesent id vulputate urna. Mauris facilisis molestie leo, vitae dictum quam tempor in. Aenean enim risus, rhoncus vel posuere vitae, feugiat vitae velit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam id mattis neque. Etiam gravida finibus orci sed interdum. 
     </p> 
     <p> 
      Donec sed sapien dui. Sed sed ante posuere, viverra dolor sit amet, viverra dolor. Praesent semper, diam sit amet pulvinar congue, orci nulla laoreet quam, in posuere justo lectus quis felis. Sed imperdiet nisl ante, vitae laoreet velit imperdiet eget. Vivamus pharetra placerat ex, maximus lobortis nibh. Quisque dictum neque eget mattis gravida. Curabitur at metus lacinia, facilisis velit nec, facilisis odio. 
     </p> 
     <p> 
      Nulla sagittis velit ut massa vulputate ultrices. Aliquam interdum porta risus eget fringilla. Duis laoreet augue id odio luctus dignissim. Cras non vestibulum eros. In vitae eleifend justo, a consectetur augue. Vestibulum nec posuere odio, sed cursus libero. Quisque laoreet, lacus a dignissim ultricies, enim ligula gravida lectus, a sagittis justo augue quis augue. Sed pulvinar posuere augue sit amet tempor. Donec viverra eleifend imperdiet. Maecenas eget purus nibh. Nulla non est in diam pulvinar varius sed quis purus. Maecenas consequat ligula vel velit lobortis aliquam. Pellentesque eu nulla porttitor, commodo erat quis, mollis libero. Maecenas quis est mauris. Maecenas luctus ligula nisl, quis rhoncus enim pretium eu. 
     </p> 
     <p> 
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus vitae orci nec elit congue dapibus nec ut ipsum. Nulla dapibus efficitur erat non aliquet. Sed in leo consectetur, faucibus purus sit amet, sollicitudin ipsum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean pretium, nisl ut vehicula ornare, lacus magna venenatis quam, vel commodo urna nunc et turpis. Maecenas placerat tortor sed velit vestibulum egestas. Donec vel magna dolor. Aliquam in massa bibendum, tempus augue vitae, lacinia nunc. Etiam sed urna vel eros maximus volutpat at sit amet libero. Mauris ac fringilla est. Ut fringilla tincidunt nisi et blandit. Nullam tincidunt, mi quis ullamcorper cursus, tellus ante placerat mauris, quis feugiat libero tellus eget nisl. 
     </p> 
     <p> 
      Sed tincidunt sit amet justo et convallis. Vestibulum et placerat nunc, dictum blandit orci. Nullam molestie posuere justo, quis tempor dui consequat vel. Vivamus vitae posuere tortor. Mauris aliquet velit eget neque molestie lobortis. Suspendisse at efficitur risus. Proin aliquam porttitor sapien ut malesuada. In hac habitasse platea dictumst. Etiam porta sem sit amet mollis feugiat. Aliquam erat volutpat. 
     </p> 
     <p> 
      Donec varius ante vel diam malesuada molestie. Sed et metus elit. Sed pellentesque, ex nec posuere rhoncus, sapien tortor porta est, ac facilisis neque neque vitae mi. Phasellus egestas arcu id varius ornare. Aliquam vel nulla arcu. Proin bibendum enim et tellus laoreet porttitor. Quisque non mollis libero. Etiam magna metus, maximus a velit et, posuere suscipit nibh. Praesent id vulputate urna. Mauris facilisis molestie leo, vitae dictum quam tempor in. Aenean enim risus, rhoncus vel posuere vitae, feugiat vitae velit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam id mattis neque. Etiam gravida finibus orci sed interdum. 
     </p> 
     <p> 
      Donec sed sapien dui. Sed sed ante posuere, viverra dolor sit amet, viverra dolor. Praesent semper, diam sit amet pulvinar congue, orci nulla laoreet quam, in posuere justo lectus quis felis. Sed imperdiet nisl ante, vitae laoreet velit imperdiet eget. Vivamus pharetra placerat ex, maximus lobortis nibh. Quisque dictum neque eget mattis gravida. Curabitur at metus lacinia, facilisis velit nec, facilisis odio. 
     </p> 
     <p> 
      Nulla sagittis velit ut massa vulputate ultrices. Aliquam interdum porta risus eget fringilla. Duis laoreet augue id odio luctus dignissim. Cras non vestibulum eros. In vitae eleifend justo, a consectetur augue. Vestibulum nec posuere odio, sed cursus libero. Quisque laoreet, lacus a dignissim ultricies, enim ligula gravida lectus, a sagittis justo augue quis augue. Sed pulvinar posuere augue sit amet tempor. Donec viverra eleifend imperdiet. Maecenas eget purus nibh. Nulla non est in diam pulvinar varius sed quis purus. Maecenas consequat ligula vel velit lobortis aliquam. Pellentesque eu nulla porttitor, commodo erat quis, mollis libero. Maecenas quis est mauris. Maecenas luctus ligula nisl, quis rhoncus enim pretium eu. 
     </p> 
    </div> 
</div> 
</body> 
</html> 
+0

docx4j-ImportXHTMLは、上記のリストではなく、xhtmlrenderer:https://github.com/plutext/docx4j-ImportXHTML/blob/master/pom.xml#L299の再パッケージ版を使用します。 – JasonPlutext

答えて

0

IIRC docx4j-ImportXHTMLはXHTMLからヘッダー/フッターをインポートしません。

これらはすでにターゲットdocxに存在していることを確認できます。

あなたはそれにdocx4jを使うことができます。もう少し努力すれば、docx4j-ImportXHTMLを拡張することができます。

+0

お返事ありがとうございました。質問に添付したサンプルのサンプルを提供できますか?ヘッダーとフッターは実際にはdocxにありますが、間違った場所にあります。サンプルコードは、PDFとdocxの両方を比較して生成します。 – pleft

関連する問題