【发布时间】:2021-02-26 16:22:22
【问题描述】:
我正在使用 java 和 iText 5 来生成 PDF。我的输入行之一来自一个 WYSIWYG 编辑器,其中包含嵌入了 base64 图像的 html(即,不是图像的链接)。 WYSIWYG 可以有零到多个图像。
所见即所得包含:
这个“描述”由我的代码处理:
Document document = new Document(PageSize.A4, 72f, 72f, 72f, 72f);
PdfWriter.getInstance(document, resourceImage);
document.open();
String ppDescription = "";
if(activityDtl.getPPDescription() == null || activityDtl.getPPDescription().isEmpty()){
ppDescription = "";
}else{
//Clean the HTML to be correct XHTML
String cleanDesc = cleanHTML(activityDtl.getPPDescription());
InputStream inputStream1 = new ByteArrayInputStream (cleanDesc.getBytes("UTF-8"));
ByteArrayOutputStream baos1 = new ByteArrayOutputStream();
Tidy tidy1 = new Tidy();
tidy1.setXHTML(true);
tidy1.setQuiet(true);
tidy1.setShowWarnings(false);
tidy1.parseDOM(inputStream1, baos1);
ppDescription = baos1.toString();
// System.out.println("ppDescription: " + ppDescription);
}
p6.add(new Chunk("Description: ", smallBold));
if(ppDescription == null || ppDescription.isEmpty()){
p6.add("");
}else{
ElementList list1 = XMLWorkerHelper.parseToElementList(ppDescription, null);
System.out.println("list1: " + list1);
for (Element element : list1) {
p6.add(element);
}
}
cell.addElement(p6);
这是在该字段(描述)的输入中收到的内容是:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator"
content="HTML Tidy for Java (vers. 2009-12-01), see jtidy.sourceforge.net" />
<title></title>
</head>
<body>
<p>Cooking instructions:</p>
<p><img
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAggAAAC .... H3BNquwQYUAAAAASUVORK5CYII="
alt="" /></p>
<p>Cook the fish.</p>
</body>
</html>
这就是 PDF 中的内容:
我希望在 PDF 中拥有与所见即所得中的第一张图像相同的图像(即两条指令行之间的图像)。
【问题讨论】:
-
iText 布局元素接受纯文本并具有用于各种样式属性的设置器。如果您想将 HTML 转换为此类元素,请使用 iText
XMLWorker执行此操作。 -
谢谢mkl。我已经修改了上面的代码,并且无法将转换的输出添加到我的代码中。另外,这会满足所见即所得的图像吗?
-
我找到了如何显示html(请参见上文);但是,如果 WYSIWYG 中有图像,则它不起作用。如果 WYSIWYG 中有图像,则不显示整个段落(即 ANZAC Biscuits 有图像但不显示,Tests - Copy 没有图像并显示。如果我从 ANZAC Biscuits 中删除图像,那么它显示。)。
-
如何从该 HTML 引用图像?
XMLWorker很可能不支持完整的 HTML 标准;但它是可扩展的,可能你只需要添加一些帮助类。 (但我不得不承认,我并不真正深入了解XMLWorker,因为我根本不需要处理 HTML 到 PDF 的用例。) -
嗨,mkl,我在引导程序上使用 Summernote 所见即所得编辑。图像包含在文本字段中并存储在数据库中(MySQL 为 mediumtext)。没有对图像的引用。