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 的事件中 。。
页: 1 [2] 3 4
查看完整版本: 关于打印纸张大小