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