我正在使用docx4j创建MS Word文档,而在MS Word中,所有文本都标有拼写检查,因为文本被归为英语,但它是不同的语言。有没有办法如何使用docx4j或Apache POI禁用拼写检查?
答案 0 :(得分:1)
没有一个地方可以关闭整个文档的校样。相反,必须为文档中的每次运行关闭它。您可以使用Apache POI执行此操作,但必须使用CT类,因为此属性尚未浮出水面。以下是一次运行 switch(Choice){
case 1 : //do something
case 2 : //do something
case 8 : //do something
default: //to do default operation
break;
case 3 :
case 4 :
}
的方法。
r
现在循环运行,并为每次运行调用此方法。
答案 1 :(得分:1)
有可能“仅在此文档中隐藏拼写错误”和“仅在此文档中隐藏语法错误”。见How to Temporarily Disable Spell Check in Word。
使用XWPF(*.docx
),XML的内容包含在/word/settings.xml
中,如下所示:
<w:settings ...>
...
<w:hideSpellingErrors/>
<w:hideGrammaticalErrors/>
...
</w:settings >
我们可以设置此项,而无需使用XWPFWorkbook
,OPCPackage
和PackagePart
对象创建整个org.openxmlformats.schemas.wordprocessingml.x2006.main.*
。
示例:
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
中设置了“仅在此文档中隐藏拼写错误”和“仅隐藏此文档中的语法错误”选项。
答案 2 :(得分:0)
据我所知,POI无法达到用户偏好。但是您可以自己更改它并将该文档用作所有未来文档的模板。
答案 3 :(得分:0)
披露:我维护docx4j
使用XHTMLImporter时,您应该使用合适的语言设置导入docx。
通常这在样式部分中完成, w:styles / 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>
除非在样式中被覆盖,或者在其他一些答案中讨论的直接格式化中,否则此值将生效。
另外,在/word/settings.xml中,选中 w:themeFontLang :
<w:settings xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" >
<w:themeFontLang w:val="en-US" w:eastAsia="ko-KR"/>
您可以维护每种语言的模板,也可以使用docx4j动态更改这些设置。如果你想这样做并有任何问题,请发一个单独的问题。
关于隐藏拼写/语法错误,假设MainDocumentPart mdp:
DocumentSettingsPart dsp = mdp.getDocumentSettingsPart();
dsp.getContents().setHideGrammaticalErrors(new BooleanDefaultTrue());
dsp.getContents().setHideSpellingErrors(new BooleanDefaultTrue());