使用 HtmlConverter 和 ConvertToPdf

问题描述

谁能告诉我如何使用 iText 7 将 HTML 文件转换为 PDF?

我已尝试使用下面的代码,但出现错误

进程无法访问文件 'C:\...\Management_d5423f50-4cf0-4613-b274-f743ce806863.pdf' 因为它是 正在被另一个进程使用

在这条线上

HtmlConverter.ConvertToPdf(html,new FileStream(dest,FileMode.Create),properties);

我的完整代码如下

string filename;
string html;
string dest;
Paragraph contents;
protected void Page_Load(object sender,EventArgs e)
{
    if (!this.IsPostBack)
    {
        DataTable dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[]
 
        {
           new DataColumn("sID"),new DataColumn("contents"),new DataColumn("sUnity"),new DataColumn("sID_content_image")
        });
 
        dt.Rows.Add(1,"Set 1","Q400",@"~\Images\Chrysanthemum.jpg");
        dt.Rows.Add(2,"- Par 1.1",@"~\Images\Desert.jpg");
        dt.Rows.Add(3,"<b>bold text</b>",@"~\Images\Hydrangeas.jpg");
        dt.Rows.Add(4,"<i>italic text</i>",@"~\Images\Jellyfish.jpg");
        dt.Rows.Add(5,"<u>underline text</u>",@"~\Images\Koala.jpg");

        filename = @"C:\Users\developer4\Desktop\Management_" + Guid.NewGuid() + ".pdf";
 
        PdfWriter writer = new PdfWriter(filename);
        PdfDocument pdf = new PdfDocument(writer);
        Document document = new Document(pdf);
 
        if (dt.Rows.Count > 0)
        {
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                contents = new Paragraph(dt.Rows[i]["contents"].ToString())
                    .SetTextAlignment(TextAlignment.JUSTIFIED)
                    .SetFontSize(12);
 
                if (dt.Rows[i]["contents"].ToString().StartsWith("Set"))
                {
                    contents
                        .SetFontSize(12)
                        .SetBold()
                        .SetFontColor(ColorConstants.BLUE);
                    document.Add(new Lineseparator(new SolidLine()));
                }
                else if (dt.Rows[i]["contents"].ToString().StartsWith("- "))
                {
                    contents
                        .SetFontSize(10)
                        .SetBold()
                        .SetFontColor(ColorConstants.BLACK);
                    document.Add(new Lineseparator(new SolidLine()));
                }
                else
                {
                    contents
                        .SetFontSize(10)
                        .SetFontColor(ColorConstants.BLACK);
                }
 
                if (!String.IsNullOrEmpty(dt.Rows[i]["sID_content_image"].ToString()))
                {
                    iText.Layout.Element.Image image_path = new iText.Layout.Element.Image(ImageDataFactory
                            .Create(dt.Rows[i]["sID_content_image"].ToString()))
                            .SetTextAlignment(TextAlignment.CENTER);
 
                    image_path.SetAutoScale(false);
                    image_path.SetBorderLeft(new SolidBorder(ColorConstants.DARK_GRAY,2));
                    image_path.SetBorderRight(new SolidBorder(ColorConstants.DARK_GRAY,2));
                    image_path.SetBorderTop(new SolidBorder(ColorConstants.DARK_GRAY,2));
                    image_path.SetBorderBottom(new SolidBorder(ColorConstants.DARK_GRAY,2));
                    document.Add(image_path);
                    document.Add(new Lineseparator(new SolidLine()));
                }
 
                document.Add(contents);
            }
 
            dest = filename.ToString();
 
            ConverterProperties properties = new ConverterProperties()
             .SetMediaDeviceDescription(new MediaDeviceDescription(MediaType.PRINT));

            HtmlConverter.ConvertToPdf(html,properties);
 
            Response.Clear();
            Response.ContentType = "application/pdf";
            Response.AppendHeader("Content-disposition","attachment; filename=" + dest);
            Response.TransmitFile(dest);
            Response.End();
        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)