450289068
发表于 2013-11-21 11:20:00
我目前的测试模版中
1.普通的文本信息 比如姓名等基础信息 运用你的demo没有问题。
2.Rtf格式的数据流 ,其中包含文本和字体格式的信息 。
3.某个MergeField的文本通过流程设置其显示颜色。
4.某个Textframe中插入的是图片,数据库是二进制流,在转换为数据集时可以为存储路径。
这些通过MailMerge的对象都可以直接处理吗?
ZenosZeng
发表于 2013-11-21 21:36:00
450289068
以上功能调试中,明天给你回复详细信息。
450289068
发表于 2013-11-22 11:37:00
继续等待中……
ZenosZeng
发表于 2013-11-22 15:53:00
这里有两个示例,分别是图片合并和RTF合并,你先参考:
1、图片合并
2、RTF文件合并
450289068
发表于 2013-11-25 11:23:00
谢谢版主 我仔细研究了下你给的demo应该看看api可以做到我想要的 谢谢 版主
:mj72:
450289068
发表于 2013-11-25 13:56:00
我看到的demo 不是15版本的winform 就是16版本的。能不能帮忙给发出个19版本的。
还有 具体的需求就是
代码中实现一个DataTable。
动态的load一个模版。
将模版中的MergeFiled 替换为数据显示。
将模版中MergeFiled 位置替换为DataTable指定路径的图片。
将Rtf格式的数据 替换到MergeFiled的邮件合并标签。
ZenosZeng
发表于 2013-11-25 19:45:00
450289068
你下载14楼中的两个例子之后,将TX相关的Dll的【特定版本】属性设置为false,并可以自动使用你安装TX X9版本dll,然后可以进行调试。
现在不知你是在调试这两个程序中遇到了什么问题,还是这两个程序不能满足你的需求。
450289068
发表于 2013-11-26 10:06:00
有点不能满足!
我的理想是一个按钮 ,然后通过代码 将模版载入 ,并将mergefield 所在位置
1.填入文本数据。
2.插入图片,x10 已经有占位符的情况下,将图片载入模版。
3.替换为带有格式的rtf 。
全是自动后台处理,没有任何交互 ,之后 生成pdf或者直接连打印机打印。
mergefield匹配过程可能还添加业务逻辑来处理流程。
ZenosZeng
发表于 2013-11-26 18:30:00
我重新修改了Demo,添加了Image后台合并功能,请参考:
将NWind_CHS.mdb拷贝到工程的Data目录中
int index;
System.Data.DataTable dt;
private void button1_Click(object sender, RoutedEventArgs e)
{
TXTextControl.ServerTextControl tx = new TXTextControl.ServerTextControl();
TXTextControl.DocumentServer.MailMerge mailMerge = new TXTextControl.DocumentServer.MailMerge();
mailMerge.TextComponent = tx;
mailMerge.SearchPath = "";
string connectionstring = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}Data\NWind_CHS.mdb;Persist Security Info=False", AppDomain.CurrentDomain.BaseDirectory);
string commandstring_products = "SELECT TOP 5 * FROM 产品";
dt = new DataTable();
using (OleDbConnection connection = new OleDbConnection(connectionstring))
{
OleDbDataAdapter adapter = new OleDbDataAdapter();
OleDbCommand command = new OleDbCommand(commandstring_products, connection);
adapter.SelectCommand = command;
adapter.Fill(dt);
}
dt.Columns.Add("image:图片");
mailMerge.LoadTemplate(AppDomain.CurrentDomain.BaseDirectory + "\\image_template.docx", FileFormat.WordprocessingML);
mailMerge.ImageFieldMerged += new TXTextControl.DocumentServer.MailMerge.ImageFieldMergedHandler(mailMerge_ImageFieldMerged);
mailMerge.Merge(dt, true);
mailMerge.Print("邮件合并", "Snagit 11", 1, true);
}
void mailMerge_ImageFieldMerged(object sender, MailMerge.ImageFieldMergedEventArgs e)
{
byte[] ib = dt.Rows["图片"] as byte[];
System.IO.MemoryStream ms = new System.IO.MemoryStream(ib);
e.Image = new TXTextControl.Image(System.Drawing.Image.FromStream(ms));
}
450289068
发表于 2013-11-29 10:17:00
我想问下 你合并图片的原理是什么 我看你在数据库 存在一个图片的列 然后 在增加新的列 image:图片列名之后 代码就会自己去填充
但是我也用的mergeField绑定方法 走到mailMerge_FieldMerged 而 不是用到mailMerge_ImageFieldMerged 的事件中 。。