HTML导出生成PDF

public class PDFHelper
{
///
/// html转pdf
///
/// 文件存储路径
public static string BaoJiaHtml(string train_body, string faceto, string train_content, string start_time, string end_time, string actual_join_number, string img_src, string kcjsmyd, string cg, string ld, string gsd)
{
//注册字体(pdf上显示中文必须注册字体)
FontFactory.RegisterFamily(“宋体”, “simsun”, @“c:\windows\fonts\SIMSUN.TTC,0”);
// FontFactory.RegisterFamily(“宋体”, “simsun bold”, @“c:\windows\fonts\SIMSUN_bold.TTC”);

    //获得已拼接好的页面
    StringBuilder sb = PdfHtml(train_body, faceto, train_content, start_time, end_time, actual_join_number, img_src, kcjsmyd, cg, ld, gsd);
    Document document = new Document();

    //设置页面大小是A4纸大小
    document.SetPageSize(iTextSharp.text.PageSize.A4.Rotate());
    //创建文档
    string paths =Path.Combine(AppDomain.CurrentDomain.BaseDirectory+"Download\\培训总结.pdf");//Path.Combine("D:/Users/Download/");//
    //paths = IsExists(paths);
    if (File.Exists(paths))
    {
        PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(paths, FileMode.Create));
    }
    else
    {
        PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(paths, FileMode.CreateNew));
    }

    document.Open();

    HTMLWorker html = new HTMLWorker(document);
    //将html转为pdf
    html.Parse(new StringReader(sb.ToString()));

    document.Close();
    return paths;
}

#region 根据商品数量设置图标位置 zhy + int CountYCoordinate(int productCount)
/// <summary>
/// 根据商品数量设置图标位置
/// </summary>
/// <param name="productCount">商品数量</param>
/// <returns>公司公章图片的Y轴坐标</returns>
public static int CountYCoordinate(int productCount)
{
    int imgY = 230;
    //只有一页商品
    if (productCount > 1 && productCount < 10)
    {
        imgY = imgY - (productCount - 1) * 20;
    }
    //公章位置固定在顶部(一满页有22件商品)
    else if ((productCount >= 10 && productCount <= 12) || ((productCount - 12) % 22 == 19) || ((productCount - 12) % 22 == 20) || ((productCount - 12) % 22 == 21) || ((productCount - 12) % 22 == 0))
    {
        imgY = 475;
    }
    //商品数量超过12件并不满足固定公章位置的条件,计算y轴坐标
    else if (productCount > 12)
    {
        imgY = 475;
        //商品数量减去第一页的半页商品数量在余满页商品数量计算Y轴坐标
        imgY = imgY - ((productCount - 12) % 22) * 22;
    }
    return imgY;
}
#endregion

#region 拼接html内容 StringBuilder PdfHtml(List<us_ShoppingTrolley> products, int pagecount)
/// <summary>
/// 拼接html内容
/// </summary>
/// <param name="train_body">培训主题</param>
/// <param name="faceto">培训对象</param>
/// <param name="train_content">培训背景</param>
/// <param name="start_time">开始时间</param>
/// <param name="end_time">结束时间</param>
/// <param name="actual_join_number">培训人数</param>
/// <param name="img_src">图片</param>
/// <param name="kcjsmyd">满意程度</param>
/// <param name="cg">成果</param>
/// <param name="ld">亮点</param>
/// <param name="gsd">改善点</param>
/// <returns></returns>
public static StringBuilder PdfHtml(string train_body, string faceto, string train_content, string start_time, string end_time, string actual_join_number, string img_src, string kcjsmyd, string cg, string ld, string gsd)
{
    StringBuilder sb = new StringBuilder();

    sb.Append("<table border=\"1\" width=\"80%\" style=\"margin:0 auto;\">");
    //sb.Append("<tbody>");
    sb.Append("<tr style=\"display: none\"><td colspan=\"4\" align=\"center\" style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">培训总结</td></tr>");
    sb.Append("<tr><td colspan=\"4\" align=\"center\" style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">培训方案详细信息</td></tr>");
    sb.Append("<tr><td style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">培训主题:</td><td style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">" + train_body + "</td><td style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">培训对象:</td><td>" + faceto + "</td></tr>");
    sb.Append("<tr><td style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">培训背景及目的:</td><td colspan=\"3\" style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">" + train_content + "</td></tr>");
    sb.Append("<tr><td style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">培训开始时间:</td><td>" + start_time + "</td><td class=\"req\">培训结束时间:</td><td style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">" + end_time + "</td></tr>");
    sb.Append("<tr><td style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">培训人数:</td><td colspan=\"3\" style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">" + actual_join_number + "</td></tr>");
    sb.Append("<tr><td style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">图片:</td><td colspan=\"3\">");
    if (img_src != null && img_src != "")
    {
        img_src = img_src.TrimEnd('*');
        string[] src = img_src.Split('*');
        for (int i = 0; i < src.Length; i++)
        {
            sb.Append("<img src=" + src[i] + " alt=\"添加培训相关图片\" height=\"120\">");
        }
    }

    sb.Append("</td></tr>");
    //上半段
    sb.Append("<tr><td colspan=\"4\" align=\"center\" style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">培训课程满意度</td></tr>");
    sb.Append("<tr><td colspan=\"4\">");
    sb.Append("<table border=\"1\" style=\"width: 100%;\"><tr><td style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">序号</td><td style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">课程</td><td style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">课程推荐度(满分10分)</td><td style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">讲师</td><td style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">讲师满意度(满分五星)</td></tr>");
    //sb.Append("<tbody style=\"cursor: pointer\">");
    List<kcjsmyd> list = GetList(kcjsmyd);
    if (list != null)
    {
        foreach (var item in list)
        {
            sb.Append("<tr><td>" + item.xu + "</td><td style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">" + item.course_title + "</td><td style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">" + item.course_grade + "</td><td style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">" + item.lecturer_name + "(linguangzhao)</td><td style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">" + item.lecturer_grade + "</td></tr>");
        }
    }
    sb.Append("</table>");
    sb.Append("</td></tr>");
    //满意程度

    sb.Append("<tr><td colspan=\"4\" align=\"center\" style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">培训方案修改说明</td></tr><tr><td colspan=\"4\" align=\"left\" style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\"></td></tr>");
    sb.Append("<tr><td colspan=\"4\" align=\"center\" style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">成果产出</td></tr><tr><td colspan=\"4\" style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">" + cg + "</td></tr>");
    sb.Append("<tr><td colspan=\"4\" align=\"center\" style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">培训亮点</td></tr>");
    sb.Append("<tr><td colspan=\"4\" style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">" + ld + "</td></tr>");
    sb.Append("<tr><td colspan=\"4\" align=\"center\" style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">培训待改善点</td></tr>");
    sb.Append("<tr><td colspan=\"4\" style=\"font-family: 宋体; font-size: 12pt;\" encoding=\"Identity-H\">" + gsd + "</td></tr>");
    sb.Append("</table>");
    return sb;
}
#endregion

//#region 获取购物车商品列表 zhy +  List<商品列表类> GetProducts()
/// <summary>
/// 获取购物车商品列表
/// </summary>
/// <returns>List<us_ShoppingTrolley></returns>
public static List<kcjsmyd> GetList(string str)
{
    List<kcjsmyd> list = new List<kcjsmyd>();
    if (str != null && str != "")
    {
        list = JsonConvert.DeserializeObject<List<kcjsmyd>>(str);
    }
    else
    {
        list = null;
    }
    return list;
}
public class kcjsmyd
{
    public string xu { get; set; }
    public string course_grade { get; set; }
    public string lecturer_name { get; set; }
    public string lecturer_grade { get; set; }
}

}

注意事项
在这里插入图片描述

需要指定文件路径,文件存在时可以使用FileModel.Create覆盖该文件,或者使用FileModel.CreateNew新建文件
在这里插入图片描述

拼接HTML时需要注意标明字体以及字符格式,否则可能无法显示。
注意拼接规范,拼接错误可能导致程序报错
图片位置一定要对,找不到图片位置会报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值