Ms word 如何使用OOXML以编程方式检测复杂的scipt?
我们正在使用Windward在Microsoft Word中生成报告 由于某些更新,Unicode字符不再正确显示 虽然供应商仍在寻找修复方案,但我们正在寻找解决方案 我注意到的一个症状是“正常”样式没有出现在功能区的“样式库”中 我可以在文件的“styles.xml”部分找到它。我注意到该样式没有与之关联的RSID,就像普通MS Word文件那样 好文件“正常”样式出现在库中Ms word 如何使用OOXML以编程方式检测复杂的scipt?,ms-word,openxml,windward,Ms Word,Openxml,Windward,我们正在使用Windward在Microsoft Word中生成报告 由于某些更新,Unicode字符不再正确显示 虽然供应商仍在寻找修复方案,但我们正在寻找解决方案 我注意到的一个症状是“正常”样式没有出现在功能区的“样式库”中 我可以在文件的“styles.xml”部分找到它。我注意到该样式没有与之关联的RSID,就像普通MS Word文件那样 好文件“正常”样式出现在库中 <w:style w:type="paragraph" w:styleId="Normal" w:default
<w:style w:type="paragraph" w:styleId="Normal" w:default="1">
<w:name w:val="Normal" />
<w:qFormat />
<w:rsid w:val="003C4F1E" />
</w:style>
<w:style w:type="paragraph" w:default="1" w:styleId="Normal">
<w:name w:val="Normal"/>
</w:style>
错误文件“正常”样式不会出现在库中
<w:style w:type="paragraph" w:styleId="Normal" w:default="1">
<w:name w:val="Normal" />
<w:qFormat />
<w:rsid w:val="003C4F1E" />
</w:style>
<w:style w:type="paragraph" w:default="1" w:styleId="Normal">
<w:name w:val="Normal"/>
</w:style>
修改Styles.xml文件,使“正常”样式具有rsid和qFormat xml标记,解决了将“正常”样式显示在库中的问题
我注意到,一旦“正常”重新出现,并且在不必首先选择文档中的任何文本的情况下单击它,Unicode字符就会正确显示
当我选中document.xml时,我注意到在运行之前添加了以下xml:
<w:rPr>
<w:rFonts w:ascii="Mangal" w:hAnsi="Mangal" w:cs="Mangal"/>
</w:rPr>
Word是如何知道为runPoperty选择这些值的
如何使用ooxml检测复杂的脚本,然后进行适当的字体选择
使用复杂脚本的示例XML
<w:r>
<w:rPr>
<w:rFonts w:ascii="Mangal" w:hAnsi="Mangal" w:cs="Mangal"/>
</w:rPr>
<w:t>एनडीटीवी</w:t>
</w:r>
एनडीटीवी
到目前为止我所拥有的
static bool GetRunText()
{
bool bStylesFound = false;
using (WordprocessingDocument doc = WordprocessingDocument.Open(_path, false))
{
// Get a reference to the main document part.
var docPart = doc.MainDocumentPart;
// Get the first paragraph.
Paragraph p = docPart.Document.Body.Descendants<Paragraph>().ElementAtOrDefault(0);
if (p == null)
{
Console.WriteLine("No paragraphs found.");
}
else
{
Run run = p.Descendants<Run>().ElementAtOrDefault(1);
RunProperties rp = run.RunProperties;
//Console.WriteLine(rp.RunFonts.);
bStylesFound = true;
}
return bStylesFound;
}
}
static bool GetRunText()
{
bool bStylesFound=false;
使用(WordprocessingDocument doc=WordprocessingDocument.Open(_path,false))
{
//获取对主文档部分的引用。
var docPart=doc.MainDocumentPart;
//获取第一段。
段落p=docPart.Document.Body.subjects().ElementAtOrDefault(0);
if(p==null)
{
Console.WriteLine(“未找到段落”);
}
其他的
{
Run-Run=p.subjects().elementatorderfault(1);
RunProperties rp=run.RunProperties;
//Console.WriteLine(rp.RunFonts.);
bStylesFound=true;
}
返回bStylesFound;
}
}
请使用该链接将您所说的“复杂脚本”的示例复制/粘贴到问题中,好吗?然后我们可以做一些测试。不过,我马上会说,检查字符是否有特定范围的Unicode值…@Cindymister:我已经用一个示例更新了我的帖子。当我将字符复制/粘贴到Word中时,这就是我得到的Word Open XML。请注意段落和运行格式(pPr和rPr)的语言属性w:bidi
。我认为,如果您检查是否存在w:bidi
,您应该能够找到这些<代码>एनडीटीवी代码>可以检查运行中的文本是否在指定的unicode范围内。似乎U+0900到U+097F也注意到了w:hint=“cs”
和
-cs,我相信,它代表复杂脚本(只是刚刚看到)。尽管这些可能也不存在。在这种情况下,如果“测试它所属的范围”意味着按照Slai检查Unicode,那么我建议,是的。请使用链接将“复杂脚本”的意思复制/粘贴到问题中,好吗?然后我们可以做一些测试。不过,我马上会说,检查字符是否有特定范围的Unicode值…@Cindymister:我已经用一个示例更新了我的帖子。当我将字符复制/粘贴到Word中时,这就是我得到的Word Open XML。请注意段落和运行格式(pPr和rPr)的语言属性w:bidi
。我认为,如果您检查是否存在w:bidi
,您应该能够找到这些<代码>एनडीटीवी代码>可以检查运行中的文本是否在指定的unicode范围内。似乎U+0900到U+097F也注意到了w:hint=“cs”
和
-cs,我相信,它代表复杂脚本(只是刚刚看到)。尽管这些可能也不存在。在这种情况下,如果“测试它所属的范围”意味着将Unicode检查为Slai,那么我建议,是的。