как я могу изменить шрифт открыть xml

Как я могу изменить семейство шрифтов документа через 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();
    }             
}

person Lucas_Santos    schedule 31.10.2011    source источник


Ответы (2)


Чтобы оформить текст с помощью определенного шрифта, выполните следующие действия:

  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();
    }
}

Надеюсь это поможет.

person Hans    schedule 31.10.2011
comment
Когда вы создаете документы с не-ascii-символами, вам необходимо установить дополнительные свойства экземпляра RunFonts. Например, если вы хотите установить шрифт текста с немецкими умлаутами, вам также необходимо изменить свойство HighAnsi на свой шрифт (например, Arial). - person Chaquotay; 01.06.2015

Если вы используете таблицу стилей, просто добавьте экземпляр свойства 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;
    }

Затем используйте его в части стиля рабочей книги, как показано ниже.

WorkbookStylesPart stylePart = workbookPart.AddNewPart<WorkbookStylesPart>();
stylePart.Stylesheet = GenerateStylesheet();
stylePart.Stylesheet.Save();
person Shafiqul Islam    schedule 30.04.2020
comment
Вопрос был для Word; Я думаю, что ваш ответ для Excel. - person james.garriss; 14.06.2021
comment
Здравствуйте, james.garriss, возможно, вы не пробовали мой ответ. Просто основываясь на вашем предположении, что голосование против чьего-то ответа - очень плохая практика. Хотя некоторые ребята вроде вас сделали платформу переполнения стека неудобной для новичков. Пожалуйста, постарайтесь не злоупотреблять своим отрицательным голосом. - person Shafiqul Islam; 16.06.2021
comment
Если вы правильно ответите на вопрос, вы получите голосование. Если вы этого не сделаете, вы получите минус. Так работает ТАК. Атака на меня не поможет. Может быть, вы могли бы просто обновить свой ответ, чтобы он работал в Word. - person james.garriss; 18.06.2021