我有一些HTML内容(包括格式标签,如strong
,图片等)。在我的Java代码中,我想将此HTML内容转换为PDF文档,而不会丢失HTML格式。
无论如何在Java中使用它(使用iText或任何其他库)?
答案 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
这给了我
为了完整性,这里是我的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