Добавить новую часть документа, которая получает 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");
}
}