15

POIを使用してdocxジェネレーターを作成していますが、事前定義された形式を使用したいと思います。

Wordには、タイトル、見出し1..10などのいくつかの形式が含まれています。これらの形式は、Wordで作成するすべてのDOCXで事前定義されています。

docxジェネレーターで使用したいと思います。次のことを試しましたが、形式が適用されませんでした。

paragraph = document.createParagraph();
lastParagraph.setStyle("Heading1");

スタイルとして「heading1」、「heading1」、「Heading1」も試してみましたが、どれもうまくいきませんでした。APIドキュメント
に は詳細が示されていません。

Word 2007で作成したdocxファイルを分析したところ、「Heading1」が正しいことがわかりました。残念ながら、スタイルはdocxで定義されていません。このスタイルを手動で作成する必要がありますか?

誰かが私に正しい解決策を教えてもらえますか?

4

4 に答える 4

20

非常に簡単です。「テンプレート」docxファイルを使用します。

  1. Word2007で空のdocxファイルを作成します。
  2. このファイルをテンプレートとして使用しますXWPFDocument
  3. スタイルを使用して段落を追加します。

コードは次のとおりです。

XWPFDocument document = new XWPFDocument(new FileInputStream("template.docx");
paragraph = document.createParagraph();
paragraph.setStyle("Heading1");

テンプレートにはすべてのスタイルが含まれているため、を介して参照できますsetStyle("Heading1");

于 2010-04-15T11:47:57.643 に答える
9

Wordテンプレートを作成できます(Wordの[名前を付けて保存...]機能を使用するだけです)。

最初のオプション

テンプレートには、 \wordフォルダーにいくつかの追加のXMLファイルが含まれています。--styles.xml--stylesWithEffects.xml --webSettings.xml--fontTable.xmlおよび-\themeフォルダー

これらのファイルを元のPOI生成ファイルにコピーすると、styles.xmlファイルで指定されたスタイルを参照できます。

元のファイルをZIPファイルのように操作できますが、それほど手間はかかりません。

2番目のオプション

コード内のスタイルをテンプレートからドキュメントにコピーします。

XWPFDocument template = new XWPFDocument(new FileInputStream(new File("Template.dotx")));       

XWPFDocument doc = new XWPFDocument();      
// let's copy styles from template to new doc
XWPFStyles newStyles = doc.createStyles();
newStyles.setStyles(template.getStyle());


XWPFParagraph para = doc.createParagraph();
para.setStyle("Heading1");

XWPFRun run = para.createRun();
run.setText("Heading 1");

return doc;

プラス面としては、Wordを使用してスタイルを個別に操作し、テンプレートファイルに保存して戻すことができます。

于 2012-11-30T09:17:28.117 に答える
8

レベル1の見出しとして認識され(たとえば、MS Wordで生成されたTOCで使用するため)、Word形式バーでアクセスできるスタイルの作成に一般的に関心がある場合は、次のように実行できます。

private static File writeSimpleDocxFile(String content) throws IOException {
    XWPFDocument docxDocument = new XWPFDocument();

    String strStyleId = "ownstyle1";

    addCustomHeadingStyle(docxDocument, strStyleId, 1);

    XWPFParagraph paragraph = docxDocument.createParagraph();
    XWPFRun run = paragraph.createRun();
    run.setText(content);

    paragraph.setStyle(strStyleId);
}

private static void addCustomHeadingStyle(XWPFDocument docxDocument, String strStyleId, int headingLevel) {

    CTStyle ctStyle = CTStyle.Factory.newInstance();
    ctStyle.setStyleId(strStyleId);

    CTString styleName = CTString.Factory.newInstance();
    styleName.setVal(strStyleId);
    ctStyle.setName(styleName);

    CTDecimalNumber indentNumber = CTDecimalNumber.Factory.newInstance();
    indentNumber.setVal(BigInteger.valueOf(headingLevel));

    // lower number > style is more prominent in the formats bar
    ctStyle.setUiPriority(indentNumber);

    CTOnOff onoffnull = CTOnOff.Factory.newInstance();
    ctStyle.setUnhideWhenUsed(onoffnull);

    // style shows up in the formats bar
    ctStyle.setQFormat(onoffnull);

    // style defines a heading of the given level
    CTPPr ppr = CTPPr.Factory.newInstance();
    ppr.setOutlineLvl(indentNumber);
    ctStyle.setPPr(ppr);

    XWPFStyle style = new XWPFStyle(ctStyle);

    // is a null op if already defined
    XWPFStyles styles = docxDocument.createStyles();

    style.setType(STStyleType.PARAGRAPH);
    styles.addStyle(style);

}

はい、このスタイルはstyles.xmlに表示されます。

(私は知っています:これはあなたの質問に対する直接の答えではありませんが、インターネット上で使用可能な形式でこの情報を見つけられなかったので、ここに投稿します)

于 2015-01-09T16:16:06.293 に答える
2

はい、手動で行う必要があります。Docx仕様では、スタイルに関する情報を含むstyles.xmlはオプションであるとされています。したがって、明示的に作成しない限り、POIはそれをまったく作成しないとほぼ確信しています。あなたはそれをチェックすることができます:docxファイルを解凍して、このファイルがそこにあるかどうかを確認してください(yourfile.docx / word / styles.xml)。

だから、あなたがすべきこと(docxの用語では、それがPOIでどのように実装されているのかわかりません):

1)styles.xmlを作成し、そこに必要なスタイルを追加します

2)document.xmlとstyles.xmlを接続する関係を作成します(POIは自動的に行う必要があると思います)

3)document.xml内のスタイルIDを使用して、具象テキスト部分(docx用語で実行)を具象スタイルに接続します。

于 2010-04-15T09:06:35.847 に答える