Voeg Dokumente in en Voeg By
Soms is dit nodig om verskeie dokumente in een te kombineer. Jy kan dit met die hand doen of jy kan Aspose.Words invoeg of voeg funksie by.
Die invoegbewerking laat jou toe om die inhoud van voorheen geskepte dokumente in’n nuwe of bestaande een in te voeg.
Op sy beurt kan die append-funksie u slegs’n dokument aan die einde van’n ander dokument byvoeg.
Hierdie artikel verduidelik hoe om’n dokument op verskillende maniere by’n ander een in te voeg of by te voeg en beskryf die algemene eienskappe wat u kan toepas terwyl u dokumente invoeg of byvoeg.
Voeg’n Dokument in
Soos hierbo genoem, word’n dokument in Aspose.Words voorgestel as’n boom van nodusse, en die operasie om een dokument in’n ander in te voeg, is om nodusse van die eerste dokumentboom na die tweede te kopieer.
U kan dokumente op verskillende plekke op verskillende maniere invoeg. U kan byvoorbeeld’n dokument invoeg deur’n vervangingsbewerking, ‘n samesmeltingsveld tydens’n samesmeltingsbewerking of via’n boekmerk.
Jy kan ook die InsertDocument of die InsertDocumentInline metode gebruik, wat soortgelyk is aan die invoeging van’n dokument in Microsoft Word, om’n hele dokument by die huidige wyserposisie in te voeg sonder enige vorige invoer.
Die volgende kode voorbeeld toon hoe om’n dokument in te voeg met behulp van die InsertDocument metode:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git. | |
Document srcDoc = new Document(getMyDir() + "Document source.docx"); | |
Document dstDoc = new Document(getMyDir() + "Northwind traders.docx"); | |
DocumentBuilder builder = new DocumentBuilder(dstDoc); | |
builder.moveToDocumentEnd(); | |
builder.insertBreak(BreakType.PAGE_BREAK); | |
builder.insertDocument(srcDoc, ImportFormatMode.KEEP_SOURCE_FORMATTING); | |
builder.getDocument().save(getArtifactsDir() + "JoinAndAppendDocuments.insertDocument.docx"); |
Die volgende kode voorbeeld toon hoe om’n dokument in te voeg met behulp van die InsertDocumentInline metode:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git. | |
DocumentBuilder srcDoc = new DocumentBuilder(); | |
srcDoc.write("[src content]"); | |
// Create destination document. | |
DocumentBuilder dstDoc = new DocumentBuilder(); | |
dstDoc.write("Before "); | |
dstDoc.insertNode(new BookmarkStart(dstDoc.getDocument(), "src_place")); | |
dstDoc.insertNode(new BookmarkEnd(dstDoc.getDocument(), "src_place")); | |
dstDoc.write(" after"); | |
Assert.assertEquals("Before after", dstDoc.getDocument().getText().trim()); | |
// Insert source document into destination inline. | |
dstDoc.moveToBookmark("src_place"); | |
dstDoc.insertDocumentInline(srcDoc.getDocument(), ImportFormatMode.USE_DESTINATION_STYLES, new ImportFormatOptions()); | |
Assert.assertEquals("Before [src content] after", dstDoc.getDocument().getText().trim()); |
Die volgende onderafdelings beskryf die opsies waartydens jy een dokument in’n ander kan invoeg.
Voeg’n Dokument in Tydens Soek En Vervang Operasie
U kan dokumente invoeg terwyl u bewerkings vind en vervang. Byvoorbeeld, ‘n dokument kan paragrawe bevat met die teks [INTRODUCTION] en [CONCLUSION]. Maar in die finale dokument moet jy daardie paragrawe vervang met die inhoud wat van’n ander eksterne dokument verkry is. Om dit te bereik, sal jy’n hanteerder vir die vervangingsgeleentheid moet skep.
Die volgende kode voorbeeld toon hoe om’n hanteerder vir die vervanging gebeurtenis te skep om dit later in die invoeging proses te gebruik:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git. | |
private static class InsertDocumentAtReplaceHandler implements IReplacingCallback | |
{ | |
public /*ReplaceAction*/int /*IReplacingCallback.*/replacing(ReplacingArgs args) throws Exception | |
{ | |
Document subDoc = new Document(getMyDir() + "Document insertion 2.docx"); | |
// Insert a document after the paragraph, containing the match text. | |
Paragraph para = (Paragraph)args.getMatchNode().getParentNode(); | |
insertDocument(para, subDoc); | |
// Remove the paragraph with the match text. | |
para.remove(); | |
return ReplaceAction.SKIP; | |
} | |
} |
Die volgende kode voorbeeld toon hoe voeg inhoud van een dokument in’n ander tydens’n vind en vervang operasie:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git. | |
Document mainDoc = new Document(getMyDir() + "Document insertion 1.docx"); | |
// Set find and replace options. | |
FindReplaceOptions options = new FindReplaceOptions(); | |
{ | |
options.setDirection(FindReplaceDirection.BACKWARD); | |
options.setReplacingCallback(new InsertDocumentAtReplaceHandler()); | |
} | |
// Call the replace method. | |
mainDoc.getRange().replace(Pattern.compile("\\[MY_DOCUMENT\\]"), "", options); | |
mainDoc.save(getArtifactsDir() + "CloneAndCombineDocuments.InsertDocumentAtReplace.docx"); |
Voeg’n Dokument in Tydens Mail Merge Operasie
U kan’n dokument in’n samesmeltingsveld plaas tydens’n Mail Merge - bewerking. Byvoorbeeld, ‘n Mail Merge sjabloon kan’n samesmelting veld soos [Opsomming] bevat. Maar in die finale dokument moet jy inhoud wat van’n ander eksterne dokument verkry is, in hierdie samesmeltingsveld invoeg. Om dit te bereik, sal jy’n hanteerder vir die samesmeltingsgeleentheid moet skep.
Die volgende kode voorbeeld toon hoe om’n hanteerder vir die samesmelting gebeurtenis te skep om dit later in die invoeging proses te gebruik:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git. | |
private static class InsertDocumentAtMailMergeHandler implements IFieldMergingCallback | |
{ | |
// This handler makes special processing for the "Document_1" field. | |
// The field value contains the path to load the document. | |
// We load the document and insert it into the current merge field. | |
public void /*IFieldMergingCallback.*/fieldMerging(FieldMergingArgs args) throws Exception | |
{ | |
if ("Document_1".equals(args.getDocumentFieldName())) | |
{ | |
// Use document builder to navigate to the merge field with the specified name. | |
DocumentBuilder builder = new DocumentBuilder(args.getDocument()); | |
builder.moveToMergeField(args.getDocumentFieldName()); | |
// The name of the document to load and insert is stored in the field value. | |
Document subDoc = new Document((String)args.getFieldValue()); | |
insertDocument(builder.getCurrentParagraph(), subDoc); | |
// The paragraph that contained the merge field might be empty now, and you probably want to delete it. | |
if (!builder.getCurrentParagraph().hasChildNodes()) | |
builder.getCurrentParagraph().remove(); | |
// Indicate to the mail merge engine that we have inserted what we wanted. | |
args.setText(null); | |
} | |
} | |
public void /*IFieldMergingCallback.*/imageFieldMerging(ImageFieldMergingArgs args) | |
{ | |
// Do nothing. | |
} | |
} |
Die volgende kode voorbeeld toon hoe om’n dokument in die merge veld te voeg met behulp van die geskep handelaar:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git. | |
Document mainDoc = new Document(getMyDir() + "Document insertion 1.docx"); | |
mainDoc.getMailMerge().setFieldMergingCallback(new InsertDocumentAtMailMergeHandler()); | |
// The main document has a merge field in it called "Document_1". | |
// The corresponding data for this field contains a fully qualified path to the document. | |
// That should be inserted to this field. | |
mainDoc.getMailMerge().execute(new String[] { "Document_1" }, new Object[] { getMyDir() + "Document insertion 2.docx" }); | |
mainDoc.save(getArtifactsDir() + "CloneAndCombineDocuments.InsertDocumentAtMailMerge.doc"); |
Voeg’n Dokument By Boekmerk in
U kan’n tekslêer in’n dokument invoer en dit direk na’n boekmerk wat u in die dokument gedefinieer het, invoeg. Om dit te doen, skep’n boekmerk paragraaf waar jy wil hê die dokument moet ingevoeg word.
Die volgende kodering voorbeeld toon hoe om die inhoud van een dokument in’n boekmerk in’n ander dokument in te voeg:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git. | |
Document mainDoc = new Document(getMyDir() + "Document insertion 1.docx"); | |
Document subDoc = new Document(getMyDir() + "Document insertion 2.docx"); | |
Bookmark bookmark = mainDoc.getRange().getBookmarks().get("insertionPlace"); | |
insertDocument(bookmark.getBookmarkStart().getParentNode(), subDoc); | |
mainDoc.save(getArtifactsDir() + "CloneAndCombineDocuments.InsertDocumentAtBookmark.docx"); |
Voeg’n Dokument by
U het moontlik’n gebruiksgeval waar u addisionele bladsye van’n dokument tot aan die einde van’n bestaande dokument moet insluit. Om dit te doen, moet jy net die AppendDocument metode noem om’n dokument aan die einde van’n ander een by te voeg.
Die volgende kode voorbeeld toon hoe om’n dokument aan die einde van’n ander dokument te voeg:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git. | |
Document dstDoc = new Document(); | |
dstDoc.getFirstSection().getBody().appendParagraph("Destination document text. "); | |
Document srcDoc = new Document(); | |
srcDoc.getFirstSection().getBody().appendParagraph("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. | |
dstDoc.appendDocument(srcDoc, ImportFormatMode.KEEP_SOURCE_FORMATTING); | |
dstDoc.save(getArtifactsDir() + "JoinAndAppendDocuments.KeepSourceFormatting.docx"); |
Invoer En Voeg Nodes Handmatig
Aspose.Words laat jou toe om dokumente outomaties in te voeg en by te voeg sonder enige vorige invoervereistes. As jy egter’n spesifieke nodus van jou dokument, soos’n afdeling of’n paragraaf, moet invoeg of byvoeg, moet jy eers hierdie nodus handmatig invoer.
Wanneer jy een afdeling of paragraaf by’n ander moet voeg of byvoeg, moet jy in wese die nodusse van die eerste dokumentknoopboom in die tweede een invoer deur die ImportNode metode te gebruik. Na die invoer van jou nodes, moet jy die InsertAfter metode gebruik om’n nuwe node na/voor die verwysing node in te voeg. Dit laat jou toe om die invoeging proses aan te pas deur die invoer van nodes van’n dokument en die invoeging van dit by gegewe posisies.
U kan ook die AppendChild - metode gebruik om’n nuwe gespesifiseerde nodus aan die einde van die lys van kindknope by te voeg, byvoorbeeld as u inhoud op die paragraafvlak wil byvoeg in plaas van op die afdelingvlak.
Die volgende kode voorbeeld toon hoe om handmatig invoer nodes en voeg hulle na’n spesifieke node met behulp van die InsertAfter metode:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git. | |
/// <summary> | |
/// Inserts content of the external document after the specified node. | |
/// Section breaks and section formatting of the inserted document are ignored. | |
/// </summary> | |
/// <param name="insertionDestination">Node in the destination document after which the content | |
/// Should be inserted. This node should be a block level node (paragraph or table).</param> | |
/// <param name="docToInsert">The document to insert.</param> | |
private static void insertDocument(Node insertionDestination, Document docToInsert) | |
{ | |
if (insertionDestination.getNodeType() == NodeType.PARAGRAPH || insertionDestination.getNodeType() == NodeType.TABLE) | |
{ | |
CompositeNode destinationParent = insertionDestination.getParentNode(); | |
NodeImporter importer = | |
new NodeImporter(docToInsert, insertionDestination.getDocument(), 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 (Section srcSection : docToInsert.getSections()) | |
for (Node srcNode : srcSection.getBody()) | |
{ | |
if (srcNode.getNodeType() == NodeType.PARAGRAPH) | |
{ | |
Paragraph para = (Paragraph)srcNode; | |
if (para.isEndOfSection() && !para.hasChildNodes()) | |
continue; | |
} | |
Node newNode = importer.importNode(srcNode, true); | |
destinationParent.insertAfter(newNode, insertionDestination); | |
insertionDestination = newNode; | |
} | |
} | |
else | |
{ | |
throw new IllegalArgumentException("The destination node should be either a paragraph or table."); | |
} | |
} |
Inhoud word in die bestemming dokument afdeling vir afdeling ingevoer, wat beteken dat instellings, soos bladsy opstel en koptekste of voetskrifte, tydens invoer bewaar word. Dit is ook nuttig om daarop te let dat jy formatering instellings kan definieer wanneer jy’n dokument invoeg of byvoeg om te spesifiseer hoe twee dokumente saamgevoeg word.
Algemene Eienskappe vir Voeg Dokumente in en Voeg By
Beide InsertDocument en AppendDocument metodes aanvaar ImportFormatMode en ImportFormatOptions as insette parameters. Die ImportFormatMode laat jou toe om te beheer hoe dokument formatering saamgesmelt word wanneer jy inhoud van een dokument in’n ander invoer deur verskillende formaatmodusse soos UseDestinationStyles, KeepSourceFormatting en KeepDifferentStyles te kies. Met die ImportFormatOptions kan u verskillende invoeropsies kies, soos IgnoreHeaderFooter, IgnoreTextBoxes, KeepSourceNumbering, MergePastedLists, en SmartStyleBehavior.
Aspose.Words laat jou toe om die visualisering van’n gevolglike dokument aan te pas wanneer twee dokumente saamgevoeg word in’n insetsel of byvoeging deur die Section en PageSetup eienskappe te gebruik. Die PageSetup eienskap bevat al die eienskappe van’n afdeling soos SectionStart, RestartPageNumbering, PageStartingNumber, Orientation, en ander. Die mees algemene gebruik geval is om die SectionStart eienskap te stel om te definieer of die bygevoeg inhoud sal verskyn op dieselfde bladsy of verdeel in’n nuwe een.
Die volgende kode voorbeeld toon hoe om een dokument by’n ander te voeg terwyl die inhoud van die verdeling oor twee bladsye:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git. | |
Document srcDoc = new Document(getMyDir() + "Document source.docx"); | |
Document dstDoc = new Document(getMyDir() + "Northwind traders.docx"); | |
// Set the source document to continue straight after the end of the destination document. | |
srcDoc.getFirstSection().getPageSetup().setSectionStart(SectionStart.CONTINUOUS); | |
// Restart the page numbering on the start of the source document. | |
srcDoc.getFirstSection().getPageSetup().setRestartPageNumbering(true); | |
srcDoc.getFirstSection().getPageSetup().setPageStartingNumber(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. | |
srcDoc.getFirstSection().getPageSetup().setPageWidth(dstDoc.getLastSection().getPageSetup().getPageWidth()); | |
srcDoc.getFirstSection().getPageSetup().setPageHeight(dstDoc.getLastSection().getPageSetup().getPageHeight()); | |
srcDoc.getFirstSection().getPageSetup().setOrientation(dstDoc.getLastSection().getPageSetup().getOrientation()); | |
// Iterate through all sections in the source document. | |
for (Paragraph para : (Iterable<Paragraph>) srcDoc.getChildNodes(NodeType.PARAGRAPH, true)) | |
{ | |
para.getParagraphFormat().setKeepWithNext(true); | |
} | |
dstDoc.appendDocument(srcDoc, ImportFormatMode.KEEP_SOURCE_FORMATTING); | |
dstDoc.save(getArtifactsDir() + "JoinAndAppendDocuments.DifferentPageSetup.docx"); |