我正在使用columnText通过XMLWorkerHelper将html绘制为pdf,并且效果很好。

唯一的问题是,我正在使用的代码库要求所有内容都必须通过stamper.addAnnotation()绘制。

我不确定如何将columnText转换为可以添加为注释的内容?

一些上下文:这是一种用于将前端中的内容可编辑div转换为pdf元素的方法,但必须通过模子.addAnnotation完成。

如果不可能,是否有将HTML绘制为PDFAnnotations的方法?

当前使用列文本的代码(JRuby):

elementsList = XMLWorkerHelper::parseToElementList(html, css)
@stamper = PdfStamper.new(@reader, output_stream)
canvas = @stamper.getOverContent(page_no)

ct = ColumnText.new(canvas)
ct.setSimpleColumn(rect)
elementsList.each{|element| ct.addElement(element)}
ct.go()


通常如何附加注释的示例代码:

annotation = PdfAnnotation.createFreeText(@stamper.getWiter(), rect, "blah blah", defaultAppearance)
@stamper = PdfStamper.new(@reader, output_stream)
@stamper.addAnnotation(annotation, page_no)


defaultAppearance的类型为PdfContentByte,所以也许有一种方法可以将columnText转换为?我还没有弄清楚该怎么做。

有任何想法吗?

最佳答案

您的代码是JRuby,但是您也标记了问题java,因此我认为Java示例也可以为您提供帮助。

您可以通过ColumnText对象从HTML向外观添加内容,如下所示:

String html ="<html><h1>Header</h1><p>A paragraph</p><p>Another Paragraph</p></html>";
String css = "h1 {color: red;}";
ElementList elementsList = XMLWorkerHelper.parseToElementList(html, css);

PdfReader reader = new PdfReader(resource);
PdfStamper stamper = new PdfStamper(reader, result);

Rectangle cropBox = reader.getCropBox(1);

PdfAnnotation annotation = stamper.getWriter().createAnnotation(cropBox, PdfName.FREETEXT);
PdfAppearance appearance = PdfAppearance.createAppearance(stamper.getWriter(), cropBox.getWidth(), cropBox.getHeight());

ColumnText ct = new ColumnText(appearance);
ct.setSimpleColumn(new Rectangle(cropBox.getWidth(), cropBox.getHeight()));
elementsList.forEach(element -> ct.addElement(element));
ct.go();

annotation.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, appearance);
stamper.addAnnotation(annotation, 1);

stamper.close();
reader.close();


AddAnnotation.java测试方法testAddAnnotationLikeJasonY

对于此源文件

java - 如何在iext pdf中添加columnText作为注释-LMLPHP

结果看起来像这样

java - 如何在iext pdf中添加columnText作为注释-LMLPHP

如您所见,您已经拥有几乎所有必需的建筑用砖...

07-28 01:11