如何使用飞碟(Java)打印HTML页面

本文介绍了如何使用开源库Flying Saucer将HTML页面转换为PDF,包括处理资源文件、自定义Itext渲染器和用户代理,特别强调了如何显示SVG图像。
摘要由CSDN通过智能技术生成

我们将使本教程简短而有趣。 在这里,您可以找到有关如何将任何HTML源页面转换为PDF文档(包括所有资源文件,例如图像(PNG,JPG,SVG),样式和脚本)的简单步骤。

We will use Flying Saucer library that is open source. This library uses a modified and older version of Itext.

这里的主要步骤是:

  • 创建用于打印的CSS(我们将不介绍这些步骤,每个平台和网页都不同)创建自定义Itext Renderer(我们将覆盖标准的Itext Renderer,这是一个简单的更改,可以使PdfWriter处于早期阶段)自定义用户代理(我们将替代标准用户代理,我们将再提供一个选项,以在生成的PDF上显示SVG图片)主班

主班

Let's start with the Main Class. In this class here we will make a call to the page to get the source code. For instance, we will use where am i web page, because it is simple and clean. You can get the source code in multiple ways, we recommend the following:

  • 创建和执行HTTP客户端(不需要任何库)使用Chrome驱动程序和Selenium(速度较慢,但​​如果执行JS后需要内容,则很好),适合动态内容

dev1

之后,我们需要调用HtmlCleaner()。celean(html)方法来清理HTML。

现在,我们有了一个更干净且准备好的HTML,我们需要将其转换为PDF文档。 首先,您需要使用PDF的目标位置创建OutputStream。 您可以使用动态创建PDF,以确保您的代码不会引发任何异常。

dev2

之后,您需要创建自定义PdfWriter。 为此,您需要在我们的案例和文档(Itext)中创建Rectangle,A3格式。 使用矩形和文档获取编写器的实例。 OutputStream应该是PDF文档。

dev3

完成后,您需要初始化新的ItextRenderer,将对其进行修改,在此渲染器上,您应该传递两个参数,即PdfWriter和Document,您将在构造函数中对其进行初始化。

接下来,您可以添加ITextFontResolver,也可以不添加ITextFontResolver,但应添加CustomUserAgent,以显示我们的SVG图像(默认情况下,该库不支持该图像)。

最后,使用渲染器并调用createPdf函数。

dev4

自定义Itext用户代理

当您生成PDF时,这一部分非常重要,因为该库不支持显示SVG图像,我们被迫自己这样做。

首先,您需要重写getImageResource方法,并在内部调用我们的新函数,如果扩展名为.svg,它将负责显示SVG图像,否则,请从父类中调用该方法。

dev5

之后,您需要在其中渲染SVG图像的函数。 我们将使用在Main Class中创建的PdfWriter,如果我们使用不同的PdfWriter,则PDF看起来将不正确。

dev6

自定义Itext渲染器

最后一步是自定义Itext渲染器,我们需要这样做,因为我们希望将同一个PdfWriter传递给createPdf函数和自定义用户代理。 您需要执行哪些操作来初始化构造函数中的_writer并在ITextOutputDevice上设置writer。

dev7

Now you are good to go and to create your PDF files from HTML. Here is our example.
dev8

from: https://dev.to//pashaliski/how-to-print-html-page-using-flying-saucer-java-g60

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值