删除表格标题单元格 itext7 pdf 的边框



我正在使用itext7创建一个表。

我可以更改常规单元格的颜色。如何将标题单元格的边框更改为空?

我无法添加检查来创建"假"headerCell,因为该表可能是多列,因此我希望单元格位于每列的顶部。

拥有这个错误的标题单元格将只在生成的第一个单元格上。

我试过了:

            //does not work.
            table.setBorder(null);
            //---------------------------does not work.
            table.addHeaderCell("one: ").setBorder(Border.NO_BORDER);
            table.addHeaderCell("two: ").setBorder(null).addStyle(normal);
            table.addHeaderCell("three: ").setBorder(null).addStyle(normal);

最小:(只需设置您的位置) 包装申请;

import java.io.IOException;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import com.itextpdf.io.font.FontConstants;
import com.itextpdf.kernel.color.Color;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfDocumentInfo;
import com.itextpdf.kernel.pdf.PdfString;
import com.itextpdf.kernel.pdf.PdfViewerPreferences;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.ColumnDocumentRenderer;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.Style;
import com.itextpdf.layout.border.Border;
import com.itextpdf.layout.border.SolidBorder;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.element.Text;
import javafx.application.Application;
import javafx.stage.Stage;
public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        exportRes();
    }
    public static void main(String[] args) {
        launch(args);
    }

    public void exportRes() throws IOException{             
        PdfWriter writer = new PdfWriter(--location--);
        PdfDocument pdf = new PdfDocument(writer);

        pdf.getCatalog().setLang(new PdfString("en-US"));
        pdf.getCatalog().setViewerPreferences(new PdfViewerPreferences().setDisplayDocTitle(true));
        PdfDocumentInfo info = pdf.getDocumentInfo();
        info.setTitle("List");
        Document document = new Document(pdf,PageSize.A4);
        PdfFont font = PdfFontFactory.createFont(FontConstants.HELVETICA); 

        Style normal = new Style();
        normal.setFont(font).setFontSize((float) 7.5);
        Style notesF = new Style();
        notesF.setFont(font).setItalic().setFontSize((float) 7.5);
        Style lastNameF = new Style();
        lastNameF.setFont(font).setFontSize((float) 7.5).setBold();

        Table table = new Table(new float[]{(float) 2,29,10});
        table.setWidthPercent(100);
        table.setFont(font);

        //does not work.
        table.setBorder(null);
        //---------------------------does not work.
        table.addHeaderCell("one: ").setBorder(Border.NO_BORDER);
        table.addHeaderCell("two: ").setBorder(null).addStyle(normal);
        table.addHeaderCell("three: ").setBorder(null).addStyle(normal);

        Cell check = new Cell().add(new Paragraph(" ").addStyle(normal).setFixedLeading(0)).setBorder(new SolidBorder(Color.LIGHT_GRAY, (float) 0.5));
        table.addCell(check);
        Text lastName = new Text("Name ").setBold().addStyle(lastNameF);
        Text address = new Text("address").addStyle(normal);
        Cell name = new Cell().add(new Paragraph().add(lastName).add(address)).setBorder(new SolidBorder(Color.LIGHT_GRAY, (float) 0.5));
        table.addCell(name);

        Cell notes = new Cell().add("notes").addStyle(notesF).setBorder(new SolidBorder(Color.LIGHT_GRAY, (float) 0.5));
        table.addCell(notes);

        document.add(table);
        document.close();
    } 
}

你的代码几乎是正确的。问题非常简单,可以在下一行找到:

table.addHeaderCell("one: ").setBorder(Border.NO_BORDER);

请注意,Table#addHeaderCell 方法返回 Table 而不是 Cell 对象。然后你在表上应用Border.NO_BORDER

解决方案是:

table.addHeaderCell(new Cell().add("one: ").setBorder(Border.NO_BORDER));

此外,如果要在页眉/页脚(表格边框的类似物)上设置特定边框,请编写 summat table.getHeader().setBorder(your border) 。另请注意,itext 也会在页眉/页脚上应用表格边框。

我还想提一下,如果您使用 itext 7.0.2+,则像您一样调用 Table 构造函数并不是 100% 正确的。如果您希望列宽的比率为 2 29 30(或任何其他),请调用 Table(UnitValue.createPercentArray(new float[]{2, 29, 30)) ;

最新更新