【问题标题】:How to add columnText as an annotation in itext pdf如何在itext pdf中添加columnText作为注释
【发布时间】:2023-04-10 03:10:02
【问题描述】:

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

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

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

一些上下文:这是一种将前端中内容可编辑的 div 转换为 pdf 元素的方法,但必须以某种方式通过 stamper.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 转换为该类型?我还没有弄清楚如何做到这一点。

有什么想法吗?

【问题讨论】:

  • PdfAnnotation 可以通过任何需要的方法创建

标签: java pdf pdf-generation itext jruby


【解决方案1】:

您的代码是 JRuby,但由于您还标记了您的问题 ,我认为 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)

对于本源文档

结果是这样的

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多