Sokmak Checkboxes, Metin Girişi veya Resimler

Birleştirme motoru bir belgeyi girdi olarak alır, arar MERGEFIELD içindeki alanları ve bunları veri kaynağından elde edilen verilerle değiştirir. Genellikle düz metin ve HTML eklenir, ancak Aspose.Words kullanıcılar ayrıca aşağıdakiler için daha sıra dışı senaryoları işleyen bir belge oluşturabilir Mail Merge alanlar.

Güçlü Aspose.Words işlevsellik genişletmenizi sağlar Mail Merge süreç:

  • belgeye onay kutuları ve metin giriş formu alanları ekleme mail merge
  • herhangi bir özel depolama alanından (dosyalar) resim ekleme, BLOB alanlar vb.)

Sokmak Checkboxsırasında es ve Metin Girişi Mail Merge

Bazen bir işlem yapmak gerekir Mail Merge birleştirme alanında metnin yerine geçmeyecek şekilde değil, bir onay kutusu veya metin giriş alanı olacak şekilde işlem yapın. Bu en yaygın senaryo olmasa da, bazı görevler için çok kullanışlıdır.

Word belgesinin aşağıdaki ekran görüntüsünde birleştirme alanlarına sahip bir şablon gösterilmektedir:

insert-checkboxes-or-images-mail-merge-aspose-words

Aşağıdaki Word belgesinin bu ekran görüntüsü, önceden oluşturulmuş belgeyi gösterir:

insert-checkboxes-html-or-images-mail-merge-aspose-words

Aşağıdaki kod örneği, bir belgeye onay kutularının nasıl ekleneceğini ve metin alanlarının nasıl girileceğini gösterir. mail merge:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>(MyDir + u"Mail merge destinations - Fax.docx");
// Setup mail merge event handler to do the custom work.
doc->get_MailMerge()->set_FieldMergingCallback(MakeObject<WorkingWithFields_::HandleMergeField>());
// Trim trailing and leading whitespaces mail merge values.
doc->get_MailMerge()->set_TrimWhitespaces(false);
ArrayPtr<String> fieldNames =
MakeArray<String>({u"RecipientName", u"SenderName", u"FaxNumber", u"PhoneNumber", u"Subject", u"Body", u"Urgent", u"ForReview", u"PleaseComment"});
ArrayPtr<SharedPtr<System::Object>> fieldValues = MakeArray<SharedPtr<System::Object>>(
{System::ObjectExt::Box<String>(u"Josh"), System::ObjectExt::Box<String>(u"Jenny"), System::ObjectExt::Box<String>(u"123456789"),
System::ObjectExt::Box<String>(u""), System::ObjectExt::Box<String>(u"Hello"), System::ObjectExt::Box<String>(u"<b>HTML Body Test message 1</b>"),
System::ObjectExt::Box<bool>(true), System::ObjectExt::Box<bool>(false), System::ObjectExt::Box<bool>(true)});
doc->get_MailMerge()->Execute(fieldNames, fieldValues);
doc->Save(ArtifactsDir + u"WorkingWithFields.MailMergeFormFields.docx");
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
class HandleMergeField : public IFieldMergingCallback
{
private:
SharedPtr<DocumentBuilder> mBuilder;
/// <summary>
/// This handler is called for every mail merge field found in the document,
/// for every record found in the data source.
/// </summary>
void FieldMerging(SharedPtr<FieldMergingArgs> e) override
{
if (mBuilder == nullptr)
{
mBuilder = MakeObject<DocumentBuilder>(e->get_Document());
}
// We decided that we want all boolean values to be output as check box form fields.
if (System::ObjectExt::Is<bool>(e->get_FieldValue()))
{
// Move the "cursor" to the current merge field.
mBuilder->MoveToMergeField(e->get_FieldName());
String checkBoxName = String::Format(u"{0}{1}", e->get_FieldName(), e->get_RecordIndex());
mBuilder->InsertCheckBox(checkBoxName, System::ObjectExt::Unbox<bool>(e->get_FieldValue()), 0);
return;
}
if (e->get_FieldName() == u"Body")
{
mBuilder->MoveToMergeField(e->get_FieldName());
mBuilder->InsertHtml(System::ObjectExt::Unbox<String>(e->get_FieldValue()));
}
else if (e->get_FieldName() == u"Subject")
{
mBuilder->MoveToMergeField(e->get_FieldName());
String textInputName = String::Format(u"{0}{1}", e->get_FieldName(), e->get_RecordIndex());
mBuilder->InsertTextInput(textInputName, TextFormFieldType::Regular, u"", System::ObjectExt::Unbox<String>(e->get_FieldValue()), 0);
}
}
void ImageFieldMerging(SharedPtr<ImageFieldMergingArgs> args) override
{
args->set_ImageFileName(u"Image.png");
args->get_ImageWidth()->set_Value(200);
args->set_ImageHeight(MakeObject<MergeFieldImageDimension>(200, MergeFieldImageDimensionUnit::Percent));
}
};

Sırasında Resim ekleme Mail Merge

Bir performans gösterirken Mail Merge işlem, özel görüntü kullanarak veritabanından görüntüleri belgeye ekleyebilirsiniz Mail Merge alanlar. Görüntü Mail Merge alan, Resim adlı bir birleştirme alanıdır:MyFieldName.

Veritabanından Resim Ekleme

Bir sırasında mail merge, bir görüntü olduğunda Mail Merge bir belgede alanla karşılaşıldığında, FieldMergingCallback olay kovuldu. Bir dosya adı, akış veya görüntü nesnesi döndürmek için bu olaya yanıt verebilirsiniz. Mail Merge motor, böylece belgeye eklenebilir.

Aşağıdaki kod örneği, bir veritabanında depolanan görüntülerin nasıl ekleneceğini gösterir BLOB rapora alan ekleme:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
// MERGEFIELDs with "Image:" tags will receive an image during a mail merge.
// The string after the colon in the "Image:" tag corresponds to a column name
// in the data source whose cells contain URIs of image files.
builder->InsertField(u"MERGEFIELD Image:logo_FromWeb ");
builder->InsertField(u"MERGEFIELD Image:logo_FromFileSystem ");
// Create a data source that contains URIs of images that we will merge.
// A URI can be a web URL that points to an image, or a local file system filename of an image file.
ArrayPtr<String> columns = MakeArray<String>({u"logo_FromWeb", u"logo_FromFileSystem"});
ArrayPtr<SharedPtr<System::Object>> URIs =
MakeArray<SharedPtr<System::Object>>({System::ObjectExt::Box<String>(ImageUrl), System::ObjectExt::Box<String>(ImageDir + u"Logo.jpg")});
// Execute a mail merge on a data source with one row.
doc->get_MailMerge()->Execute(columns, URIs);
doc->Save(ArtifactsDir + u"MailMergeEvent.ImageFromUrl.docx");

Sırasında Görüntü Özelliklerini Ayarlama Mail Merge

Bir görüntü birleştirme alanını birleştirirken, bazen aşağıdakiler gibi çeşitli görüntü özelliklerini kontrol etmeniz gerekebilir WrapType.

Şu anda, kullanarak ImageFieldMergingArgs sırasıyla yalnızca görüntü genişliği veya yükseklik özelliklerini ayarlayabilirsiniz. Bu sorunun üstesinden gelmek için, Aspose.Words sağlar Shape eklenen görüntü veya başka herhangi bir şekil üzerinde tam kontrol sahibi olmayı kolaylaştıran özellik.

Aşağıdaki kod örneği, çeşitli görüntü özelliklerinin nasıl ayarlanacağını gösterir:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
builder->Writeln(u"{{#foreach example}}");
builder->Writeln(u"{{Image(126pt;126pt):stempel}}");
builder->Writeln(u"{{/foreach example}}");
doc->get_MailMerge()->set_UseNonMergeFields(true);
doc->get_MailMerge()->set_TrimWhitespaces(true);
doc->get_MailMerge()->set_UseWholeParagraphAsRegion(false);
doc->get_MailMerge()->set_CleanupOptions(MailMergeCleanupOptions::RemoveEmptyTableRows | MailMergeCleanupOptions::RemoveContainingFields |
MailMergeCleanupOptions::RemoveUnusedRegions | MailMergeCleanupOptions::RemoveUnusedFields);
doc->get_MailMerge()->set_FieldMergingCallback(MakeObject<WorkingWithFields_::ImageFieldMergingHandler>());
doc->get_MailMerge()->ExecuteWithRegions(MakeObject<WorkingWithFields_::DataSourceRoot>());
doc->Save(ArtifactsDir + u"WorkingWithFields.MailMergeImageField.docx");
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
class ImageFieldMergingHandler : public IFieldMergingCallback
{
private:
void FieldMerging(SharedPtr<FieldMergingArgs> args) override
{
ASPOSE_UNUSED(args);
// Implementation is not required.
}
void ImageFieldMerging(SharedPtr<ImageFieldMergingArgs> args) override
{
auto shape = MakeObject<Shape>(args->get_Document(), ShapeType::Image);
shape->set_Width(126);
shape->set_Height(126);
shape->set_WrapType(WrapType::Square);
shape->get_ImageData()->SetImage(MyDir + u"Mail merge image.png");
args->set_Shape(shape);
}
};
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
class DataSourceRoot : public IMailMergeDataSourceRoot
{
private:
class DataSource : public IMailMergeDataSource
{
public:
bool MoveNext() override
{
bool result = next;
next = false;
return result;
}
SharedPtr<IMailMergeDataSource> GetChildDataSource(String s) override
{
ASPOSE_UNUSED(s);
return nullptr;
}
bool GetValue(String fieldName, SharedPtr<System::Object>& fieldValue) override
{
ASPOSE_UNUSED(fieldName);
fieldValue.reset();
return false;
}
DataSource() : next(true)
{
}
private:
bool next;
String get_TableName() override
{
return TableName();
}
String TableName()
{
return u"example";
}
};
public:
SharedPtr<IMailMergeDataSource> GetDataSource(String s) override
{
ASPOSE_UNUSED(s);
return MakeObject<WorkingWithFields_::DataSourceRoot::DataSource>();
}
};