2017-02-16 9 views
0

私はdocx4jを使用してMS Word文書を作成していますが、MS Wordではすべてのテキストがスペルチェッカーで表示されていますが、テキストは英語として帰属しますが、別の言語です。 docx4jまたはApache POIを使用してスペルチェックを無効にする方法はありますか?JavaでWord文書のスペルチェックを無効にする方法はありますか?

+2

私はスペルチェックをかなり確信しているが、ユーザーの好みで、文書自体とは何の関係もありません。そういうわけで、答えは難しいと思います。 – rmlan

+0

ええと、それ以外の方法で簡単に:-)ドキュメント全体に適切な言語を定義できますか? –

+1

適切な言語設定を有効にしてWordで作成したdocxファイルを解凍し、そのプロパティを見つけることができるかもしれません – JonK

答えて

0

情報開示:私はあなたがXHTMLImporterを使用すると、あなたは、適切な言語設定とdocxファイルにインポートする必要があります

docx4j維持します。典型的には、これは、スタイルの一部で行われる

W:スタイル/ W:docDefaults/W:rPrDefault/W:RPR

<w:styles xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> 
    <w:docDefaults> 
    <w:rPrDefault> 
     <w:rPr> 
     <w:lang w:val="en-US" w:eastAsia="ko-KR" w:bidi="ar-SA"/> 
     </w:rPr> 
    </w:rPrDefault> 
    </w:docDefaults> 

この値は、スタイルのオーバーライドされない限り有効であること、又はう他の答えのいくつかを議論する直接フォーマットで。 themeFontLang:

<w:settings xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" > 
    <w:themeFontLang w:val="en-US" w:eastAsia="ko-KR"/> 

あなたがあたり言語テンプレートを維持するか、またはあなたが動的にこれらの設定を変更するdocx4j使用することができます

また、/word/settings.xmlで、ワットをご確認ください。あなたがそれをして何か問題がある場合は、別の質問を投稿してください。、スペル/文法の誤りを隠蔽MainDocumentPartのMDPを仮定について

DocumentSettingsPart dsp = mdp.getDocumentSettingsPart(); 
dsp.getContents().setHideGrammaticalErrors(new BooleanDefaultTrue()); 
dsp.getContents().setHideSpellingErrors(new BooleanDefaultTrue()); 
0

私が知る限り、POIはそのユーザーの好みに到達できません。しかし、あなたはそれを自分で変更し、その文書を将来のすべての文書のテンプレートとして使用することができます。

+0

POIは確かにそれに到達することができます、私の答えを参照してください。 – jmarkmurphy

+0

ありがとうございました!それは私のニーズにはあまりにも非効率的ですが、<1000,000ページ<20万回のレポートを作成しています(カスタマイズされた表セル段落の実行のため) –

1

ドキュメント全体に対して校正をオフにすることはできません。代わりに、文書内のすべての実行ごとにオフにする必要があります。 Apache POIで行うことができますが、このプロパティはまだ浮上していないため、CTクラスを使用する必要があります。ここでは、1回の実行でそれについて調べる方法の1つですr

public static void setNoProof (XWPFRun run) { 
    CTR ctR = run.getCTR(); 
    CTRPr ctRPr = ctR.isSetRPr() ? ctR.getRPr() : ctR.addNewRPr(); 
    if (!ctRPr.isSetNoProof()) { 
     // If the noProof property is missing, add it 
     ctRPr.addNewNoProof(); 
    } else { 
     // If the noProof property is present, make sure it is not 
     // FALSE, OFF, or X_0 
     CTOnOff noProof = ctRPr.getNoProof(); 
     if (noProof.isSetVal() && 
       (noProof.getVal() == STOnOff.FALSE || 
       noProof.getVal() == STOnOff.OFF || 
       noProof.getVal() == STOnOff.X_0)) { 
      noProof.setVal(STOnOff.TRUE); 
     } 
    } 
} 

実行をループして、実行ごとにこのメソッドを呼び出します。

1

「この文書でのみスペルミスを隠す」と「この文書では文法エラーを隠す」の可能性があります。 How to Temporarily Disable Spell Check in Wordを参照してください。 XWPF(*.docx)を使用して

このためXMLは/word/settings.xmlに含まれているとされるようになります:私たちはOPCPackagePackagePartorg.openxmlformats.schemas.wordprocessingml.x2006.main.*オブジェクトを使用して、全体XWPFWorkbookを作成せずにこれを設定することができます

<w:settings ...> 
... 
<w:hideSpellingErrors/> 
<w:hideGrammaticalErrors/> 
... 
</w:settings > 

例:このコードの後

import org.apache.poi.openxml4j.opc.OPCPackage; 
import org.apache.poi.openxml4j.opc.PackagePart; 

import java.io.File; 
import java.io.InputStream; 
import java.io.OutputStream; 

import java.util.regex.Pattern; 

import org.openxmlformats.schemas.wordprocessingml.x2006.main.SettingsDocument; 
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSettings; 
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff; 

import org.openxmlformats.schemas.officeDocument.x2006.relationships.STRelationshipId; 

import org.apache.xmlbeans.XmlOptions; 

import javax.xml.namespace.QName; 

import java.util.Map; 
import java.util.HashMap; 


public class XWPFDisableSpellCheck { 

public static void main(String[] args) throws Exception { 

    File file = new File("XWPFDisableSpellCheck.docx"); 
    OPCPackage opcPackage = OPCPackage.open(file); 

    PackagePart settingsPart = opcPackage.getPartsByName(Pattern.compile("/word/settings.xml")).get(0); 

    SettingsDocument settingsDocument = SettingsDocument.Factory.parse(settingsPart.getInputStream()); 

    CTSettings settings = settingsDocument.getSettings(); 

    if (settings.getHideSpellingErrors() == null) settings.addNewHideSpellingErrors(); 
    if (settings.getHideGrammaticalErrors() == null) settings.addNewHideGrammaticalErrors(); 
    //settings.getHideSpellingErrors().setVal(STOnOff.ON); 
    //settings.getHideGrammaticalErrors().setVal(STOnOff.ON); 

    //create XmlOptions for saving the settings 
    XmlOptions xmlOptions = new XmlOptions(); 
    xmlOptions.setSaveOuter(); 
    xmlOptions.setUseDefaultNamespace(); 
    xmlOptions.setSaveAggressiveNamespaces(); 
    xmlOptions.setCharacterEncoding("UTF-8"); 
    xmlOptions.setSaveSyntheticDocumentElement(new QName(CTSettings.type.getName().getNamespaceURI(), "settings")); 
    Map<String, String> map = new HashMap<String, String>(); 
    map.put(STRelationshipId.type.getName().getNamespaceURI(), "w"); 
    map.put(STRelationshipId.type.getName().getNamespaceURI(), "m"); 
    map.put(STRelationshipId.type.getName().getNamespaceURI(), "o"); 
    xmlOptions.setSaveSuggestedPrefixes(map); 

    //save the settings 
    OutputStream out = settingsPart.getOutputStream(); 
    settings.save(out, xmlOptions); 
    out.close(); 

    opcPackage.close(); 

} 

} 

オプションは、「これだけ文書でスペルミスを隠す」と「この文書の非表示文法エラーのみ」文書XWPFDisableSpellCheck.docxに設定されています。

関連する問題