itextsharp scale image作为字符串发送

时间:2014-07-01 08:39:32

标签: c# itextsharp

我发送以下字符串

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>"));

使用itextsharp生成PDF,除了图像太大外,它的效果非常好!有没有办法检查字符串是否包含宽度和高度,如果没有添加以缩放图像?

1 个答案:

答案 0 :(得分:0)

正如Bruno所说,请升级到XMLWorker。

您需要做的是为您感兴趣的HTML标记实现不再受支持的IHTMLTagProcessor界面。您对img标记感兴趣,因此您只想要基本上使用iText已经在做的事情但是有你自己的逻辑。不幸的是,他们的课程是私人的,因此您不能将其分类,但您可以see its contents here。你基本上会得到这样一个类:

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());

最后,更改解析调用以使用其中一个重载。我们不需要第四个参数(提供者),所以我们将null传递给它。

var elements = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(sr, styles, processors, null);