如何在 itext pdf 中添加 columnText 作为注释
How to add columnText as an annotation in itext pdf
我正在使用 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 转换成它?我还没弄明白具体怎么做。
有什么想法吗?
您的代码是 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
)
对于此源文件
结果是这样的
如您所见,您已经拥有几乎所有必需的建筑砖块...
我正在使用 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 转换成它?我还没弄明白具体怎么做。
有什么想法吗?
您的代码是 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
)
对于此源文件
结果是这样的
如您所见,您已经拥有几乎所有必需的建筑砖块...