Ekle ve Ekle Belgeleri

Bazen birkaç belgeyi tek bir belgeden birleştirmeniz gerekir. Bunu elle yapabilir ya da Aspose.Words ekle veya ilave et özelliğini kullanabilirsiniz.

Ekle işlemi, daha önce oluşturulan belgelerden yeni veya mevcut bir belgeye içeriği eklemenizi sağlar.

Sonra ekleme özelliği başka bir belgeyi yalnızca başka bir belgenin sonuna eklemenize izin verir.

Bu makale, farklı yollarla bir belgeyi başka bir belgeye nasıl ekleyeceğinizi veya ekleyebileceğinizi açıklar ve eklerken ya da eklerken uygulayabileceğiniz yaygın özellikleri tanımlar.

Bir belge ekleyin

Yukarıda belirtildiği gibi, Aspose.Words ‘de bir belge düğümlerin bir ağacı olarak temsil edilir ve bir belgenin diğerine eklenmesi ilk belgedeki düğümleri ikinci belgeye kopyalamak demektir.

Farklı konumlara çeşitli şekillerde belgeleri ekleyebilirsiniz. Örneğin bir belgeyi, bir birleştirme işlemi sırasında bir birleştirme alanı aracılığıyla veya bir yer işareti aracılığıyla ekleyebilirsiniz.

Bunun yerine belgenin bir kısmını veya tamamını almak için InsertDocument veya InsertDocumentInline yöntemini, benzer şekilde bir belgeyi Microsoft Word’ye ekleyerek geçerli fare konumuna eklemek, daha önceki herhangi bir içeri aktarma olmadan kullanılabilir.

Aşağıdaki kod örneği, InsertDocument yöntemini kullanarak bir belge nasıl ekleyileceğini göstermektedir:

// 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");

Aşağıdaki kod örneği, bir belgeyi InsertDocumentInline yöntemiyle nasıl ekleyeceğini gösterir:

// 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());

Aşağıdaki alt bölümler, bir belgenin diğerine yerleştirilebileceği seçenekleri açıklar.

Bul ve Değiştir İşlemi Sırasında Bir Belge Ekle

Bul ve değiştir işlemlerini gerçekleştirirken belgeler ekleyebilirsiniz. Örneğin, bir belge [GİRİŞ] metni ve [SONUÇ] paragrafı içerebilir. Ama nihai belgede, başka bir harici belgeden elde edilen içeriği kullanarak bu paragrafları değiştirmelisiniz. Bunu başarmak için, değiştirme olayı için bir işleyici oluşturmanız gerekir.

Aşağıdaki kod örneği, daha sonra ekleme sürecinde kullanılmak üzere değiştirme olayı için bir işleyici oluşturmayı gösterir:

// 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;
}
}

Aşağıdaki kod örneği, bir bul ve değiştir işlemi sırasında bir belgeden başka bir belgeye içeriği nasıl ekleyeceğinizi gösterir:

// 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");

Bir Dokümanı Mail Merge Operasyonu Sırasında Ekle

Bir Mail Merge işlemi sırasında bir belgeyi bir birleştirme alanına ekleyebilirsiniz. Örneğin, bir Mail Merge şablonu [Özet] gibi bir birleştirme alanı içerebilir. Fakat son belgede, başka bir harici belgeyle elde edilen içeriği bu birleştirme alanına eklemeniz gerekir. Bunu yapmak için birleştirme olayına bir işleyici oluşturmanız gerekecek.

Aşağıdaki kod örneği, ekleme sürecinde daha sonra kullanılmak üzere birleştirme olayı için bir işleyicinin nasıl oluşturulacağını göstermektedir:

// 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.
}
}

Aşağıdaki kod örneği, oluşturulan bir işleyicinin kullanılması ile bir belgeyi birleştirme alanına nasıl ekleyeceğinizi göstermektedir:

// 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");

Kitap İşareti Olarak Bir Belge Ekle

Bir belgeye metin dosyası aktarabilirsiniz ve bunu bir belgenin içinde tanımladığınız bir işaretçinin hemen sonrasında ekleyebilirsiniz. Bunu yapmak için, eklemek istediğiniz yerde bir işaretlenmiş paragraf oluşturun.

Aşağıdaki kod örneği, bir belgedeki içeriği başka bir belgeye eklemek için nasıl kullanılabileceğini göstermektedir:

// 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");

Bir Doküman Ekle

Bir kullanım durumunuz olabilir ve ekstra sayfaları bir belgeden mevcut bir belgeye dahil etmek isteyebilirsiniz. Bunu yapmak için sadece bir belgeyi diğerinin sonuna eklemek için AppendDocument yöntemini çağırmanız yeterlidir.

Aşağıdaki kod örneği, bir belgeyi başka bir belgenin sonuna eklemeyi gösterir:

// 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");

Düğümleri El ile İçe Aktar ve Ekle

Aspose.Words belgeleri otomatik olarak eklemenizi veya eklemenize izin verir herhangi bir ön dışa aktarma gereksinimi olmadan. Bununla birlikte, belirli bir belge düğümünü (örneğin bir bölüm veya paragraf) eklemeniz veya eklemeniz gerekiyorsa önce bu düğümü manuel olarak dışa aktarmanız gerekir.

Bir bölümü veya paragrafı başka birine eklemeniz gerektiğinde, bu işlem için esas olarak ilk belge düğüm ağacındaki düğümleri ikinci birine ImportNode yöntemiyle aktarmak zorundasınız. Düğümlerinizi aktardıktan sonra yeni bir düğümü referans düğümden önceki/sonraki konumlara eklemek için InsertAfter yöntemini kullanmanız gerekir. Bu, verilen konumlara başka bir belgeden düğümleri aktarıp ekleyerek ekleme işlemini özelleştirmenizi sağlar.

Ayrıca, alt düğümlerin listenin sonuna yeni belirtilen bir düğümü eklemek için AppendChild yöntemini kullanabilirsiniz, örneğin paragraf düzeyinde yerine bölüm düzeyinde içeriği eklemek istiyorsanız.

Aşağıdaki kod örneğinde, belirli bir düğümden sonra düğümler el ile nasıl içe aktarılacağını ve ekleneceğini gösterir." InsertAfter “yöntemi kullanılarak:

// 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.");
}
}

İçerik hedef belge bölümüne bölümlere bölünecek şekilde içeri aktarılır ve bu da sayfa düzeni gibi ayarlar dahil olmak üzere içeri aktarma sırasında ayarların korunması anlamına gelir. Ayrıca, iki belgeyi nasıl birleştireceğinizi belirtmek için ekleme veya ekleme yaparken biçimlendirme ayarlarını tanımlamanızın yararlı olduğunu da unutmayın.

Ekle ve Dokümanları Ekle” için ortak özellikler

Her iki InsertDocument ve AppendDocument yöntemleri ImportFormatMode ve ImportFormatOptions giriş parametrelerini kabul eder. ImportFormatMode farklı format modlarını seçerek bir belgeye başka bir belgeden içeri aktarma işleminde belge biçimlendirmesinin nasıl birleştirileceğini kontrol etmenizi sağlar; örneğin, UseDestinationStyles, KeepSourceFormatting ve KeepDifferentStyles. ImportFormatOptions farklı içeri aktarma seçenekleri seçmenize olanak tanır; örneğin, IgnoreHeaderFooter, IgnoreTextBoxes, KeepSourceNumbering, MergePastedLists ve SmartStyleBehavior.

Aspose.Words ekleme veya ekleme işlemi sırasında iki belge birleştirildiğinde bir sonuç belgesinin görünümünü ayarlamanızı sağlar. Section ve PageSetup özellikleri, PageSetup özelliğinin tüm öznitelikleri içerir; örneğin SectionStart, RestartPageNumbering, PageStartingNumber, Orientation ve diğerleri. En yaygın kullanım durumu, eklenen içeriğin aynı sayfada mı yoksa yeni bir sayfaya mı ayrılacağını belirlemek için SectionStart özelliğini ayarlamaktır.

Aşağıdaki kod örneği, iki sayfada bölünecek içeriği koruyarak bir belgeden diğerine ekleme gösteriyor:

// 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");