Поделиться через


Добавить новую часть документа, которая получает ID отношения в пакет

В этом разделе показано, как использовать классы в пакете SDK Open XML для Office для добавления части документа (файла), которая получает параметр связи Id для текстового документа.


Пакеты и части документов

Документ Open XML хранится в виде пакета, формат которого определяется стандартом ISO/IEC 29500. Пакет может содержать несколько частей, между которыми существуют связи. Связь между частями определяет категорию документа. Документ может быть определен как текстовый, если его элемент связи пакета содержит связь с основной частью документа. Если элемент связи пакета содержит связь с частью презентации, документ может быть определен как документ презентации. Если элемент связи пакета содержит связь с частью книги, документ определяется как электронная таблица. В данном практическом руководстве рассматривается пакет текстового документа.


Структура документа WordProcessingML

Базовая структура WordProcessingML документа состоит из document элементов и body , за которыми следует один или несколько элементов уровня блока, таких как p, который представляет абзац. Абзац содержит один или несколько r элементов. Представляет r собой область текста с общим набором свойств, таких как форматирование. Выполнение содержит один или несколько t элементов. Элемент t содержит диапазон текста. В следующем примере кода показана разметка WordprocessingML для документа, содержащего текст "Пример текста".

    <w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
      <w:body>
        <w:p>
          <w:r>
            <w:t>Example text.</w:t>
          </w:r>
        </w:p>
      </w:body>
    </w:document>

С помощью пакета SDK Open XML можно создавать структуру документа и содержимое с помощью строго типизированных классов, соответствующих WordprocessingML элементам. Эти классы находятся в пространстве имен. В следующей таблице перечислены имена классов, которые соответствуют documentэлементам , body, p, rи t .

Элемент WordprocessingML Класс пакета SDK Open XML Описание
<document/> Document Корневой элемент основной части документа.
<body/> Body Контейнер для структур уровня блокировки, таких как абзацы, таблицы, примечания и других элементов, описанных в спецификации ISO/IEC 29500.
<p/> Paragraph Абзац.
<r/> Run Прогон.
<t/> Text Диапазон текста.

Дополнительные сведения об общей структуре частей и элементов документа WordprocessingML см. в разделе Структура документа WordprocessingML.


Механизм работы примера кода

Пример кода, приведенный в этом разделе, начинается с передачи параметра, представляющего путь к документу Word. Затем он создает новый объект WordprocessingDocument в инструкции using.

static void AddNewPart(string document)
{
    // Create a new word processing document.
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(document, WordprocessingDocumentType.Document))

После этого код добавляет в новый текстовый документ часть MainDocumentPart с идентификатором связи rId1. Он также добавляет CustomFilePropertiesPart часть и в CoreFilePropertiesPart новый текстовый документ.

// Add the MainDocumentPart part in the new word processing document.
MainDocumentPart mainDocPart = wordDoc.AddMainDocumentPart();
mainDocPart.Document = new Document();

// Add the CustomFilePropertiesPart part in the new word processing document.
var customFilePropPart = wordDoc.AddCustomFilePropertiesPart();
customFilePropPart.Properties = new DocumentFormat.OpenXml.CustomProperties.Properties();

// Add the CoreFilePropertiesPart part in the new word processing document.
var coreFilePropPart = wordDoc.AddCoreFilePropertiesPart();
using (XmlTextWriter writer = new XmlTextWriter(coreFilePropPart.GetStream(FileMode.Create), System.Text.Encoding.UTF8))
{
    writer.WriteRaw("""
        <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" />
        """);
    writer.Flush();
}

Затем код добавляет DigitalSignatureOriginPart часть, ExtendedFilePropertiesPart часть и ThumbnailPart часть в новый текстовый документ с идентификаторами реальности rId4, rId5 и rId6.

Примечание.

Метод AddNewPart создает связь между текущей частью документа и новой частью документа. Данный метод возвращает новую часть документа. Кроме того, можно использовать метод для заполнения части документа.

Пример кода

Следующий код добавляет новую часть документа, которая содержит пользовательский XML-код из внешнего файла, а затем выполняется заполнение этой части документа. Ниже приведен полный пример кода в C# и Visual Basic.

static void AddNewPart(string document)
{
    // Create a new word processing document.
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(document, WordprocessingDocumentType.Document))
    {
        // Add the MainDocumentPart part in the new word processing document.
        MainDocumentPart mainDocPart = wordDoc.AddMainDocumentPart();
        mainDocPart.Document = new Document();

        // Add the CustomFilePropertiesPart part in the new word processing document.
        var customFilePropPart = wordDoc.AddCustomFilePropertiesPart();
        customFilePropPart.Properties = new DocumentFormat.OpenXml.CustomProperties.Properties();

        // Add the CoreFilePropertiesPart part in the new word processing document.
        var coreFilePropPart = wordDoc.AddCoreFilePropertiesPart();
        using (XmlTextWriter writer = new XmlTextWriter(coreFilePropPart.GetStream(FileMode.Create), System.Text.Encoding.UTF8))
        {
            writer.WriteRaw("""
                <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
                <cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" />
                """);
            writer.Flush();
        }
        // Add the DigitalSignatureOriginPart part in the new word processing document.
        wordDoc.AddNewPart<DigitalSignatureOriginPart>("rId4");

        // Add the ExtendedFilePropertiesPart part in the new word processing document.
        var extendedFilePropPart = wordDoc.AddNewPart<ExtendedFilePropertiesPart>("rId5");
        extendedFilePropPart.Properties = new DocumentFormat.OpenXml.ExtendedProperties.Properties();

        // Add the ThumbnailPart part in the new word processing document.
        wordDoc.AddNewPart<ThumbnailPart>("image/jpeg", "rId6");
    }
}

См. также