FileResult PrintHtmlToPDFPageBreak() { StringBuilder sbBody =新StringBuilder();sbBody.Append("");sbBody.Append(“);sbBody.Append(”这是第一页“);sbBody.Append(”);sbBody.Append(“这是第二页”);sbBody.Append(“);sbBody.Append(”);string htmlContent = sbBody.ToString();bool isPortrait = true;字符串reportTitle =“.Net5中的测试iText7”;//为PDF byte[] pdfContent =null生成字节数组;//使用(MemoryStream memoryStream = new MemoryStream()) {//初始化PDF写入器PdfWriter pdfWriter =新PdfWriter(memoryStream);//初始化Pdf文档pdfDocument PdfDocument =新PdfDocument(pdfWriter);//初始化文档=(PdfDocument?新文档(pdfDocument,PageSize.LETTER):新文档(pdfDocument,PageSize.LETTER.Rotate());var headerHeight = String.IsNullOrEmpty(reportTitle)?70f :120 F;document.SetMargins(headerHeight,10f,56f,10f);//顶部、右侧、底部、左#区域HTML到PDF //转换成元素converterProperties ConverterProperties =新ConverterProperties();IList elements = HtmlConverter.ConvertToElements(htmlContent,converterProperties);foreach (var元素)document.Add((IBlockElement)元素);#endregion //关闭文档document.Close();pdfContent = memoryStream.ToArray();//关闭MemoryStream memoryStream.Close();}//以FileContentResult形式返回字节数组,供浏览器下载var fileName = "ConvertHtmlToPDF.pdf";返回文件( System.Net.Mime.MediaTypeNames.Application.Pdf,,pdfContent,fileName);}
发布于 2022-01-18 12:46:27
您还没有附加堆栈跟踪,但我确信问题就在这两行中:
foreach (var element in elements)
document.Add((IBlockElement)element);
你只是在不检查演员阵容是否合法的情况下进行铸造。当一个元素是AreaBreak
的一个实例时,只需处理这个案例。
发布于 2022-01-20 11:39:21
谢谢,亚历克西,你的解决方案奏效了。
旧代码:
foreach (var element in elements)
document.Add((IBlockElement)element);
新代码:
foreach (var element in elements)
{
if (element.GetType().Name == "HtmlPageBreak")
document.Add(new AreaBreak(AreaBreakType.NEXT_PAGE));
else
document.Add((IBlockElement)element);
}
https://stackoverflow.com/questions/70687820
复制相似问题