rtf文本格式如何转换html格式(c#代码实现)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rtf文本格式如何转换html格式(c#代码实现)相关的知识,希望对你有一定的参考价值。

答对者,可追加50分。
拒收垃圾代码

将RTF格式的文件转成html并在网页中显示的代码 它是这样工作的,将一个RTF文件上传,然后转成HTML显示出来,代码有点复杂,teaman还要好好研究,好象中文版有点问题。 <html> <body> <? if(!($userfile)) ?> <form enctype="multipart/form-data" action="<?print($php_SELF);?>" method=post> <input type=hidden name="max_file_size" value=2000> Send this file: <input name=userfile type=file> <input type=submit value=Upload> </form> </body> </html> <? exit; function ProcessTags($tags, $line) $html = ""; global $color; global $size; global $bullets; // Remove spaces. $tags = trim($tags); // Found the beginning of the bulleted l // ist. if(ereg("\\\pnindent", $tags)) $html .= "<ul><li>"; $bullets += $line; $tags = ereg_replace("\\\par", "", $tags); $tags = ereg_replace("\\\(tab)", "", $tags); if($line - $bullets == 0) $tags = ereg_replace("\\\par", "", $tags); elseif($line - $bullets == 1) if(ereg("\\\pntext", $tags)) $html .= "<li>"; $tags = ereg_replace("\\\par", "", $tags); $tags = ereg_replace("\\\(tab)", "", $tags); $bullets++; else $html .= "</ul>"; $bullets = 0; // Convert Bold. if(ereg("\\\b0", $tags)) $html .= "</b>"; elseif(ereg("\\\b", $tags)) $html .= "<b>"; // Convert Italic. if(ereg("\\\i0", $tags)) $html .= "</i>"; elseif(ereg("\\\i", $tags)) $html .= "<i>"; // Convert Underline. if(ereg("\\\ulnone", $tags)) $html .= "</u>"; elseif(ereg("\\\ul", $tags)) $html .= "<u>"; // Convert Alignments. if(ereg("\\\pard\\\qc", $tags)) $html .= "<div align=center>"; elseif(ereg("\\\pard\\\qr", $tags)) $html .= "<div align=right>"; elseif(ereg("\\\pard", $tags)) $html .= "<div align=left>"; // Remove \pard from the tags so it does // n't get confused with \par. $tags = ereg_replace("\\\pard", "", $tags); // Convert line breaks. if(ereg("\\\par", $tags)) $html .= "<br>"; // Use the color table to capture the fo // nt color changes. if(ereg("\\\cf[0-9]", $tags)) global $fcolor; $numcolors = count($fcolor); for($i = 0; $i < $numcolors; $i++) $test = "\\\cf" . ($i + 1); if(ereg($test, $tags)) $color = $fcolor[$i]; // Capture font size changes. if(ereg("\\\fs[0-9][0-9]", $tags, $temp)) $size = ereg_replace("\\\fs", "", $temp[0]); $size /= 2; if($size <= 10) $size = 1; elseif($size <= 12) $size = 2; elseif($size <= 14) $size = 3; elseif($size <= 16) $size = 4; elseif($size <= 18) $size = 5; elseif($size <= 20) $size = 6; elseif($size <= 22) $size = 7; else $size = 8; // If there was a font color or size cha // nge, change the font tag now. if(ereg("(\\\cf[0-9])||(\\\fs[0-9][0-9])", $tags)) $html .= "</font><font size=$size color=$color>"; // Replace \tab with alternating spaces // and nonbreakingwhitespaces. if(ereg("\\\(tab)", $tags)) $html .= " "; return $html; function ProcessWord($word) // Replace \\ with \ $word = ereg_replace("[\\]2,", "\\", $word); // Replace \ with $word = ereg_replace("[\\][\]", "\", $word); // Replace \ with $word = ereg_replace("[\\][\]", "\", $word); // Replace 2 spaces with one space. $word = ereg_replace(" ", " ", $word); return $word; $color = "000000"; $size = 1; $bullets = 0; // Read the uploaded file into an array. // $rtfile = file($userfile); $fileLength = count($rtfile); // Loop through the rest of the array for($i = 1; $i < $fileLength; $i++) /* ** If the line contains "\colortbl" then we found the color table. ** We'll have to split it up into each individual red, green, and blue ** Convert it to hex and then put the red, green, and blue back together. ** Then store each into an array called fcolor. */ if(ereg("^\\\\colortbl", $rtfile[$i])) // Split the line by the backslash. $colors = explode("\\", $rtfile[$i]); $numOfColors = count($colors); for($k = 2; $k < $numOfColors; $k++) // Find out how many different colors th // ere are. if(ereg("[0-9]+", $colors[$k], $matches)) $match[] = $matches[0]; // For each color, convert it to hex. $numOfColors = count($match); for($k = 0; $k < $numOfColors; $k += 3) $red = dechex($match[$k]); $red = $match[$k] < 16 ? "0$red" : $red; $green = dechex($match[$k + 1]); $green = $match[$k +1] < 16 ? "0$green" : $green; $blue = dechex($match[$k + 2]); $blue = $match[$k + 2] < 16 ? "0$blue" : $blue; $fcolor[] = "$red$green$blue"; $numOfColors = count($fcolor); // Or else, we parse the line, pulling o // ff words and tags. else $token = ""; $start = 0; $lineLength = strlen($rtfile[$i]); for($k = 0; $k < $lineLength; $k++) if($rtfile[$i][$start] == "\\" && $rtfile[$i][$start + 1] != "\\") // We are now dealing with a tag. $token .= $rtfile[$i][$k]; if($rtfile[$i][$k] == " ") $newFile[$i] .= ProcessTags($token, $i); $token = ""; $start = $k + 1; elseif($rtfile[$i][$k] == "\n") $newFile[$i] .= ProcessTags($token, $i); $token = ""; elseif($rtfile[$i][$start] == "") // We are now dealing with a tag. $token .= $rtfile[$i][$k]; if($rtfile[$i][$k] == "") $newFile[$i] .= ProcessTags($token, $i); $token = ""; $start = $k + 1; else // We are now dealing with a word. if($rtfile[$i][$k] == "\\" && $rtfile[$i][$k + 1] != "\\" && $rtfile[$i][$k - 1] != "\\") $newFile[$i] .= ProcessWord($token); $token = $rtfile[$i][$k]; $start = $k; else $token .= $rtfile[$i][$k]; $limit = sizeof($newFile); for($i = 0; $i < $limit; $i++) print("$newFile[$i]\n"); ?> </body> </html>

不行的话试试这个


//创建一个word的实例
Word.Application newApp = new Word.Application();

// 指定源文件和目标文件
object Source="c:\\abc\\Source.doc";
object Target="c:\\abc\\Target.rtf";

object Unknown =Type.Missing;

// 打开要转换的Word文件
newApp.Documents.Open(ref Source,ref Unknown,
ref Unknown,ref Unknown,ref Unknown,
ref Unknown,ref Unknown,ref Unknown,
ref Unknown,ref Unknown,ref Unknown,
ref Unknown );

// 指定文档的类型
object format = Word.WdSaveFormat.wdFormatRTF;

//改变文档类型
newApp.ActiveDocument.SaveAs(ref Target,ref format,
ref Unknown,ref Unknown,ref Unknown,
ref Unknown,ref Unknown,ref Unknown,
ref Unknown,ref Unknown,ref Unknown);

//关闭word实例
newApp.Quit(ref Unknown,ref Unknown,ref Unknown);





或是这种方法
在richtohtml函数中增加下面的代码就行了:

Dim strLastFontsize As Long

If strLastFontsize <> rtbRichTextBox.SelFontSize Then
strLastFontsize = rtbRichTextBox.SelFontSize
strHTML$ = strHTML$ + "<font-size=""" & strLastFontsize & """>"
End If
参考技术A 关注一下没搞过的东西! 参考技术B 我猜这位是要做离线的web编辑器

如何将 C# 循环中的 html 编辑文本转换为页面上的完全格式化文本

【中文标题】如何将 C# 循环中的 html 编辑文本转换为页面上的完全格式化文本【英文标题】:how do i convert html edited text in C# loop to fully formatted text on the page 【发布时间】:2021-12-10 02:46:29 【问题描述】:

我有一个字符串列表,我想在 cshtml 页面(Asp.net C#)中显示,问题是我不想在我的文本中包含 html 标记,我想在我运行时在页面上显示格式化的文本网站。 输出为:&lt;p&gt;&lt;strong&gt;some &lt;/strong&gt;&lt;i&gt;data&lt;/i&gt;&lt;/p&gt; 它应该是:一些 数据

这是cshtml页面中的C#代码:

@foreach (var item in Model)
        
            <div>@item.content</div>
        

【问题讨论】:

文档中指出的code 标签不起作用? developer.mozilla.org/en-US/docs/Web/HTML/Element/code 【参考方案1】:

您需要使用Html.Raw(),以便它在HTML 中呈现为IHtmlString,而不是string

<div>@Html.Raw(item.content)</div>

渲染的 HTML

<div><p><strong>some </strong><i>data</i></p></div>

【讨论】:

感激不尽,谢谢。【参考方案2】:

您可以使用正则表达式将 HTML 代码和标签替换为空文本。 Click here to verify regex

@foreach (var item in Model)

    <div>@Regex.Replace(item.content, "<.*?>", String.Empty)</div>

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于rtf文本格式如何转换html格式(c#代码实现)的主要内容,如果未能解决你的问题,请参考以下文章

在Java中使用格式将rtf转换为html

有没有在winfrom中可以转换HTML样式的富文本框。

python模块将doc/pdf/docx/rtf格式转换为文本[重复]

富文本格式的分析

如何在 C# 中将 rtf 字符串转换为文本

如何从 Word 文档中提取 RTF / HTML 文本?