【发布时间】:2016-02-05 05:15:17
【问题描述】:
我在使用 iTextSharp (5.x) 将 html 转换为 pdf 时尝试隐藏包含特定类的图像元素时遇到问题。
我无法访问原始 Html,因为它来自其他来源,但是,我可以在获得它后在 C# 中执行 Regex 和 string.replace 等基本操作。
Html 字符串的一个简单示例如下所示:
<div>
<div>
<img src="somepath/desktop.jpg" class="img-desktop">Desktop</img>
<img src="somepath/mobile.jpg" class="img-mobile">Mobile</img>
</div>
</div>
然后使用 iTextSharp 中的 XMLWorker 将这个字符串创建为 PDF。
我需要隐藏第二张图片,更一般地说,任何带有“img-mobile”类的图片元素。
我尝试过的:
- 将 img.img-mobile {display:none} 添加到创建 pdf 时发送的 CSS 中
- 将 img.img-mobile {width:0;height:0} 添加到 CSS 中
- 将 @media print { img.img-mobile: display:none} 添加到 CSS 中
- 在 CSS 中添加 @media print { img.img-mobile: width:0;height:0}
-
使用正则表达式查找具有该类的 img 元素,然后遍历匹配项,将源替换为空源并将该字符串的原始 html 替换为新字符串(不幸的是,我的正则表达式没有抓取任何匹配项)
var pattern = "<img.*?class=\"img-mobile.*\"\\s?>.*</img>"; var mobileImages = Regex.Matches(innerHtml, pattern); var srcPattern = "src=\".*\" "; foreach (var imageElement in mobileImages) { var replaceString = Regex.Replace(imageElement.ToString(), srcPattern, " "); innerHtml.Replace(imageElement.ToString(), replaceString); }
我很快就没有关于如何处理这个问题的想法了……唯一的优点是进来的 Html 是一致的,因为工具正在其他地方生成它。因此,当用户“将图像添加到该 html”时,它的结构总是相同的,因此 Regex 和 replace 方法是可以接受的,尽管 CSS 方法会更受欢迎......
【问题讨论】:
标签: c# html css regex itextsharp