文本示例(葡萄牙语):普罗库拉圣奥奥

RunProperties runProperties0 = new RunProperties();
var runFont0 = new RunFonts { Ascii = "Arial" };
var size0 = new FontSize { Val = new StringValue("24") };
runProperties0.Append(new Bold());
runProperties0.Append(new Underline() { Val = DocumentFormat.OpenXml.Wordprocessing.UnderlineValues.Single });
//runProperties0.Append(runFont0);
runProperties0.Append(size0);

我期待的是Times New Roman中的"Procura Saint ao o",但我得到的是"Procura Saint ao o",其中ÇÃ返回为Calibri(Corpo).

如何应用泰晤士报新罗马字,即使是特殊的葡萄牙字符.

谢谢!

代码如下:

public static void CreateWordprocessingDocument_teste(string filepath)
    {
        using (WordprocessingDocument wordDocument =
            WordprocessingDocument.Create(filepath, WordprocessingDocumentType.Document))
        {
            MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();

            mainPart.Document = new Document();
            Body body = mainPart.Document.AppendChild(new Body());


            Text text0 = new Text() { Text = "PROCURAÇÃO", Space = SpaceProcessingModeValues.Preserve };


            Run run0 = new Run();

            Paragraph para0 = new Paragraph();

            ParagraphProperties paragraphProperties0 = new ParagraphProperties();
            SpacingBetweenLines spaceBetweenLines0 = new SpacingBetweenLines();
            ParagraphStyleId paragraphStyleId0 = new ParagraphStyleId() { Val = "Normal" };
            Justification justification0 = new Justification() { Val = JustificationValues.Center };
            ParagraphMarkRunProperties paragraphMarkRunProperties0 = new ParagraphMarkRunProperties();

            paragraphProperties0.Append(paragraphStyleId0);
            paragraphProperties0.Append(justification0);
            paragraphProperties0.Append(paragraphMarkRunProperties0);

            RunProperties runProperties0 = new RunProperties();
            var size0 = new FontSize { Val = new StringValue("24") };
            var runFont0 = new RunFonts { Ascii = "Times New Roman" };
            runProperties0.Append(new Bold());
            runProperties0.Append(new Underline() { Val = DocumentFormat.OpenXml.Wordprocessing.UnderlineValues.Single });
            runProperties0.Append(runFont0);
            runProperties0.Append(size0);

            run0.Append(runProperties0);
            run0.Append(text0);
            para0.Append(paragraphProperties0);
            para0.Append(run0);

            body.AppendChild(para0);
        }
    }
        

推荐答案

问题是在RunFonts处房产上使用Ascii.根据文档,此字体分配适用于

前128个Unicode码位

仅限(请参见https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.wordprocessing.runfonts?view=openxml-2.8.1)

因此,尽管符号和符号是拉丁文字符,但它们不是纯ASCII字符.将字体分配给整个字形串,而不仅仅是它的那些纯ASCII字符.

如果出于某种原因必须使用RunFonts,最简单的解决方案似乎是使用所有四个属性ascii、Highansi、Complex和Eastasian,并将它们设置为相同的字体.

Csharp相关问答推荐

. NET 8 HttpClient post参数将其情况更改为camel'

错误401未授权ASP.NET Core.使用JWT创建身份验证/授权

如何循环遍历XML文档 node 以使用XSLT存储值

在路由中使用枚举

.NET SDK包中的官方C#编译器在哪里?

为什么Azure函数(独立工作进程)索引失败?使用Azure App配置的CosmosDbTrigger绑定失败,未解析为值

我找不到ASP.NET Web应用程序(.NET框架).已 Select .NET框架项目和项模板以及此组件(&Q;)

.NET8Blazor-为什么Rapzor渲染在for循环之后显示?

错误:此版本的Visual Studio无法打开以下项目

Foreach非常慢的C#

多个参数的最小API删除

在C#和HttpClient中使用REST API

将列表转换为带有逗号分隔字符串形式的值的字典

如何使ExecuteAsync异步运行

如何根据分割文本的块数来计算文本的大小?

无法创建&Quot;&Quot;类型的实例,因为无法将一个或多个参数绑定到

如何查找Span;T&>是否包含相同顺序的其他Span<;T&>

从实例扩展中调用类型的扩展方法

如何在Blazor 8 RC2静态模式下以编程方式导航到另一个页面

源代码管理是否应忽略Properties/ServiceDependency文件夹