我正在使用itextsharp
从TXT HTML文件生成PDF。我正在逐行读取文件。此行显示的路径无效:
"<td style='width: 393px;' colspan='4' rowspan='1'> <img src='" + Server.MapPath("~/images/diblack.png") + "' alt='System' width='100' height='50' /> </td>"
但这显示了正确的图像:
sb.Append("<td style='width: 393px;' colspan='4' rowspan='1'> <img src='" + Server.MapPath("~/images/diblack.png") + "' alt='System' width='100' height='50' /> </td>");
如何读取行并按要求分配图像?
答案 0 :(得分:2)
Server.MapPath("~/images/diblack.png")
是C#代码。对于需要 HTML 的库,没有没有理由在该HTML代码中评估C#。 src
属性中的部分不是有效路径,因为它实际上是" + Server.MapPath("~/images/diblack.png") + "
。
另一方面,当您写行
"<td style='width: 393px;' colspan='4' rowspan='1'> <img src='" + Server.MapPath("~/images/diblack.png") + "' alt='System' width='100' height='50' /> </td>"
在代码中,它自然地解释为C#,并且Server.MapPath(...)
被正确评估。
编辑
可以使用CSharpCodeProvider
即时编译和评估C#代码(例如,参见here或here)。这并不难实现,但是仍然有些工作。如果您有预算,可以购买一个可以简化代码的库,以便从字符串中编译和评估C#代码(例如,请参见here-我与供应商无关)。
编辑2:
虽然第一次编辑中介绍的方法很有用,但在HTML代码中添加某种占位符当然更容易,例如
<td style='width: 393px;' colspan='4' rowspan='1'> <img src='!SERVER_PATH[~/images/diblack.png]' alt='System' width='100' height='50' /> </td>
阅读该行后,您可以轻松地用正则表达式替换占位符
var line = ReadLine();
var matches = Regex.Matches(line, "!SERVER_PATH\\[([\\~a-z\\.\\/]+)\\]");
foreach(Match match in matches)
{
line = line.Replace(match.Value, Server.MapPath(match.Groups[1].Value));
}