如何将HTML内容转换为PDF而不会丢失使用Java的格式?
我有一些HTML内容(包括格式标签,如strong
,图像等)。在我的Java代码中,我想将此HTML内容转换为PDF文档,而不会丢失HTML格式。
无论如何在Java中使用它(使用iText或任何其他库)?
我会尝试DocRaptor.com 。 它以任何语言将html转换为pdf或html为xls,并且因为它使用Prince XML(不需要支付昂贵的许可费),所以质量比其他选项好很多。 它也是一个网络应用程序,因此无需下载。 轻松解决漫长而令人沮丧的编码问题。
以下是一些示例: https : //docraptor.com/documentation#coding_examples
我使用了Flying Saucer项目中的ITextRenderer
。
这是一个简短,独立,有效的例子。 在我的情况下,我想稍后将字节流式传输到电子邮件附件中。
因此,在示例中,我将其写入文件纯粹是为了演示此问题。 这是Java 8。
import com.lowagie.text.DocumentException; import org.apache.commons.io.FileUtils; import org.xhtmlrenderer.pdf.ITextRenderer; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; public class So4712641 { public static void main(String... args) throws DocumentException, IOException { FileUtils.writeByteArrayToFile(new File("So4712641.pdf"), toPdf("You gotta walk and don't look back")); } /** * Generate a PDF document * @param html HTML as a string * @return bytes of PDF document */ private static byte[] toPdf(String html) throws DocumentException, IOException { final ITextRenderer renderer = new ITextRenderer(); renderer.setDocumentFromString(html); renderer.layout(); try (ByteArrayOutputStream fos = new ByteArrayOutputStream(html.length())) { renderer.createPDF(fos); return fos.toByteArray(); } } }
这给了我
为了完整pom.xml
,这里是我的Maven pom.xml
相关部分
org.xhtmlrenderer flying-saucer-pdf 9.0.8 commons-io commons-io 2.4
将HTML转换为PDF通常并不简单,但是如果您控制HTML中的内容,则可以尝试使用XSL-FO实现,例如Apache FOP 。
它不是开箱即用的,因为您必须编写(或找到)定义转换规则的样式表,但从好处来看,它可以让您更好地控制输出格式,这对于看起来不错的东西非常有用在屏幕上看起来不一定在纸上看起来不错。