lch922 发表于 2013-4-26 16:43:00

关于单行文本的问题

您好,我目前正在评估TX TextControl ,目前有一个需求没有找到一个合适的解决方案。
我的需求是:将编辑器内的内容生成到一张图片,并且,这张图片只有一行文字。
请问TX TextControl能显示这个功能吗?
生成图片的效果如附件所示。

lch922 发表于 2013-4-26 16:45:00

还有,我设置了一个页面大小之后,能不能获取当前光标所在是第几页呢?

iceman 发表于 2013-4-26 18:17:00

回复 1楼lch922的帖子

问题一,
请使用以下代码进行测试:

private void Form1_Load(object sender, EventArgs e)
      {
            this.textControl1.Text = "dsafdsafffdsdsfdstextControl1fdf";
      }

      private void changePagesizeToolStripMenuItem_Click(object sender, EventArgs e)
      {
            //TXTextControl.TextControl tx2 = new TXTextControl.TextControl();
            this.textControl1.ViewMode = TXTextControl.ViewMode.PageView;
            this.textControl1.PageMargins = new TXTextControl.PageMargins(0, 0, 0, 0);
            this.textControl1.PageSize = new TXTextControl.PageSize(5000, 20);

            this.textControl1.Text = this.textControl1.Text;


      }

      private void saveImageToolStripMenuItem_Click(object sender, EventArgs e)
      {
            foreach (TXTextControl.Page item in this.textControl1.GetPages())
            {
                Bitmap bm1 = item.GetImage(100, TXTextControl.Page.PageContent.All);
                Bitmap bm2 = new Bitmap(bm1.Width, bm1.Height);
                Graphics g = Graphics.FromImage(bm2);
                g.DrawImageUnscaled(bm1, 0, 0);
               
               
                bm2.Save("1.png", System.Drawing.Imaging.ImageFormat.Png);
                g.Dispose();
                bm2.Dispose();

            }
      }

iceman 发表于 2013-4-26 18:18:00

回复 2楼lch922的帖子

问题二通过以下方式获取:

this.textControl1.InputPosition.Page

lch922 发表于 2013-4-26 18:57:00

回复 3楼iceman的帖子

效率好高!谢谢!
另外:
第11行的this.textControl1.PageSize = new TXTextControl.PageSize(5000, 20);
请问5000与20这两个参数是怎样得来的呢?

编辑器内的字体大小有可能不是一样大的,也就是说,有些字的大小可能是10,而有些字体大小可能是100.我通过什么方式获取最高文字高度呢(用于确定页面的高度)?

还有我想要的效果是将编辑器内的所有内容都保存到一张图片中,而不是分开来保存。

lch922 发表于 2013-4-26 19:00:00

这是我生成图片的图片的代码,麻烦帮忙看一下这有没有什么问题?我测试的时候发现输入了内容之后生成图片最后面有些内容没有显示,但是图片的宽度应该是没问题的。      private void ExportImage_Click(object sender, EventArgs e)
      {
          bak_txt_box_.Clear();
          Size page_size = new Size(0, 0);
            byte[] bytes;
            _textControl.Save(out bytes, TXTextControl.BinaryStreamType.InternalFormat);
            bak_txt_box_.Load(bytes, TXTextControl.BinaryStreamType.InternalFormat);
            foreach (TXTextControl.TextChar item in this.bak_txt_box_.TextChars) {
                page_size.Width += item.Bounds.Width;
                page_size.Height = Math.Max(item.Bounds.Height, page_size.Height);

            }
            bak_txt_box_.PageMargins = new TXTextControl.PageMargins(0.0, 0.0, 0.0, 0.0);
            bak_txt_box_.PageUnit = TXTextControl.MeasuringUnit.Twips;
            bak_txt_box_.PageSize = new TXTextControl.PageSize(page_size.Width,
                page_size.Height * 2);
            foreach (TXTextControl.Page page in bak_txt_box_.GetPages()) {
                page.GetImage(100, TXTextControl.Page.PageContent.MainText).Save("D:/pix/" + page.Number + ".png");
            }
      }
private TXTextControl.TextControl bak_txt_box_ = new TXTextControl.TextControl();
         bak_txt_box_.ViewMode = TXTextControl.ViewMode.PageView;
         bak_txt_box_.CreateControl();
         bak_txt_box_.PageMargins = new TXTextControl.PageMargins(0.0, 0.0, 0.0, 0.0);
         bak_txt_box_.PageUnit = TXTextControl.MeasuringUnit.Twips;

lch922 发表于 2013-4-26 19:02:00

bak_txt_box_.PageSize = new TXTextControl.PageSize(page_size.Width,
                page_size.Height * 2);

如果高度不乘以2的话,会提示抛异常:The top/bottom margins overlap the height of the page.

lch922 发表于 2013-4-26 19:23:00

目前测试还发现:
1、删除文档内某些内容或者改变字体大小的时候,会出现文字叠到一起的情况。
2、某些RTF文档打开不了,异常如下:************** 异常文本 **************
System.Exception: Text filter error: Unknown format.
(01-1D01)
   在 TXTextControl.TextControlCore.?()
   在 TXTextControl.TextControlCore.?(? , Int32 , Int32 , Int32 )
   在 TXTextControl.TextControl.get_CanCopy()
   在 TX_Text_Control_Words.frmMain.get_CanCopy() 位置 E:\C#\Text\TX Text Control Words\frmMain.cs:行号 69
   在 TX_Text_Control_Words.frmMain.EnableToolbarButtons() 位置 E:\C#\Text\TX Text Control Words\frmMain.cs:行号 1558
   在 TX_Text_Control_Words.frmMain.textControl_InputPositionChanged(Object sender, EventArgs e) 位置 E:\C#\Text\TX Text Control Words\frmMain.cs:行号 184
   在 TXTextControl.TextControl.OnInputPositionChanged(EventArgs e)
   在 TXTextControl.TextControl.?(Message& )
   在 TXTextControl.TextControl.WndProc(Message& message)
   在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


3、打开某些word文档之后,CTRL+A全选后按Del,删除不了内容。


我的测试demo是TX Text Control Words

lch922 发表于 2013-4-26 19:46:00

文字重叠。

iceman 发表于 2013-4-27 15:43:00

回复 5楼lch922的帖子

你好,
字体最大高度,也就是图片高度。可以通过逐个文字检测实现,fontsize 单位为 twips。

TXTextControl.TextCharCollection tc = this.textControl1.TextChars;
            foreach (TXTextControl.TextChar item in this.textControl1.TextChars)
            {
                int fontSize = item.Bounds.Height;
            }

图片宽度,可以根据行数和页面宽度获取,PageMargins 单位为 1inch,PageSize 单位为 1inch。

int width = (int)(Convert.ToDouble(this.textControl1.PageSize.Width) - this.textControl1.PageMargins.Left - this.textControl1.PageMargins.Right) * this.textControl1.Lines.Count;


以上为大体实现思路,具体代码还需要您实现。
页: [1] 2
查看完整版本: 关于单行文本的问题