在GitHub项目中,我试图将任意 HTML 字符串转换为 PDF 版本。通过转换,我的意思是解析 HTML,并将其呈现为 PDF 文件。
为了实现这一点,我正在使用飞碟 PDF 渲染,如下所示:
主程序
public class Main {
public static void main(String [] args) {
final String ok = "<valid html here>: see github rep for real html markup here";
final String html = "<invalid html here>: see github rep for real html markup here";
try {
// final byte[] bytes = generatePDFFrom(ok); // works!
final byte[] bytes = generatePDFFrom(html); // does NOT work :(
try(FileOutputStream fos = new FileOutputStream("sample-file.pdf")) {
fos.write(bytes);
}
} catch (IOException | DocumentException e) {
e.printStackTrace();
}
}
private static byte[] generatePDFFrom(String html) throws IOException, DocumentException {
final ITextRenderer renderer = new ITextRenderer();
renderer.setDocumentFromString(html);
renderer.layout();
try (ByteArrayOutputStream fos = new ByteArrayOutputStream(html.length())) {
renderer.createPDF(fos);
return fos.toByteArray();
}
}
}
在上面的代码中,如果我使用存储在ok变量中的 html 字符串(这是一个“有效”的 html),它会正确创建 PDF(如果您使用该ok变量运行 GitHub 项目,它将sample-file.pdf在项目文件夹中创建一个文件,其中包含一些呈现的 html)。
现在,据我所知,这是因为 html 字符串的“无效”部分。
有没有什么办法可以“告诉”给飞碟PDF渲染到忽略/自动完成/清洁本身/或任何其他的,那些“无效”部分,并与创建PDF文件的前进(首选)。
有没有更好的方法可以用来克服这个问题。
相关分类