作为字符串发送的缩放图像

本文关键字:缩放 图像 字符串 | 更新日期: 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);