iText 5 - Как настроить ячейки таблицы разных размеров, используя iText 5 в Java - PullRequest
0 голосов
/ 07 февраля 2020

Я пишу код Java для создания шаблона PDF. В разделе заголовка pdf я создал таблицу pdfTable, которая имеет 7 ячеек, включая ячейку изображения (Lo go), текстовое поле (Id Number) и оставшиеся 5 ячеек, чтобы заполнить фактический номер Id.

На выходе я должен получить большую ячейку изображения (представляющую Lo go), а числовые ячейки Id должны быть меньше по размеру, чем ячейка изображения. Пример, как на изображении ниже (ожидаемый результат).

Expected Result

Однако, когда шаблон сгенерирован, я не могу заполнить, как ожидалось, как показано на изображении выше (ожидаемый результат) .

Когда генерируется PDF, все ячейки принимают размер ячейки изображения.

Я пробовал с разными подходами, такими как установка виджетов столбцов, setFixedHeight (), setRowSpan (), Методы setColumnSpan () et c. Но ничего не сработало. Ниже на рисунке показан мой вывод (токовый выход).

Current Output

Ниже приведен код, который я написал.

public class NbaBafTemplateGenerator {

        private void createNbaBafTemplate(File outPutfileName, NbaBafTemplateData formData,String logoName) {

        Document document = new Document();
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(outPutfileName));
                document.open();
                PdfPTable table = null;

    // Passing the data as a single String                      

              //IdNumber varible is of type String and has 5 characters of the number.
                table = NbaBafTemplatePage.createHeaderTable(logoName + ",Id Number: , " + 
                formData.getIdNumber(), 7, "", "","1.5f, 1f, 0.2f, 0.2f, 0.2f, 0.2f, 0.2f"); 
                document.add(table); 

    }// END OF CLASS NbaBafTemplateGenerator.



    //Class NbaBafTemplatePage  Begins.
    public class NbaBafTemplatePage extends PdfPageEventHelper {

        public static PdfPTable createHeaderTable(String text, int columnCount, String colour, String align, String colSize)
            throws DocumentException, IOException {

                    PdfPTable table = null;
                    table = new PdfPTable(columnCount); // 7 columns.
                    table.setWidthPercentage(100); // Width 100%
                    table.setSpacingBefore(0f); /
                    table.setSpacingAfter(10f);

              //Assigning column widths based on input width params.                
                float[] tablecolumnWidths = {
                        Float.parseFloat(colSize.split(",")[0]),
                        Float.parseFloat(colSize.split(",")[1]),
                        Float.parseFloat(colSize.split(",")[2]),
                        Float.parseFloat(colSize.split(",")[3]),
                        Float.parseFloat(colSize.split(",")[4]),
                        Float.parseFloat(colSize.split(",")[5]),
                        Float.parseFloat(colSize.split(",")[6])};   

            PdfPCell imgCell = new PdfPCell(createImageCell(text.split(",")[0]));

                    //imgCell.setColspan(3);
                    //imgCell.setRowspan(3);
                    imgCell.setBorder(PdfPCell.NO_BORDER);
                    imgCell.setHorizontalAlignment(Element.ALIGN_LEFT);
                    imgCell.setVerticalAlignment(Element.ALIGN_LEFT);
                    table.addCell(imgCell);


            PdfPCell idCell = new PdfPCell(new Paragraph(text.split(",")[1]));

                    idCell.setBorderColor(BaseColor.BLACK);
                    idCell.setBackgroundColor(BaseColor.LIGHT_GRAY);
                    idCell.setPaddingLeft(10);
                    idCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
                    idCell.setVerticalAlignment(Element.ALIGN_RIGHT);
                    table.addCell(idCell);

            PdfPCell cellC0 = new PdfPCell(new Paragraph(text.split(",")[2]));

                cellC0.setBorderColor(BaseColor.BLACK); 
                cellC0.setHorizontalAlignment(Element.ALIGN_CENTER);
                cellC0.setVerticalAlignment(Element.ALIGN_MIDDLE);
                table.addCell(cellC0);

           PdfPCell cellC1 = new PdfPCell(new Paragraph(text.split(",")[3]));

                cellC1.setBorderColor(BaseColor.BLACK); 
                cellC1.setHorizontalAlignment(Element.ALIGN_CENTER);
                cellC1.setVerticalAlignment(Element.ALIGN_MIDDLE);
                table.addCell(cellC1);

           PdfPCell cellC2 = new PdfPCell(new Paragraph(text.split(",")[4]));

                cellC2.setBorderColor(BaseColor.BLACK); 
                cellC2.setHorizontalAlignment(Element.ALIGN_CENTER);
                cellC2.setVerticalAlignment(Element.ALIGN_MIDDLE);
                table.addCell(cellC2);

           PdfPCell cellC3 = new PdfPCell(new Paragraph(text.split(",")[5]));

                cellC3.setBorderColor(BaseColor.BLACK); 
                cellC3.setHorizontalAlignment(Element.ALIGN_CENTER);
                cellC3.setVerticalAlignment(Element.ALIGN_MIDDLE);
                table.addCell(cellC3);

           PdfPCell cellC4 = new PdfPCell(new Paragraph(text.split(",")[6]));
           cellC4.setBorderColor(BaseColor.BLACK); 
           cellC4.setHorizontalAlignment(Element.ALIGN_CENTER);
           cellC4.setVerticalAlignment(Element.ALIGN_MIDDLE);
           table.addCell(cellC4);

    return table;
    }//END OF METHOD createHeaderTable.

        public static PdfPCell createImageCell(String path) throws DocumentException, IOException {
        Image img = Image.getInstance(path);
        PdfPCell cell = new PdfPCell(img, true);

        return cell;
    }
  }

Я использую Java и iText 5.x версия.

Может кто-нибудь, пожалуйста, дайте мне знать, как создать таблицу PDF с различными размерами ячеек.

1 Ответ

1 голос
/ 13 февраля 2020

Вы можете создать таблицу из 2 строк (13 ячеек). Установите интервал столбца ячейки изображения равным 2. Оставьте оставшиеся ячейки первой строки пустыми, установите их границы равными 0 (невидимым) и отрегулируйте их высоту (ячейки первой строки) в соответствии с требуемым выравниванием. Затем добавьте оставшиеся 6 ячеек к таблице во второй строке. Отрегулируйте ширину столбца согласно вашему требованию. Надеюсь это поможет.

    PdfPTable table = new PdfPTable(7);         
    table.setWidthPercentage(100);
    PdfPCell imageCell = new PdfPCell(image);       
    imageCell.setBorder(0);
    imageCell.setRowspan(2);        
    table.addCell(imageCell);

    for(int i=0; i<6;i++) {
        PdfPCell blankCell = new PdfPCell();
        blankCell.setBorder(0);
        blankCell.setFixedHeight(20f);
        table.addCell(blankCell);
    }

    PdfPCell cell22 = new PdfPCell(new Phrase("ID Number"));
    table.addCell(cell22);

    PdfPCell cell23 = new PdfPCell(new Phrase("9"));                
    table.addCell(cell23);

    PdfPCell cell24 = new PdfPCell(new Phrase("6"));        
    table.addCell(cell24);

    PdfPCell cell25 = new PdfPCell(new Phrase("0"));        
    table.addCell(cell25);

    PdfPCell cell26 = new PdfPCell(new Phrase("5"));        
    table.addCell(cell26);

    PdfPCell cell27 = new PdfPCell(new Phrase("1"));        
    table.addCell(cell27);      

    document.add(table);
...