我们将使本教程简短而有趣。 在这里,您可以找到有关如何将任何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后需要内容,则很好),适合动态内容
之后,我们需要调用HtmlCleaner()。celean(html)方法来清理HTML。
现在,我们有了一个更干净且准备好的HTML,我们需要将其转换为PDF文档。 首先,您需要使用PDF的目标位置创建OutputStream。 您可以使用动态创建PDF,以确保您的代码不会引发任何异常。
之后,您需要创建自定义PdfWriter。 为此,您需要在我们的案例和文档(Itext)中创建Rectangle,A3格式。 使用矩形和文档获取编写器的实例。 OutputStream应该是PDF文档。
完成后,您需要初始化新的ItextRenderer,将对其进行修改,在此渲染器上,您应该传递两个参数,即PdfWriter和Document,您将在构造函数中对其进行初始化。
接下来,您可以添加ITextFontResolver,也可以不添加ITextFontResolver,但应添加CustomUserAgent,以显示我们的SVG图像(默认情况下,该库不支持该图像)。
最后,使用渲染器并调用createPdf函数。
自定义Itext用户代理
当您生成PDF时,这一部分非常重要,因为该库不支持显示SVG图像,我们被迫自己这样做。
首先,您需要重写getImageResource方法,并在内部调用我们的新函数,如果扩展名为.svg,它将负责显示SVG图像,否则,请从父类中调用该方法。
之后,您需要在其中渲染SVG图像的函数。 我们将使用在Main Class中创建的PdfWriter,如果我们使用不同的PdfWriter,则PDF看起来将不正确。
自定义Itext渲染器
最后一步是自定义Itext渲染器,我们需要这样做,因为我们希望将同一个PdfWriter传递给createPdf函数和自定义用户代理。 您需要执行哪些操作来初始化构造函数中的_writer并在ITextOutputDevice上设置writer。
Now you are good to go and to create your PDF files from HTML. Here is our example.