Wstaw i dołącz dokumenty
Czasami wymagane jest połączenie kilku dokumentów w jeden. Możesz to zrobić ręcznie lub możesz użyć funkcji wstawiania lub dołączania Aspose.Words.
Operacja wstawiania umożliwia wstawienie treści wcześniej utworzonych dokumentów do nowego lub istniejącego.
Z kolei funkcja dołączania pozwala na dodanie dokumentu dopiero na końcu innego dokumentu.
W tym artykule wyjaśniono, jak wstawić lub dołączyć dokument do innego na różne sposoby i opisano typowe właściwości, które można zastosować podczas wstawiania lub dołączania dokumentów.
Wstaw dokument
Jak wspomniano powyżej, w Aspose.Words dokument jest reprezentowany jako drzewo węzłów, a operacja wstawienia jednego dokumentu do drugiego polega na skopiowaniu węzłów z pierwszego drzewa dokumentu do drugiego.
Dokumenty można wstawiać w różnych lokalizacjach na różne sposoby. Można na przykład wstawić dokument poprzez operację zamiany, pole scalania podczas operacji scalania lub poprzez zakładkę.
Możesz także użyć metody insert_document lub insert_document_inline, która jest podobna do wstawiania dokumentu w formacie Microsoft Word, aby wstawić cały dokument w bieżącej pozycji kursora bez wcześniejszego importowania.
Poniższy przykład kodu pokazuje, jak wstawić dokument przy użyciu metody wstaw_dokument:
# 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") |
Poniższy przykład kodu pokazuje, jak wstawić dokument przy użyciu metody wstaw_dokument_w wierszu:
# 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()) |
W poniższych podrozdziałach opisano możliwości wstawiania jednego dokumentu do drugiego.
Wstaw dokument w zakładce
Możesz zaimportować plik tekstowy do dokumentu i wstawić go zaraz za zakładką zdefiniowaną w dokumencie. Aby to zrobić, utwórz zakładkę akapitu, w którym chcesz wstawić dokument.
Poniższy przykład kodowania pokazuje, jak wstawić zawartość jednego dokumentu do zakładki w innym dokumencie:
# 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") |
Dołącz dokument
Może się zdarzyć, że zajdzie potrzeba dołączenia dodatkowych stron z dokumentu na końcu istniejącego dokumentu. Aby to zrobić, wystarczy wywołać metodę append_document, aby dodać dokument na końcu innego.
Poniższy przykład kodu pokazuje, jak dołączyć dokument na końcu innego 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") |
Importuj i wstawiaj węzły ręcznie
Aspose.Words umożliwia automatyczne wstawianie i dołączanie dokumentów bez konieczności wcześniejszego importowania. Jeśli jednak chcesz wstawić lub dołączyć określony węzeł dokumentu, na przykład sekcję lub akapit, musisz najpierw ręcznie zaimportować ten węzeł.
Kiedy chcesz wstawić lub dołączyć jedną sekcję lub akapit do drugiej, zasadniczo musisz zaimportować węzły pierwszego drzewa węzłów dokumentu do drugiego przy użyciu metody import_node. Po zaimportowaniu węzłów należy użyć metody insert_after/insert_before, aby wstawić nowy węzeł za/przed węzłem referencyjnym. Pozwala to dostosować proces wstawiania poprzez import węzłów z dokumentu i wstawianie ich w określonych pozycjach.
Możesz także użyć metody append_child, aby dodać nowy określony węzeł na końcu listy węzłów podrzędnych, na przykład jeśli chcesz dołączyć treść na poziomie akapitu, a nie sekcji.
Poniższy przykład kodu pokazuje, jak ręcznie importować węzły i wstawiać je po określonym węźle przy użyciu metody insert_after:
# 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 |
Treść jest importowana do dokumentu docelowego sekcja po sekcji, co oznacza, że ustawienia, takie jak ustawienia strony oraz nagłówki i stopki, zostaną zachowane podczas importu. Warto również pamiętać, że podczas wstawiania lub dołączania dokumentu można zdefiniować ustawienia formatowania, aby określić sposób łączenia dwóch dokumentów.
Wspólne właściwości wstawiania i dołączania dokumentów
Obie metody insert_document i append_document akceptują ImportFormatMode i ImportFormatOptions jako parametry wejściowe. Plik ImportFormatMode pozwala kontrolować sposób łączenia formatowania dokumentu podczas importowania treści z jednego dokumentu do drugiego, wybierając różne tryby formatu, takie jak USE_DESTINATION_STYLES, KEEP_SOURCE_FORMATTING i KEEP_DIFFERENT_STYLES. ImportFormatOptions umożliwia wybranie różnych opcji importu, takich jak ignore_header_footer, ignore_text_boxes, keep_source_numbering, merge_pasted_lists i smart_style_behavior.
Aspose.Words umożliwia dostosowanie wizualizacji dokumentu wynikowego po dodaniu dwóch dokumentów podczas operacji wstawiania lub dołączania przy użyciu formatów Section i PageSetup. Właściwość page_setup zawiera wszystkie atrybuty sekcji, takie jak section_start, restart_page_numbering, page_starting_number, orientation i inne. Najczęstszym przypadkiem użycia jest ustawienie właściwości section_start w celu określenia, czy dodana treść pojawi się na tej samej stronie, czy zostanie podzielona na nową.
Poniższy przykład kodu pokazuje, jak dołączyć jeden dokument do drugiego, jednocześnie zapobiegając podziałowi treści na dwie strony:
# 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") |