使用iText将HTML转换为LANDSCAPE横版PDF失败问题咨询
iText HTML转PDF横版设置失效解决方案
你尝试的两种方案无效有两个核心原因:
MediaDeviceDescription.setOrientation(LANDSCAPE)仅用于匹配CSS中的媒体查询规则(如@media (orientation: landscape)),本身不会修改PDF的实际页面方向。PdfDocument.setDefaultPageSize()设置的默认页面尺寸,优先级低于HTML文档中定义的@pageCSS规则,如果你的HTML里存在明确的页面尺寸配置,会直接覆盖你设置的默认参数。
场景1:可以修改原始HTML内容
直接在HTML的<style>标签中添加页面规则即可,这是最稳定的方案:
@page { size: A4 landscape; /* 可根据需求调整边距 */ margin: 20px; }
场景2:无法修改原始HTML内容
通过添加页面事件监听器,强制所有生成的PDF页面都使用横版尺寸,参考代码如下:
ByteArrayOutputStream pdfStream = new ByteArrayOutputStream(); // 定义横版页面尺寸,非A4规格可自行替换 PageSize landscapePage = PageSize.A4.rotate(); PdfWriter writer = new PdfWriter(pdfStream); PdfDocument pdfDoc = new PdfDocument(writer); // 强制所有新生成的页面都使用指定横版尺寸 pdfDoc.addEventHandler(PdfDocument.START_PAGE, event -> { PdfDocumentEvent docEvent = (PdfDocumentEvent) event; docEvent.getPage().setPageSize(landscapePage); }); // 执行转换 HtmlConverter.convertToPdf(htmlAsStringToConvert, pdfDoc, new ConverterProperties());
如果需要其他纸张规格,替换PageSize.A4为对应参数即可。
内容的提问来源于stack exchange,提问作者Kimo_do
相关产品推荐
相关产品推荐

