如何将HTML内容转换为PDF而不会丢失使用Java的格式?

时间:2011-01-17 11:30:09

标签: java pdf-generation html-parsing itext

我有一些HTML内容(包括格式标签,如strong,图片等)。在我的Java代码中,我想将此HTML内容转换为PDF文档,而不会丢失HTML格式。

无论如何在Java中使用它(使用iText或任何其他库)?

3 个答案:

答案 0 :(得分:5)

我使用了Flying Saucer项目中的 Button b = new Button(getApplicationContext()); b.setText(R.string.klick); ViewGroup.LayoutParams params = b.getLayoutParams(); params.height = ViewGroup.LayoutParams.MATCH_PARENT; params.height = ViewGroup.LayoutParams.WRAP_CONTENT;

这是一个简短,独立,有效的例子。 在我的情况下,我想稍后将字节流式传输到电子邮件附件中。

因此,在示例中,我将其写入文件纯粹是为了演示此问题。这是Java 8。

ITextRenderer

这给了我

enter image description here

为了完整性,这里是我的Maven 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("<b>You gotta walk and don't look back</b>")); } /** * 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

答案 1 :(得分:0)

将HTML转换为PDF通常并不简单,但是如果您控制HTML中的内容,则可以尝试使用XSL-FO实现,例如Apache FOP

它不是开箱即用的,因为你必须编写(或找到)定义转换规则的样式表,但从好处来看,它可以让你更好地控制输出格式,这非常有用。在屏幕上看起来不错的东西在纸面上看起来并不一定好。

答案 2 :(得分:0)

我会尝试DocRaptor.com。它以任何语言将html转换为pdf或html为xls,并且因为它使用Prince XML(不需要支付昂贵的许可费),所以质量比其他选项好很多。它也是一个网络应用程序,所以没有什么可下载的。轻松解决漫长而令人沮丧的编码问题。

以下是一些例子: https://docraptor.com/documentation#coding_examples