• 如何将格式文本转化为图片


    一直在博客园上查找资料,却好久没有写博客了。今天需要将文本转化为图片,在网上找了很久都没有一个很好的办法,终于想到一个比较好的注意,记录下来,与大家分享。

    问题:当我们需要将文本文件在别的地方显示的时候,可能会是是一件很容易的事情,但是如果要保证格式完全一样,可能就会变成一件很艰难的事情。比如原本在word或excel里编辑好的一段文本,在网页上显示出来,要求排版,字体大小,表格。。。完全跟原来一样,就会变得很困难。

    解决方案:就是把编辑好的文本变成图片。

    但是怎样才能把文本变成图片,而原来的样式保持不变呢,文本不难,但难度在于保留样式。

    解决思路:我发现在word里复制文本,在[画图](windows附件里都有的程序)里粘贴,就变成图片了,而且满足要求。就是说[画图]程序已经有这项功能,只要调用就可以。

    这样,解决过程就变成:文本放到word里--->word里复制--->在[画图]里粘贴--->在[画图]里复制--->再从剪切板里取出图片。

    word是比较容易操控的,但[画图]程序没有现成接口,操控起来比较困难一些,需要用到windows的API函数,向[画图]程序发送消息达到操控目的。

    用C#写的代码如下,如有更好方法,请指教:

            [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
            private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
            [DllImport("user32.dll", EntryPoint = "FindWindowEx", SetLastError = true)]
            private static extern IntPtr FindWindowEx(IntPtr hwndParent, uint hwndChildAfter, string lpszClass, string lpszWindow);
            [DllImport("user32.dll", EntryPoint = "SendMessage", SetLastError = true, CharSet = CharSet.Auto)]
            private static extern int SendMessage(IntPtr hwnd, uint wMsg, int wParam, int lParam);
            [DllImport("user32.dll", EntryPoint = "SetForegroundWindow", SetLastError = true)]
            private static extern void SetForegroundWindow(IntPtr hwnd);
            [DllImport("user32.dll", EntryPoint = "GetMenu")]
            public static extern int GetMenu(int hwnd );
            [DllImport("user32.dll", EntryPoint = "GetSubMenu")]
            public static extern int GetSubMenu(int hMenu,int nPos);
            [DllImport("user32.dll", EntryPoint = "GetMenuItemID")]
            public static extern int GetMenuItemID(int hMenu,int nPos);
            [DllImport("user32.dll", EntryPoint = "PostMessage")]
            public static extern int PostMessage(int hwnd,int wMsg,int wParam,int lParam);
            private const int WM_COMMAND = 0x111;        
            private Image PasteImage()
            {
                //让仅一个画图程序在后台运行,多的杀掉,没有就打开
                //画图程序在进程中的名字是mspaint,没有后缀exe
                System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcessesByName(@"mspaint");
                if (process.Count() != 1)
                {
                    foreach (System.Diagnostics.Process p in process)
                    {
                        p.Kill();
                    }
                    ProcessStartInfo startInfo = new ProcessStartInfo();
                    startInfo.FileName = @"mspaint.exe";
                    startInfo.CreateNoWindow = false;
                    startInfo.WindowStyle = ProcessWindowStyle.Hidden;
                    System.Diagnostics.Process txt = Process.Start(startInfo);
                    //等一会,睡个觉
                    Thread.Sleep(1000);
                }
                //查找<画图>的句柄
                //新打开的<画图>窗口名为"未命名 - 画图",中间有空格
                IntPtr hwndCalc = FindWindow(null, "未命名 - 画图");
                if (hwndCalc != IntPtr.Zero)
                {
                    //获取菜单
                    int gm = GetMenu(hwndCalc.ToInt32());
                    gm = GetSubMenu(gm, 1);
                    //粘贴
                    int id = GetMenuItemID(gm, 5);
                    PostMessage(hwndCalc.ToInt32(), WM_COMMAND, id, 0);
                    //复制
                    id = GetMenuItemID(gm, 4);
                    PostMessage(hwndCalc.ToInt32(), WM_COMMAND, id, 0);
                }
                //睡个觉等一会,否则可能系统还没准备好,然后从剪切板取出
                Thread.Sleep(1000);
                IDataObject data = System.Windows.Forms.Clipboard.GetDataObject();
                return (Image)data.GetData(typeof(Bitmap));            
            }
    
  • 相关阅读:
    【leetcode】Maximum Subarray
    【USACO】
    【leetcode】Remove Duplicates from Sorted Array
    【leetcode】Path Sum II
    【leetcode】Swap Nodes in Pairs
    【leetcode】Word Ladder
    【leetcode】Copy List with Random Pointer
    【leetcode】Longest Palindromic Substring
    #ifdef #endif #if #endif
    tar [options] [list of file]
  • 原文地址:https://www.cnblogs.com/eyye/p/2467397.html
Copyright © 2020-2023  润新知