java - IText Stamper 为特定文本添加下划线

标签 java itext underline pdfstamper

我正在尝试从 java swing 应用程序制作报告,我尝试了 jasper 报告和其他工具,但我不明白如何正确使用它们。

我尝试了一下itext,实际上我有这样的东西。

   public void createPDF(){

        try {

             PdfReader reader = new PdfReader("pdf/watermark.pdf"); // input PDF
             PdfStamper stamper = new PdfStamper(reader,new FileOutputStream("C:\\Users\\FIREFENIX\\Documents\\NetBeansProjects\\Java\\PDFCreator\\src\\pdf\\watermarkFinal.pdf")); // output PDF

             BaseFont bfArialPlain = BaseFont.createFont("/font/arial.ttf",BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
             BaseFont bfArialBold = BaseFont.createFont("/font/arialbd.ttf",BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
             BaseFont bfArialBlack = BaseFont.createFont("/font/ariblk.ttf",BaseFont.IDENTITY_H,BaseFont.EMBEDDED);

             for (int i=1; i<=reader.getNumberOfPages(); i++){

                  PdfContentByte over = stamper.getOverContent(i);

                  //TOP LEFT
                  over.beginText();
                  over.setFontAndSize(bfArialBold, 9);
                  over.setTextMatrix(040, 670);
                  over.showText("Registry Date: ");   //<-----That field/line/text
                  over.endText();

                  over.beginText();
                  over.setFontAndSize(bfArialPlain, 9);
                  over.setTextMatrix(115, 670);
                  over.showText("21/07/2016");
                  over.endText();

                  over.beginText();
                  over.setFontAndSize(bfArialBold, 9);
                  over.setTextMatrix(040, 660);
                  over.showText("Validation Date: ");  //<-----And that one
                  over.endText();

                  over.beginText();
                  over.setFontAndSize(bfArialPlain, 9);
                  over.setTextMatrix(115, 660);
                  over.showText("21/07/2016");
                  over.endText();

                  //TOP RIGHT...
                  //...
                  //...



            }

            File myFile = new File("C:\\Users\\FIREFENIX\\Documents\\NetBeansProjects\\Java\\PDFCreator\\src\\pdf\\watermarkFinal.pdf");
            Desktop.getDesktop().open(myFile);
            //////////PRINT DISABLED////////Desktop.getDesktop().print(myFile);

            stamper.close();

            reader.close(); 


           } catch (IOException | DocumentException ex) {
               Logger.getLogger(PDFCreator.class.getName()).log(Level.SEVERE, null, ex);
           }

  }

我需要将 2 行加下划线。

我该怎么做?

还有其他方法可以让我更轻松地做到这一点吗?

谢谢。

最佳答案

您正在使用非常困难的方式来添加内容。有一种更简单的方法,如官方文档中所述:How to add text at an absolute position on the top of the first page?

而不是:

cb.BeginText();
cb.MoveText(700, 30);
cb.SetFontAndSize(bf, 12);
cb.ShowText("My status");
cb.EndText();

用途:

ColumnText ct = new ColumnText(stamper.getOverContent(i));
ct.setSimpleColumn(new Rectangle(30, 600, 523, 720));
ct.addElement(new Paragraph("My status"));
ct.go();

如果您想为文本添加下划线,则需要使用 Chunk,如常见问题解答条目中所做的那样:Strikethrough in cell using itext in Android/Java

所以让我们改编一下之前的代码片段:

ColumnText ct = new ColumnText(stamper.getOverContent(i));
ct.setSimpleColumn(new Rectangle(30, 600, 523, 720));
Chunk c = new Chunk("Underlined text");
c.setUnderline(1.5f, -1);
ct.addElement(new Paragraph(c));
ct.go();

有关详细信息,请参阅 Absolute positioning of text以及 underline 的搜索结果.

关于java - IText Stamper 为特定文本添加下划线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39981146/

相关文章:

java - 使用 UUID 为特定字符串生成唯一标识符是否安全(就唯一性而言)?

java - 将日期和整数写入现有的 .pdf

java - 在 itext7 中为跨越多个页面的表格绘制自定义边框

java - Android AlertDialog 列表中的下划线文本

Ios Swift 切换属性字符串的下划线

java - 将 ACM 图形窗口转换为图像文件

java - 使用索引从 Map 中检索值

java - 在接收器类中使用上下文

multithreading - itext "The document is not open"部署在 tomcat 7 中的 webservice 错误

python - Plotly:如何设置文本格式(下划线、粗体、斜体)