2016-10-11 4 views
0

Я пытаюсь сделать отчет из приложения java swing, я пробовал отчеты jasper и другие инструменты, но я не понимаю, как их правильно использовать.IText Stamper undline специфический текст

Я попробовал это, и у меня на самом деле есть что-то вроде этого.

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); 
      } 

    } 

Мне нужно подчеркнуть, что две линии подчеркнуты.

Как я могу это сделать?

Есть ли другой способ, я могу сделать это проще?

Спасибо.

ответ

1

Вы используете очень сложный способ добавления контента. Там гораздо более простой способ, как описано в официальной документации: 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 как делается в этом FAQ: 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.

+0

Спасибо за ваш быстрый ответ. У меня также был конфликт библиотеки между itext 5 и itext 7, это не работает на v7 и v5, но я загрузил 5.5 и отлично работает. –

+1

Я ответил с текстом iText 5, потому что вы представили iText 5 код: 'PdfStamper' больше не существует в iText 7. Если вы хотите получить ответ iText 7, отправьте его как новый вопрос –

+0

@ JesúsSuárezBorrell, конфликт - это потому, что 5 и 7 не поддерживают обратную совместимость. itext 7 - это от начала переписать функциональность в iText5. –

Смежные вопросы