【发布时间】:2015-08-25 10:34:39
【问题描述】:
如何设置 Run 和/或 Paragraph 的样式以同时支持 RTL 和 LTR 字词?
问题是:我有一个包含波斯语和英语单词的复杂文本,我正在尝试使用 OpenXML SDK 创建一个.docx 文档。但是,英文单词,也得到 RTL。假设我有这个文本:
این متن Javad Amiry انگلیسی ست و باید چپ به راست شود.
我希望将文本放在这样的文档中:
但我得到了这个:
如您所见,英语单词是反之亦然!意思是,虽然我期待Javad Amiry,但我得到了davaJ yrimA!你有什么办法解决这个问题吗?
我使用的样式如下图:
var text = "این متن Javad Amiry انگلیسی ست و باید چپ به راست شود.";
var par = new Paragraph();
var pPr = new ParagraphProperties(
new BiDi(),
new Justification { Val = JustificationValues.Both },
new RunFonts {
Ascii = "Arial",
HighAnsi = "Arial",
EastAsia = "Arial",
ComplexScript = "B Mitra",
Hint = FontTypeHintValues.ComplexScript,
},
new FontSize { Val = "24" },
new FontSizeComplexScript { Val = "24" },
new Languages { Bidi = "fa-IR", Val = "en-US", EastAsia = "en-US" }
);
var rPr = new RunProperties(
new RightToLeftText(),
new RunFonts {
Ascii = "Arial",
HighAnsi = "Arial",
EastAsia = "Arial",
ComplexScript = "B Mitra",
Hint = FontTypeHintValues.ComplexScript
},
new FontSize { Val = "24" },
new FontSizeComplexScript { Val = "24" },
new Languages { Bidi = "fa-IR", Val = "en-US", EastAsia = "en-US" },
new BiDi { Val = true }
);
var run = new Run();
run.AppendChild(rPr);
run.AppendChild(new Text(text));
par.AppendChild(pPr);
par.AppendChild(run);
// finally append to the body
body.Append(par);
提前致谢。
【问题讨论】:
-
你好。您确定可以将这两种类型的文本组合在一行中吗?我的意思是你能用 MsWord 创建这样的文档吗?如果你提供这样的文件,99%我会帮你。无论如何,我的观点是为每种类型的文本使用单独的运行(具有不同的文本方向属性)。
-
嗨。是的,Q 中的第一个图像是在 MS Word 中创建的,它是正确的。但是,你是对的。我确实解压缩了 MSW 创建的文档并查看了生成的 XML。它绝对使用 2 个单独的
Runs。但我很好奇是否有任何方法可以将它们合二为一Run。感谢您的咨询。干杯。 +1
标签: c# c#-4.0 openxml openxml-sdk bidi