如何在iText html2pdf中通过CSS @page规则启用页面方向支持
解决iText html2pdf不识别@page规则实现横竖混合页面的方案
先修正现有代码的错误
你提供的CSS存在两个会导致规则失效的问题:
- 拼写错误:
@page page-portrait中orientation的值写为了portait,少了字母r,正确值为portrait @page的页面尺寸规则可以直接合并写到size属性里,iText对这种写法的兼容性比单独写orientation更高
修正后的HTML代码
<html> <head> <title>UnitTest</title> <style type="text/css"> * { box-sizing: border-box; } body { font-family: Arial, sans-serif; } /* 直接在size属性里指定纸张大小和方向 */ @page page-portrait { size: A4 portrait; } @page page-landscape { size: A4 landscape; } .page-portrait { page-break-after: always; page: page-portrait; } .page-landscape { page-break-after: always; page: page-landscape; } </style> </head> <body> <div class="page-portrait"> <p>This should be a portrait page</p> </div> <div class="page-landscape"> <p>This should be a landscape page</p> </div> <div class="page-portrait"> <p>This should be a portrait page</p> </div> <div class="page-landscape"> <p>This should be a landscape page</p> </div> </body> </html>
iText端转换配置要求
- 版本要求:必须使用iText 7的pdfHTML(html2pdf)插件3.0.0及以上版本,旧版本不支持CSS的
page属性绑定自定义@page规则 - 转换时不要硬编码全局页面大小,不要设置
defaultPageSize参数,否则会覆盖CSS里的页面规则
Java端转换示例代码:
import com.itextpdf.html2pdf.HtmlConverter; import java.io.FileInputStream; import java.io.FileOutputStream; public class Html2PdfTest { public static void main(String[] args) throws Exception { FileInputStream htmlStream = new FileInputStream("你的html文件路径"); FileOutputStream pdfStream = new FileOutputStream("输出pdf路径"); // 直接使用默认转换方法即可,不要额外设置全局页面大小 HtmlConverter.convertToPdf(htmlStream, pdfStream); } }
C#端转换逻辑和Java一致,仅语法稍有不同。
验证效果
修改后转换出来的PDF会按照配置依次生成纵向、横向、纵向、横向共4页,符合预期。
内容的提问来源于stack exchange,提问作者jan.swaelens
相关产品推荐
相关产品推荐

