【问题标题】:Convert html to pdf in landscape mode using iText使用 iText 在横向模式下将 html 转换为 pdf
【发布时间】:2021-11-07 12:32:43
【问题描述】:

我正在尝试使用 iText 将 html 转换为 pdf。 这是运行良好的简单代码:

ByteArrayOutputStream pdfStream = new ByteArrayOutputStream();
HtmlConverter.convertToPdf(htmlAsStringToConvert, pdfStream)

现在,我想将 pdf 转换为横向模式,所以我尝试了:

ConverterProperties converterProperties = new ConverterProperties();
  MediaDeviceDescription mediaDeviceDescription = new MediaDeviceDescription(MediaType.SCREEN);
  mediaDeviceDescription.setOrientation(LANDSCAPE);
  converterProperties.setMediaDeviceDescription(mediaDeviceDescription);
  HtmlConverter.convertToPdf(htmlAsStringToConvert, pdfStream, converterProperties);

还有:

 PdfDocument pdfDoc = new PdfDocument(writer);
  pdfDoc.setDefaultPageSize(PageSize.A4.rotate());
  HtmlConverter.convertToPdf(htmlAsStringToConvert, pdfDoc, new ConverterProperties()).

我也混合了两者,但结果还是一样,最终的 PDF 仍然是默认模式。

【问题讨论】:

  • 如果 HTML 本身在其属性或 CSS 中具有 body 横向尺寸怎么办?保存 htmlAsStringToConvert 并查看它。

标签: java itext html-to-pdf


【解决方案1】:

HTML转PDF时实现横向页面大小的最佳方式是提供相应的CSS指令让页面变成横向。

这是通过以下 CSS 完成的:

@page {
    size: landscape;
}

现在,如果您的输入 HTML 文档位于 htmlAsStringToConvert 变量中,那么您可以使用 iText 嵌入的 Jsoup 库将其作为 HTML 处理。基本上我们只是在<head> 中添加必要的 CSS 指令:

Document htmlDoc = Jsoup.parse(htmlAsStringToConvert);
htmlDoc.head().append("<style>" +
        "@page { size: landscape; } "
        + "</style>");

HtmlConverter.convertToPdf(htmlDoc.outerHtml(), new FileOutputStream(outPdf));

请注意,如果您的 HTML 中已经有 @page 声明,那么您附加的声明可能与您已有的声明冲突 - 在这种情况下,您需要确保将声明插入为最新声明 (只要您的所有声明都在&lt;head&gt; 元素中,上面的代码就应该是这种情况。

【讨论】:

  • @page { 大小:横向; } => 这就是答案。
猜你喜欢
  • 1970-01-01
  • 2020-09-04
相关资源
最近更新 更多