时尚的pdf发票内置.net

时间:2015-10-16 19:09:30

标签: c# html css pdf

我在.net中编写代码来制作发票。首先,我将html代码分配给stringbuilder,然后将其传递给PDF转换器。我使用内联css样式style='width: 100%;,页面宽度标记工作正常,但当我使用font-family: 'Times New Roman';时,它不会显示在输出PDF文件中。 enter image description here
我想在输出pdf文件中添加样式字体和图像。

 protected void GenerateInvoicePDF(object sender, EventArgs e)
    {
        using (StringWriter sw = new StringWriter())
        {
            using (HtmlTextWriter hw = new HtmlTextWriter(sw))
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("<table style='width: 100%; font-family: 'Times New Roman'; -fs-pdf-font-embed: embed; -fs-pdf-font-encoding: Identity-H;'>");
                sb.Append("<tr><td>INVOICE #00007654345</td>");
                sb.Append("<tr><td colspan='2'></td></tr>");
                sb.Append("<td style='text-align: right;font-family: 'Times New Roman'; -fs-pdf-font-embed: embed; -fs-pdf-font-encoding: Identity-H;'>Senor John<br />55th Road, CoolVill<br />654554 - ARR<br /><br />+1 123 4567 8910<br />e-mail</td>");
                sb.Append("</tr><tr><td colspan='2'></td></tr></table>");


                //Export HTML String as PDF.
                StringReader sr = new StringReader(sb.ToString());
                Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
                HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
                PdfWriter writer = PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
                pdfDoc.Open();
                htmlparser.Parse(sr);
                pdfDoc.Close();
                Response.ContentType = "application/pdf";
                Response.AddHeader("content-disposition", "attachment;filename=Invoice_" + orderNo + ".pdf");
                Response.Cache.SetCacheability(HttpCacheability.NoCache);
                Response.Write(pdfDoc);
                Response.End();
            }
        }
    }

BTW:我首先用inline data使用HTMLWriter编写HTML页面而不是将其转换为pdf文件我是否可能在HTMLWriter中使用所有html组件,即引导程序,图像或样式....? 或者只是忘记所有这些事情并开始使用Crystal Reports来发票制作......?

1 个答案:

答案 0 :(得分:2)

您要使用style开头的单引号结束Times New Roman的属性。

注意如果将其视为html

,它的呈现方式
<table style='width: 100%; font-family: 'Times New Roman'; -fs-pdf-font-embed: embed; -fs-pdf-font-encoding: Identity-H;'>

您需要使用双引号并将其转义。

sb.Append("<table style='width: 100%; font-family: \"Times New Roman\"; -fs-pdf-font-embed: embed; -fs-pdf-font-encoding: Identity-H;'>");

这将呈现为

<table style='width: 100%; font-family: "Times New Roman"; -fs-pdf-font-embed: embed; -fs-pdf-font-encoding: Identity-H;'>