作为字符串发送的缩放图像
本文关键字:缩放 图像 字符串 | 更新日期: 2023-09-27 18:10:59
我发送以下字符串
string text = <img alt='"'" src='"http://localhost:6666/content/userfiles/admin/images/q4.png'" /><br/>
:
public static Paragraph CreateSimpleHtmlParagraph (String text)
{
string fontpath = System.Web.HttpContext.Current.Server.MapPath("~/Content/");
BaseFont bf = BaseFont.CreateFont(fontpath + "ARIALUNI.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
var f = new Font(bf, 10, Font.NORMAL);
var p = new Paragraph
{
Alignment = Element.ALIGN_LEFT,
Font = f
};
var styles = new StyleSheet();
styles.LoadTagStyle(HtmlTags.SPAN, HtmlTags.FONTSIZE, "10");
styles.LoadTagStyle(HtmlTags.BODY, HtmlTags.ENCODING, BaseFont.IDENTITY_H);
using (var sr = new StringReader(text))
{
var elements = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(sr, styles);
foreach (var e in elements)
{
p.Add(e);
}
}
return p;
}
使用: document.Add(CreateSimpleHtmlParagraph("<span style='font-size:10;'>" + "<b><u>" +
"Notes" + "</u></b>" + ": " + "<br/><br/>" + text + "</span>"));
生成PDF使用itextsharp,它工作得很好,除了图像太大!是否有一种方法来检查字符串是否包括宽度和高度,如果没有添加缩放图像?
正如Bruno所说,请升级到XMLWorker。
您需要做的是为您感兴趣的HTML标记实现不再支持的IHTMLTagProcessor
接口。你对img
标签很感兴趣,所以你会想要使用iText已经在做的事情,但是用你自己的逻辑。不幸的是,它们的类是私有的,所以你不能创建子类,但你可以在这里看到它的内容。你最终会得到这样一个类:
public class MyImageTagProcessor : IHTMLTagProcessor {
void IHTMLTagProcessor.EndElement(HTMLWorker worker, string tag) {
//No used
}
void IHTMLTagProcessor.StartElement(HTMLWorker worker, string tag, IDictionary<string, string> attrs) {
if (!attrs.ContainsKey(HtmlTags.WIDTH)) {
//Do something special here
attrs.Add(HtmlTags.WIDTH, "400px");
}
if (!attrs.ContainsKey(HtmlTags.HEIGHT)) {
//Do something special here
attrs.Add(HtmlTags.HEIGHT, "400px");
}
worker.UpdateChain(tag, attrs);
worker.ProcessImage(worker.CreateImage(attrs), attrs);
worker.UpdateChain(tag);
}
}
然后在你的代码中创建一个Dictionary
保存你的目标标签和该类的实例:
var processors = new Dictionary<string, IHTMLTagProcessor>();
processors.Add(HtmlTags.IMG, new MyImageTagProcessor());
最后,更改解析调用以使用其中一个重载。我们不需要第四个参数(providers),所以我们将null传递给它。
var elements = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(sr, styles, processors, null);