私はHWPFにこの機能がありますが、XWPFではsimularを見つけることができません。Apache POIのXWPFは段落の自動ハイフネーション機能をサポートしていますか?
おそらく、この問題を解決するための回避策があります。あなたが何かを知っているなら、私と共有してください。
ありがとうございます!
私はHWPFにこの機能がありますが、XWPFではsimularを見つけることができません。Apache POIのXWPFは段落の自動ハイフネーション機能をサポートしていますか?
おそらく、この問題を解決するための回避策があります。あなたが何かを知っているなら、私と共有してください。
ありがとうございます!
Word Office OpenXMLでは、自動ハイフネーション設定がドキュメント全体に対して設定されており、単一の段落では抑制されている可能性があります。ドキュメント全体の設定は、パッケージの/word/settings.xml
にあります。これはXWPFSettingsですが、これまでは高レベルオブジェクトapache poi
を使用してこれを取得することはできません。したがって、これを取得してCTSettings.addNewAutoHyphenationにアクセスするには、低レベルのオブジェクトとリフレクションを使用する必要があります。
単一段落の自動ハイフネーションの抑制は、CTPPrBase.addNewSuppressAutoHyphensで行われ、ハイレベルapache poi
を使用しても取得できません。
例:
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.POIXMLDocumentPart;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSettings;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STSectionMark;
import java.lang.reflect.Field;
import java.math.BigInteger;
public class CreateWordAutoHyphenation {
public static void main(String[] args) throws Exception {
XWPFDocument document = new XWPFDocument();
POIXMLDocumentPart part = null;
for (int i = 0; i < document.getRelations().size(); i++) {
part = document.getRelations().get(i);
if (part instanceof XWPFSettings) break;
}
if (part instanceof XWPFSettings) {
XWPFSettings settings = (XWPFSettings)part;
Field _ctSettings = XWPFSettings.class.getDeclaredField("ctSettings");
_ctSettings.setAccessible(true);
CTSettings ctSettings = (CTSettings)_ctSettings.get(settings);
ctSettings.addNewAutoHyphenation();
}
String testtext = "This text tests whether automatic hyphenation opportunities are set on for this document and not are suppressed for this paragraph. Since in Word Office OpenXML the automatic hyphenation settings are set for the whole document and may be suppressed for single paragraphs.";
XWPFParagraph paragraph = document.createParagraph();
paragraph.setAlignment(ParagraphAlignment.BOTH);
XWPFRun run = paragraph.createRun();
run.setFontSize(18);
run.getCTR().getRPr().addNewLang().setVal("en-US");
run.setText(testtext);
paragraph = document.createParagraph();
run=paragraph.createRun();
run.addBreak(BreakType.COLUMN);
paragraph.setAlignment(ParagraphAlignment.BOTH);
paragraph.getCTP().addNewPPr().addNewSuppressAutoHyphens();
run = paragraph.createRun();
run.setFontSize(18);
run.getCTR().getRPr().addNewLang().setVal("en-US");
run.setText(testtext);
document.getDocument().getBody().addNewSectPr().addNewType().setVal(STSectionMark.CONTINUOUS);
document.getDocument().getBody().getSectPr().addNewCols().setNum(BigInteger.valueOf(2));
document.write(new FileOutputStream("CreateWordAutoHyphenation.docx"));
document.close();
}
}
それは完璧に動作します!ありがとう、あなたは私を数時間節約しました! Btw CTSettingsには他にも使えるものがたくさんあります。 – amseager