使用iText将HTML转换为横向排列的PDF

4

我想使用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仍然处于默认模式。


1
如果HTML本身在其属性或CSS中为其“body”设置了横向尺寸,该怎么办?保存htmlAsStringToConvert并查看它。 - Joop Eggen
1个回答

6
将HTML转换为PDF并实现横向页面大小的最佳方式是提供相应的CSS指令使页面变成横向。可使用以下CSS实现:
@page {
    size: landscape;
}

现在,如果你有输入的HTML文档存在htmlAsStringToConvert变量中,那么你可以使用Jsoup库对其进行处理,它被嵌入到iText中。基本上,我们只需将必要的CSS指令添加到我们的<head>中:

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

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

注意,如果您已经在HTML中有@page声明,则附加的声明可能会与您已经拥有的声明冲突 - 在这种情况下,您需要确保将您的声明插入为最新的声明(只要您的声明都在<head>元素中即可)。(上面的代码应该是这种情况,只要你的声明都在<head>元素中)。

@page { size: landscape; } => 这就是答案。 - Kimo_do

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接