Vložit a doplnit dokumenty

Někdy je třeba kombinovat několik dokumentů do jednoho. Můžete to udělat ručně nebo můžete použít Aspose.Words vložit nebo přidat funkci.

Operace vložení umožňuje vložení obsahu dříve vytvořených dokumentů do nového nebo stávajícího dokumentu.

Funkce Append vám pak umožní přidat dokument pouze na konci jiného dokumentu.

Tento článek vysvětluje, jak vložit nebo přidat dokument k jinému jiným způsobem a popisuje společné vlastnosti, které můžete použít při vkládání nebo přidávání dokumentů.

Vložit dokument

Jak bylo uvedeno výše, Aspose.Words dokument je reprezentován jako strom uzlů a operace vložení jednoho dokumentu do druhého je kopírování uzlů od prvního stromu dokumentu do druhého.

Dokumenty můžete vkládat do různých míst různými způsoby. Například můžete dokument vložit prostřednictvím náhradní operace, pole sloučení během operace sloučení nebo prostřednictvím záložky.

Můžete také použít insert_document nebo insert_document_inline metoda, která je podobná vložení dokumentu do Microsoft Word, vložit celý dokument do aktuální polohy kurzoru bez předchozího importu.

Následující příklad kódu ukazuje, jak vložit dokument pomocí vložit_dokument metoda:

# 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")

Následující příklad kódu ukazuje, jak vložit dokument pomocí insert_document_inline metoda:

# 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())

Následující pododdíly popisují možnosti, během kterých můžete vložit jeden dokument do druhého.

Vložit dokument do záložky

Můžete importovat textový soubor do dokumentu a vložit jej hned po záložce, kterou jste definovali v dokumentu. Chcete-li to udělat, vytvořte záložek odstavec, kde chcete dokument vložit.

Následující kódovací příklad ukazuje, jak vložit obsah jednoho dokumentu do záložky do jiného dokumentu:

# 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")

Přidání dokumentu

Můžete mít případ použití, kde potřebujete zahrnout další stránky z dokumentu do konce stávajícího dokumentu. K tomuhle stačí zavolat append_document způsob přidání dokumentu na konec jiného.

Následující příklad kódu ukazuje, jak připojit dokument ke konci jiného dokumentu:

# 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")

Importovat a vložit uzly ručně

Aspose.Words umožňuje automaticky vkládat a přidávat dokumenty bez předchozích dovozních požadavků. Pokud však potřebujete vložit nebo přidat konkrétní uzel vašeho dokumentu, jako je sekce nebo odstavec, pak nejprve musíte importovat tento uzel ručně.

Pokud potřebujete vložit nebo připojit jeden oddíl nebo odstavec k druhému, musíte v podstatě importovat uzly prvního uzel dokumentu do druhého stromu pomocí import_node metoda. Po importu uzlů, musíte použít insert_after / insert_before metoda pro vložení nového uzlu po/před referenčním uzlem. To vám umožní přizpůsobit proces vkládání importem uzlů z dokumentu a vložením na dané pozice.

Můžete také použít append_child způsob, jak přidat nový zadaný uzel na konec seznamu dětských uzlů, například, pokud chcete přidat obsah na úrovni odstavce místo na úrovni sekce.

Následující příklad kódu ukazuje, jak ručně importovat uzly a vložit je po konkrétním uzlu pomocí insert_after metoda:

# 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

Obsah je importován do sekce cílového dokumentu podle oddílu, což znamená, že nastavení, jako je nastavení stránek a hlavičky nebo zápatí, jsou zachována během importu. Je také užitečné poznamenat, že můžete definovat nastavení formátování, když vložíte nebo připojíte dokument, abyste určili, jak jsou dva dokumenty spojeny dohromady.

Společné vlastnosti pro vložení a doplnění dokumentů

Oba insert_document a append_document metody přijatelné ImportFormatMode a ImportFormatOptions jako vstupní parametry. • ImportFormatMode umožňuje kontrolovat, jak je formátování dokumentů sloučeno při importu obsahu z jednoho dokumentu do jiného výběrem různých režimů formátu, jako je USE_DESTINATION_STYLES, KEEP_SOURCE_FORMATTING, a KEEP_DIFFERENT_STYLES. • ImportFormatOptions umožňuje vybrat různé možnosti importu, jako je ignore_header_footer, ignore_text_boxes, keep_source_numbering, merge_pasted_lists, a smart_style_behavior.

Aspose.Words umožňuje nastavit vizualizaci výsledného dokumentu, když jsou dva dokumenty přidány dohromady v insertu nebo aplikaci pomocí Section a PageSetup. • page_setup vlastnost obsahuje všechny atributy sekce, jako je section_start? restart_page_numbering, page_starting_number, orientation, a další. Nejčastějším případem použití je nastavení section_start vlastnost definovat, zda se přidaný obsah objeví na stejné stránce nebo se rozdělí na nový.

Následující příklad kódu ukazuje, jak připojit jeden dokument k druhému a zároveň udržet obsah od rozdělení na dvě strany:

# 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")