发布
社区首页 >问答首页 >iText.Html2pdf.Attach.Impl.Layout.HtmlPageBreak : itext7: InvalidCastException:无法将类型为iText.Layout.Element.IBlockElement的对象转换为iText.Layout.Element.IBlockElement

iText.Html2pdf.Attach.Impl.Layout.HtmlPageBreak : itext7: InvalidCastException:无法将类型为iText.Layout.Element.IBlockElement的对象转换为iText.Layout.Element.IBlockElement
EN

Stack Overflow用户
提问于 2022-01-12 20:12:15
回答 2查看 276关注 0票数 0
  1. 使用itext7 (7.2.0)和itext7.pdfhtml (4.0.0)和.Net Core5.0

  1. 将itext5报告转换为itext7

  1. 获取错误时,当使用html样式强制分页时,“分页前:总是;”

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);}

EN

回答 2

Stack Overflow用户

发布于 2022-01-18 20:46:27

您还没有附加堆栈跟踪,但我确信问题就在这两行中:

代码语言:javascript
代码运行次数:0
复制
foreach (var element in elements)
   document.Add((IBlockElement)element);

你只是在不检查演员阵容是否合法的情况下进行铸造。当一个元素是AreaBreak的一个实例时,只需处理这个案例。

票数 2
EN

Stack Overflow用户

发布于 2022-01-20 19:39:21

谢谢,亚历克西,你的解决方案奏效了。

旧代码:

代码语言:javascript
代码运行次数:0
复制
foreach (var element in elements)
         document.Add((IBlockElement)element);

新代码:

代码语言:javascript
代码运行次数:0
复制
foreach (var element in elements)
{
     if (element.GetType().Name == "HtmlPageBreak")  
        document.Add(new AreaBreak(AreaBreakType.NEXT_PAGE));  
     else  
        document.Add((IBlockElement)element);  
}  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70687820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档