Category Archives: C#

实现HTML的简单压缩

PageReleaser需要一种HTML的压缩算法,Google了很久,发现如果只是简单去除空白和注释的话,使用XLinq就可以轻易的实现 先看看MSDN是怎么说的: 一种常用方案是读取缩进的 XML,在内存中创建一个没有任何空白文本节点(即不保留空白)的 XML 树,对该 XML 执行某些操作,然后保存带缩进的 XML。在序列化带格式的 XML 时,只保留 XML 树中有意义的空白。这是 LINQ to XML 的默认行为。 另一个常见的情况是读取和修改已经有意缩进的 XML。您可能不想以任何方式更改这种缩进。若要在 LINQ to XML 中执行此操作,您要在加载或解析 XML 时保留空白,并在序列化 XML 时禁用格式设置。 简单的说,XDocument载入时,默认使用LoadOptions::None,自动去掉XML的空白;保存时,默认使用SaveOptions::None,自动格式化XML。 也就是说,使用XDocument将一个HTML文档打开什么也不作就保存,其实等于实现了HTML的格式化。 而如果在保存时,使用SaveOptions::DisableFormatting参数,看似要保存XML的空白,由于载入时所有空白都被删掉了,其实等于删除了所有空白,于是去掉空白就这样实现了。 至于删掉注释也很简单,只是需要注意,一般页面嵌入JavaScript会使用注释节点包裹,需要例外处理。 整个HTML压缩代码如下: var nodes = from s in doc.DescendantNodes() where … Continue reading

Posted in C#, PageReleaser, XML | Tagged , , | Leave a comment

RichTextBox实现图文并茂

怎么在RichTextBox中插入图片,网上广为流传的方法是,通过剪贴板粘贴的方法,代码如下: openFileDialog1.Filter = "图片文件|*.jpg|*.bmp|*.png|所有文件|*.*"; if (openFileDialog1.ShowDialog() == DialogResult.OK)      {          Clipboard.SetDataObject(Image.FromFile(openFileDialog1.FileName), false);          this.RichTextBox.Paste();       } 不过,用剪切粘贴实现图片插入显然是偷巧之作,显得别扭还不够灵活。 其实RichTextBox本身处理的是RTF,只要能按照RTF格式的要求对图片文字进行处理,就可以简单的实现图文并茂。何况已经有处理的很好的控件,比如ExRichTextBox ExRichTextBox实现文本图片的插入,但没有提供链接的支持,尝试添加以下代码: StringBuilder sb = new StringBuilder(); sb.Append(RTF_HEADER); sb.Append(@"{\fonttbl{\f0\fnil\fcharset" + Font.GdiCharSet.ToString() + " " + EncodeAnsi(this.Font.Name) + ";}}"); sb.Append(@"\f0\fs" + (int)Math.Round((2 * … Continue reading

Posted in C# | Tagged , , , | Leave a comment

C#实现文件关联

和其他语言一样,C#实现文件关联同样需要直接操作注册表,即按规则分别设置文件扩展名,文档类型说明,友好名称,图标,调用方法等键值即可,网上随便查查就可以写出以下的代码。 using Microsoft.Win32; RegistryKey key = Registry.ClassesRoot.OpenSubKey(".jb"); if (key == null) {     key = Registry.ClassesRoot.CreateSubKey(".jb");     key.SetValue("", "Jeebook.Reader.jb");     key.SetValue("Content Type", "application/jb");     key = Registry.ClassesRoot.CreateSubKey("Jeebook.Reader.jb");     key.SetValue("", "Jeebook Document");     RegistryKey keySub = key.CreateSubKey("DefaultIcon");     keySub.SetValue("", System.Windows.Forms.Application.StartupPath + … Continue reading

Posted in C#, 软件技术 | Tagged , , , | Leave a comment