如何更改Open XML字体

27

我该如何通过OpenXml更改文档的字体族?我尝试了一些方法,但是当我打开文档时,它总是使用Calibri字体。

请查看我的代码和我尝试过的方法。

我认为页眉构建器无关紧要。

private static void BuildDocument(string fileName, List<string> lista, string tipo)
{                
    using (var w = WordprocessingDocument.Create(fileName, WordprocessingDocumentType.Document))
    {
        var mp = w.AddMainDocumentPart();
        var d = new DocumentFormat.OpenXml.Wordprocessing.Document();
        var b = new Body();
        var p = new DocumentFormat.OpenXml.Wordprocessing.Paragraph();
        var r = new Run();

        // Get and format the text.                                    
        for (int i = 0; i < lista.Count; i++)
        {
            Text t = new Text();                    
            t.Text = lista[i];
            if (t.Text == "          ")
            {
                r.Append(new CarriageReturn());
            }
            else
            {
                r.Append(t);
                r.Append(new CarriageReturn());
            }
        }

        // What I tried
        var rPr = new RunProperties(new RunFonts() { Ascii = "Arial" });                

        lista.Clear();                
        p.Append(r);                
        b.Append(p);
        var hp = mp.AddNewPart<HeaderPart>();
        string headerRelationshipID = mp.GetIdOfPart(hp);
        var sectPr = new SectionProperties();                
        var headerReference = new HeaderReference();                
        headerReference.Id = headerRelationshipID;
        headerReference.Type = HeaderFooterValues.Default;
        sectPr.Append(headerReference);
        b.Append(sectPr);
        d.Append(b);                

        // Customize the header.
        if (tipo == "alugar")
        {
            hp.Header = BuildHeader(hp, "Anúncio Aluguel de Imóvel");
        }
        else if (tipo == "vender")
        {
            hp.Header = BuildHeader(hp, "Anúncio Venda de Imóvel");
        }
        else
        {
            hp.Header = BuildHeader(hp, "Aluguel/Venda de Imóvel");
        }

        hp.Header.Save();
        mp.Document = d;
        mp.Document.Save();
        w.Close();
    }             
}
2个回答

45

要使用特定字体样式化文本,请按照以下步骤:

  1. 创建 RunProperties 类的实例。
  2. 创建 RunFont 类的实例。将 Ascii 属性设置为所需的字体系列。
  3. 使用 FontSize 类指定字体大小(半点字体大小)。
  4. 将 RunProperties 实例添加到包含要样式化的文本的运行中。

下面是一个小的代码示例,演示了上述步骤:

private static void BuildDocument(string fileName, List<string> text)
{
    using (var wordDoc = WordprocessingDocument.Create(fileName, WordprocessingDocumentType.Document))
    {
        var mainPart = wordDoc.AddMainDocumentPart();
        mainPart.Document = new Document();

        var run = new Run();

        foreach (string currText in text)
        {
            run.AppendChild(new Text(currText));
            run.AppendChild(new CarriageReturn());
        }

        var paragraph = new Paragraph(run);
        var body = new Body(paragraph);

        mainPart.Document.Append(body);

        var runProp = new RunProperties();

        var runFont = new RunFonts { Ascii = "Arial" };

        // 48 half-point font size
        var size = new FontSize { Val = new StringValue("48") }; 

        runProp.Append(runFont);
        runProp.Append(size);

        run.PrependChild(runProp);

        mainPart.Document.Save();
        wordDoc.Close();
    }
}
希望这能有所帮助。

9
当您使用非ASCII字符创建文档时,需要在“RunFonts”实例上设置其他属性。例如,如果您想设置带有德语umlauts的文本的字体,则还需要将“HighAnsi”属性更改为您的字体(例如,“Arial”)。 - Chaquotay

0
如果您正在使用样式表,只需在字体初始化期间的适当字体索引处添加FontName属性的实例即可。
    private Stylesheet GenerateStylesheet()
    {
        Stylesheet styleSheet = null;

        Fonts fonts = new Fonts(
            new Font( // Index 0 - default
                new FontSize() { Val = 8 },
                new FontName() { Val = "Arial"} //i.e. or any other font name as string
            );

        Fills fills = new Fills( new Fill(new PatternFill() { PatternType = PatternValues.None }));

        Borders borders = new Borders( new Border() );

        CellFormats cellFormats = new CellFormats( new CellFormat () );

        styleSheet = new Stylesheet(fonts, fills, borders, cellFormats);

        return styleSheet;
    }

然后在Workbook样式部分中使用它,如下所示。

WorkbookStylesPart stylePart = workbookPart.AddNewPart<WorkbookStylesPart>();
stylePart.Stylesheet = GenerateStylesheet();
stylePart.Stylesheet.Save();

这个问题是关于Word的;我认为你的回答是针对Excel的。 - james.garriss
你好james.garriss,你可能还没有尝试过我的答案。仅仅基于猜测就对别人的回答进行负评是非常不好的做法。虽然像你这样的人让Stack Overflow平台对新手来说变得不舒服。请尽量避免滥用你的负评权力。 - Shafiqul Islam
如果你回答问题得当,你会得到点赞。如果不行,你会被踩。这就是SO的工作方式。攻击我是没有帮助的。也许你可以更新你的答案使其适用于Word。 - james.garriss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接