Java 如何在itext pdf中添加columnText作为批注

Java 如何在itext pdf中添加columnText作为批注,java,pdf,pdf-generation,itext,jruby,Java,Pdf,Pdf Generation,Itext,Jruby,我正在使用columnText通过XMLWorkerHelper将html绘制成pdf,它工作得很好 唯一的问题是,我正在使用的代码库要求通过stamper.addAnnotation()绘制所有内容 我不知道如何将columnText转换为可以添加为注释的内容 某些上下文:这是一种将前端中的内容可编辑div转换为pdf元素的方法,但必须通过stamper.addAnnotation完成 如果不可能的话,还有什么方法可以将html绘制到PDFAnnotations中呢 当前使用列文本(JRuby

我正在使用columnText通过XMLWorkerHelper将html绘制成pdf,它工作得很好

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

我不知道如何将columnText转换为可以添加为注释的内容

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

如果不可能的话,还有什么方法可以将html绘制到PDFAnnotations中呢

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

注释通常附加方式的示例代码:

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示例也会对您有所帮助

您可以通过
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();
String html=“Header一段

另一段

”; 字符串css=“h1{color:red;}”; ElementList elementsList=XMLWorkerHelper.parseToElementList(html,css); PdfReader reader=新PdfReader(资源); PdfStamper压模=新PdfStamper(读卡器,结果); 矩形cropBox=reader.getCropBox(1); PdfAnnotation annotation=stamper.getWriter().createAnnotation(cropBox,PdfName.FREETEXT); pdfaappearance-appearance=pdfaappearance.createAppearance(stamper.getWriter(),cropBox.getWidth(),cropBox.getHeight()); ColumnText ct=新的ColumnText(外观); setSimpleColumn(新矩形(cropBox.getWidth(),cropBox.getHeight()); elementsList.forEach(element->ct.addElement(element)); ct.go(); 注释.setAppearance(pdfantation.APPEARANCE_NORMAL,外观); 母版添加注释(注释1); 压模关闭(); reader.close();
(试验方法
试验说明如EJASONY

对于此源文档

结果是这样的

正如您所看到的,您已经拥有了几乎所有必需的buildings Brick…

您的代码是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();
String html=“Header一段

另一段

”; 字符串css=“h1{color:red;}”; ElementList elementsList=XMLWorkerHelper.parseToElementList(html,css); PdfReader reader=新PdfReader(资源); PdfStamper压模=新PdfStamper(读卡器,结果); 矩形cropBox=reader.getCropBox(1); PdfAnnotation annotation=stamper.getWriter().createAnnotation(cropBox,PdfName.FREETEXT); pdfaappearance-appearance=pdfaappearance.createAppearance(stamper.getWriter(),cropBox.getWidth(),cropBox.getHeight()); ColumnText ct=新的ColumnText(外观); setSimpleColumn(新矩形(cropBox.getWidth(),cropBox.getHeight()); elementsList.forEach(element->ct.addElement(element)); ct.go(); 注释.setAppearance(pdfantation.APPEARANCE_NORMAL,外观); 母版添加注释(注释1); 压模关闭(); reader.close();
(试验方法
试验说明如EJASONY

对于此源文档

结果是这样的


如您所见,您已经拥有了几乎所有所需的建筑砖…

PDFanRotation可以通过任何所需的方法创建PDFanRotation可以通过任何所需的方法创建