Ms word 如何使用OOXML以编程方式检测复杂的scipt?

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

我们正在使用Windward在Microsoft Word中生成报告

由于某些更新,Unicode字符不再正确显示

虽然供应商仍在寻找修复方案,但我们正在寻找解决方案

我注意到的一个症状是“正常”样式没有出现在功能区的“样式库”中

我可以在文件的“styles.xml”部分找到它。我注意到该样式没有与之关联的RSID,就像普通MS Word文件那样

好文件“正常”样式出现在库中

<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,那么我建议,是的。