如何在C#中借助PdfPig批量移除字符串中的格式字符?
一次性移除HTML转义字符与标签的解决方案
核心思路
先对转义文本做HTML实体解码,再批量清理HTML标签,就能一次性处理完所有格式字符,无需逐个移除。
具体实现步骤
- 用
System.Net.WebUtility.HtmlDecode解码所有HTML实体(比如把&lt;p&gt;转成<p>,&nbsp;转成空格) - 借助正则表达式移除所有HTML标签(如
<p>、</p>这类) - 最后清理文本中的多余空格,整理成可用格式
C#代码示例(结合PdfPig)
using System; using System.Text.RegularExpressions; using System.Net; using UglyToad.PdfPig; using UglyToad.PdfPig.Core; using UglyToad.PdfPig.Content; public class HtmlToPdfProcessor { public static void ConvertCleanTextToPdf(string rawEscapedHtml) { // 1. 解码HTML实体 string decodedText = WebUtility.HtmlDecode(rawEscapedHtml); // 2. 移除所有HTML标签 string tagFreeText = Regex.Replace(decodedText, @"<[^>]+>", string.Empty); // 3. 清理多余空格和无效字符 string cleanedText = Regex.Replace(tagFreeText, @"\s+", " ").Trim(); // 4. 按列表符号拆分内容 string[] listItems = cleanedText.Split(new[] { "·" }, StringSplitOptions.RemoveEmptyEntries); // 用PdfPig生成PDF文档 using (var document = PdfDocument.Create()) { var page = document.AddPage(); var contentStream = page.ContentStream; float yPos = page.Height - 50; float xPos = 50; // 添加标题 contentStream.ShowText("Examples of vulnerability triggers:", new PdfPoint(xPos, yPos)); yPos -= 20; // 添加列表项 foreach (var item in listItems) { contentStream.ShowText($"- {item.Trim()}", new PdfPoint(xPos + 10, yPos)); yPos -= 15; } document.Save(@"vulnerability_triggers.pdf"); } } }
补充说明
WebUtility.HtmlDecode是.NET核心库自带方法,无需额外引用System.Web,适配.NET Core/.NET 5+所有项目- 正则表达式
<[^>]+>可匹配任意HTML标签,若需保留特定标签,可修改表达式规则(比如保留<b>标签就调整为@"<(?!b|/b)[^>]+>")
内容的提问来源于stack exchange,提问作者Matt Farrell
相关产品推荐
相关产品推荐

