Dokumente einfügen und anhängen

Manchmal ist es erforderlich, mehrere Dokumente zu einem zusammenzufassen. Sie können dies manuell tun oder die Aspose.Words-Funktion zum Einfügen oder Anhängen verwenden.

Mit der Einfügeoperation können Sie den Inhalt zuvor erstellter Dokumente in ein neues oder vorhandenes einfügen.

Mit der Anhängefunktion wiederum können Sie ein Dokument nur am Ende eines anderen Dokuments hinzufügen.

In diesem Artikel wird erklärt, wie Sie ein Dokument auf unterschiedliche Weise einfügen oder an ein anderes anhängen können, und es werden die allgemeinen Eigenschaften beschrieben, die Sie beim Einfügen oder Anhängen von Dokumenten anwenden können.

Fügen Sie ein Dokument ein

Wie oben erwähnt, wird ein Dokument in Aspose.Words als Knotenbaum dargestellt, und beim Einfügen eines Dokuments in ein anderes werden Knoten vom ersten Dokumentbaum in den zweiten kopiert.

Sie können Dokumente auf unterschiedliche Weise an verschiedenen Orten einfügen. Beispielsweise können Sie ein Dokument durch einen Ersetzungsvorgang, ein Zusammenführungsfeld während eines Zusammenführungsvorgangs oder über ein Lesezeichen einfügen.

Sie können auch die insert_document- oder insert_document_inline-Methode verwenden, die dem Einfügen eines Dokuments in Microsoft Word ähnelt, um ein ganzes Dokument an der aktuellen Cursorposition einzufügen, ohne dass es vorher importiert werden muss.

Das folgende Codebeispiel zeigt, wie man ein Dokument mit der insert_document-Methode einfügt:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
src_doc = aw.Document(MY_DIR + "Document source.docx")
dst_doc = aw.Document(MY_DIR + "Northwind traders.docx")
builder = aw.DocumentBuilder(dst_doc)
builder.move_to_document_end()
builder.insert_break(aw.BreakType.PAGE_BREAK)
builder.insert_document(src_doc, aw.ImportFormatMode.KEEP_SOURCE_FORMATTING)
builder.document.save(ARTIFACTS_DIR + "JoinAndAppendDocuments.insert_document.docx")

Das folgende Codebeispiel zeigt, wie man ein Dokument mit der insert_document_inline-Methode einfügt:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
src_doc = aw.DocumentBuilder()
src_doc.write("[src content]")
# Create destination document.
dst_doc = aw.DocumentBuilder()
dst_doc.write("Before ")
dst_doc.insert_node(aw.BookmarkStart(dst_doc.document, "src_place"))
dst_doc.insert_node(aw.BookmarkEnd(dst_doc.document, "src_place"))
dst_doc.write(" after")
self.assertEqual("Before after", dst_doc.document.get_text().strip())
# Insert source document into destination inline.
dst_doc.move_to_bookmark("src_place")
dst_doc.insert_document_inline(src_doc.document, aw.ImportFormatMode.USE_DESTINATION_STYLES, aw.ImportFormatOptions())
self.assertEqual("Before [src content] after", dst_doc.document.get_text().strip())

In den folgenden Unterabschnitten werden die Optionen beschrieben, mit denen Sie ein Dokument in ein anderes einfügen können.

Fügen Sie ein Dokument als Lesezeichen ein

Sie können eine Textdatei in ein Dokument importieren und direkt nach einem Lesezeichen einfügen, das Sie im Dokument definiert haben. Erstellen Sie dazu einen mit einem Lesezeichen versehenen Absatz an der Stelle, an der das Dokument eingefügt werden soll.

Das folgende Codierungsbeispiel zeigt, wie Sie den Inhalt eines Dokuments in ein Lesezeichen in einem anderen Dokument einfügen:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
main_doc = aw.Document(MY_DIR + "Document insertion 1.docx")
sub_doc = aw.Document(MY_DIR + "Document insertion 2.docx")
bookmark = main_doc.range.bookmarks.get_by_name("insertionPlace")
self.insert_document(bookmark.bookmark_start.parent_node, sub_doc)
main_doc.save(ARTIFACTS_DIR + "CloneAndCombineDocuments.insert_document_at_bookmark.docx")

Hängen Sie ein Dokument an

Möglicherweise haben Sie einen Anwendungsfall, bei dem Sie zusätzliche Seiten aus einem Dokument am Ende eines vorhandenen Dokuments einfügen müssen. Dazu müssen Sie lediglich die append_document-Methode aufrufen, um ein Dokument am Ende eines anderen hinzuzufügen.

Das folgende Codebeispiel zeigt, wie ein Dokument an das Ende eines anderen Dokuments angehängt wird:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
dst_doc = aw.Document()
dst_doc.first_section.body.append_paragraph("Destination document text. ")
src_doc = aw.Document()
src_doc.first_section.body.append_paragraph("Source document text. ")
# Append the source document to the destination document.
# Pass format mode to retain the original formatting of the source document when importing it.
dst_doc.append_document(src_doc, aw.ImportFormatMode.KEEP_SOURCE_FORMATTING)
dst_doc.save(ARTIFACTS_DIR + "JoinAndAppendDocuments.keep_source_formatting.docx")

Knoten manuell importieren und einfügen

Mit Aspose.Words können Sie Dokumente automatisch einfügen und anhängen, ohne dass vorherige Importanforderungen erforderlich sind. Wenn Sie jedoch einen bestimmten Knoten Ihres Dokuments einfügen oder anhängen müssen, beispielsweise einen Abschnitt oder einen Absatz, müssen Sie diesen Knoten zunächst manuell importieren.

Wenn Sie einen Abschnitt oder Absatz in einen anderen einfügen oder anhängen müssen, müssen Sie im Wesentlichen die Knoten des ersten Dokumentknotenbaums mithilfe der import_node-Methode in den zweiten importieren. Nach dem Import Ihrer Knoten müssen Sie die insert_after-/insert_before-Methode verwenden, um einen neuen Knoten nach/vor dem Referenzknoten einzufügen. Dadurch können Sie den Einfügevorgang anpassen, indem Sie Knoten aus einem Dokument importieren und an bestimmten Positionen einfügen.

Sie können die append_child-Methode auch verwenden, um einen neuen angegebenen Knoten am Ende der Liste der untergeordneten Knoten hinzuzufügen, beispielsweise wenn Sie Inhalte auf Absatzebene statt auf Abschnittsebene anhängen möchten.

Das folgende Codebeispiel zeigt, wie Sie mithilfe der insert_after-Methode Knoten manuell importieren und nach einem bestimmten Knoten einfügen:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
@staticmethod
def insert_document(insertion_destination: aw.Node, doc_to_insert: aw.Document):
"""Inserts content of the external document after the specified node.
Section breaks and section formatting of the inserted document are ignored.
:param insertion_destination: Node in the destination document after which the content
Should be inserted. This node should be a block level node (paragraph or table).
:param doc_to_insert: The document to insert.
"""
if insertion_destination.node_type not in (aw.NodeType.PARAGRAPH, aw.NodeType.TABLE):
raise ValueError("The destination node should be either a paragraph or table.")
destination_parent = insertion_destination.parent_node
importer = aw.NodeImporter(doc_to_insert, insertion_destination.document, aw.ImportFormatMode.KEEP_SOURCE_FORMATTING)
# Loop through all block-level nodes in the section's body,
# then clone and insert every node that is not the last empty paragraph of a section.
for src_section in doc_to_insert.sections:
for src_node in src_section.as_section().body.get_child_nodes(aw.NodeType.ANY, False):
if src_node.node_type == aw.NodeType.PARAGRAPH:
para = src_node.as_paragraph()
if para.is_end_of_section and not para.has_child_nodes:
continue
new_node = importer.import_node(src_node, True)
destination_parent.insert_after(new_node, insertion_destination)
insertion_destination = new_node

Der Inhalt wird Abschnitt für Abschnitt in das Zieldokument importiert, was bedeutet, dass Einstellungen wie Seiteneinrichtung und Kopf- oder Fußzeilen beim Import erhalten bleiben. Beachten Sie außerdem, dass Sie beim Einfügen oder Anhängen eines Dokuments Formatierungseinstellungen definieren können, um festzulegen, wie zwei Dokumente zusammengefügt werden.

Allgemeine Eigenschaften für Einfüge- und Anhängedokumente

Sowohl die insert_document- als auch die append_document-Methode akzeptieren ImportFormatMode und ImportFormatOptions als Eingabeparameter. Mit ImportFormatMode können Sie steuern, wie die Dokumentformatierung zusammengeführt wird, wenn Sie Inhalte aus einem Dokument in ein anderes importieren, indem Sie verschiedene Formatmodi wie USE_DESTINATION_STYLES, KEEP_SOURCE_FORMATTING und KEEP_DIFFERENT_STYLES auswählen. Beim ImportFormatOptions können Sie verschiedene Importoptionen auswählen, z. B. ignore_header_footer, ignore_text_boxes, keep_source_numbering, merge_pasted_lists und smart_style_behavior.

Mit Aspose.Words können Sie die Visualisierung eines resultierenden Dokuments anpassen, wenn zwei Dokumente in einem Einfüge- oder Anhängevorgang mithilfe von Section und PageSetup zusammengefügt werden. Die page_setup-Eigenschaft enthält alle Attribute eines Abschnitts wie section_start, restart_page_numbering, page_starting_number, orientation und andere. Der häufigste Anwendungsfall besteht darin, die section_start-Eigenschaft festzulegen, um zu definieren, ob der hinzugefügte Inhalt auf derselben Seite angezeigt oder in eine neue Seite aufgeteilt wird.

Das folgende Codebeispiel zeigt, wie Sie ein Dokument an ein anderes anhängen und gleichzeitig verhindern, dass sich der Inhalt auf zwei Seiten aufteilt:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
src_doc = aw.Document(MY_DIR + "Document source.docx")
dst_doc = aw.Document(MY_DIR + "Northwind traders.docx")
# Set the source document to continue straight after the end of the destination document.
src_doc.first_section.page_setup.section_start = aw.SectionStart.CONTINUOUS
# Restart the page numbering on the start of the source document.
src_doc.first_section.page_setup.restart_page_numbering = True
src_doc.first_section.page_setup.page_starting_number = 1
# To ensure this does not happen when the source document has different page setup settings, make sure the
# settings are identical between the last section of the destination document.
# If there are further continuous sections that follow on in the source document,
# this will need to be repeated for those sections.
src_doc.first_section.page_setup.page_width = dst_doc.last_section.page_setup.page_width
src_doc.first_section.page_setup.page_height = dst_doc.last_section.page_setup.page_height
src_doc.first_section.page_setup.orientation = dst_doc.last_section.page_setup.orientation
# Iterate through all sections in the source document.
for para in src_doc.get_child_nodes(aw.NodeType.PARAGRAPH, True):
para = para.as_paragraph()
para.paragraph_format.keep_with_next = True
dst_doc.append_document(src_doc, aw.ImportFormatMode.KEEP_SOURCE_FORMATTING)
dst_doc.save(ARTIFACTS_DIR + "JoinAndAppendDocuments.different_page_setup.docx")