itext 生成 PDF(四) 表格绝对定位

该代码示例展示了如何使用iTextJava库生成包含中文字体的PDF文件,包括加载外部字体如宋体、隶书和仿宋,并创建段落和表格。同时,文中还提供了设置页面为横向和纵向的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不熟悉的基础的可参考:

itext 生成 PDF(一)_itextpdf_猪之仆的博客-优快云博客

itext 生成 PDF(二)_itext2_猪之仆的博客-优快云博客

itext 生成 PDF(三) pdf横向输出_猪之仆的博客-优快云博客

itext 生成 PDF(五) 使用外部字体_猪之仆的博客-优快云博客 

public class PdfFontTestController {
 
    public static Map<String, BaseFont> baseFontMap = new HashMap<>(30);
    static {
        try {
            baseFontMap.put("bfChinese", BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED));
            baseFontMap.put("LiSu",BaseFont.createFont("C:\\Windows\\Fonts\\SIMLI.TTF", BaseFont.IDENTITY_H,BaseFont.EMBEDDED)); //隶书
            baseFontMap.put("fangsong",BaseFont.createFont("C:\\Windows\\Fonts\\simfang.ttf", BaseFont.IDENTITY_H,BaseFont.EMBEDDED)); //仿宋
 
        }catch (Exception e){
            log.error(e.toString());
        }
    }
 
 
    public static void main(String[] args) throws Exception {
 
        File file = new File("D:\\2.pdf");
        file.createNewFile();
        Document document = new Document(PageSize.A4, 70, 70, 50, 60);
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
        document.open();
 
 
        Paragraph paragraph = new Paragraph("1111中国00", new Font(baseFontMap.get("bfChinese"), 12, Font.UNDEFINED));
        document.add(paragraph);
 
//        Paragraph paragraph1 = new Paragraph("33333中国00", new Font(baseFontMap.get("bfChinese1"), 12, Font.UNDEFINED));
//        document.add(paragraph1);
 
        Paragraph paragraph2 = new Paragraph("11你是中国人000", new Font(baseFontMap.get("LiSu"), 12, Font.NORMAL));
        document.add(paragraph2);
 
        Paragraph paragraph2S = new Paragraph("11你是中国人00000", new Font(baseFontMap.get("fangsong"), 12, Font.NORMAL));
        document.add(paragraph2S);
 
        //固定位置
//        writeSelectedRows()方法是将表格写入PDF文档的常用方法之一。它接受以下参数:
//        rowStart:要写入的第一行的索引。如果您想将整个表格写入PDF文档,则将其设置为0。
//        rowEnd:要写入的最后一行的索引。如果您想将整个表格写入PDF文档,则将其设置为-1。
//        x:表格左下角的x坐标。
//        y:表格左下角的y坐标。
//        canvas:要将表格写入的PdfContentByte对象。
//       // 创建一个表格
        PdfPTable table =  PdfTable.createTable(new int[]{1, 1, 1});;
        // 添加表格内容
        for (int i = 0; i < 9; i++) {
            table.addCell("Cell " + i);
        }

        // 将表格放置在页面的左上角
        PdfContentByte canvas = writer.getDirectContent();
//        table.setTotalWidth(300);
        table.writeSelectedRows(0, -1, 36, 100, canvas);
 
        //横向
        setPageSizeHen(document);
        document.newPage();
        Font liSu = new Font(baseFontMap.get("LiSu"), 12, Font.NORMAL);
        PdfPTable table1 = PdfTable.createTable(new int[]{1});
        table1.addCell(PdfTable.createCellCommon("检查科室与收费项目", liSu, 1, PdfTable.notBor, PdfTable.paddingFive, 1, null));
        document.add(table1);
        PdfPTable table2 = PdfTable.createTable(new int[]{1, 2, 1, 1});
        table2.addCell(PdfTable.createCellCommon("检查科室", liSu, 1, PdfTable.borZS, PdfTable.paddingFive,1, null));
        table2.addCell(PdfTable.createCellCommon("收费项目名称", liSu, 1, PdfTable.borZS, PdfTable.paddingFive,1, null));
        table2.addCell(PdfTable.createCellCommon("检查状态", liSu, 1, PdfTable.borZS, PdfTable.paddingFive,1, null));
        table2.addCell(PdfTable.createCellCommon("检查日期", liSu, 1, PdfTable.borZYS, PdfTable.paddingFive,1, null));
        document.add(table2);
 
 
       //纵向
        setPageSizeShu(document);
        document.newPage();
        Paragraph paragraph3 = new Paragraph("11你是中国人000", new Font(baseFontMap.get("LiSu"), 12, Font.NORMAL));
        document.add(paragraph3);
 
        document.close();
 
        System.out.println("Text added to pdf ..");
    }
 
    /**
     * @Author 
     * @Description 设置页面横向
     * @Date  
     * @param
     * @return
     **/
    public static  void setPageSizeHen(Document document){
        //横向
        Rectangle pageSize = new Rectangle(PageSize.A4.getHeight(), PageSize.A4.getWidth());
        pageSize.rotate();
        document.setPageSize(pageSize);
    }
    /**
     * @Author 
     * @Description 设置页面竖向
     * @Date  
     * @param
     * @return
     **/
    public static  void setPageSizeShu(Document document){
        //竖向
        Rectangle pageSize = new Rectangle(PageSize.A4.getWidth(), PageSize.A4.getHeight());
        pageSize.rotate();
        document.setPageSize(pageSize);
    }
 
}

输出效果:

 

<think>好的,我现在需要回答用户关于如何使用iText库创建带有表格PDF文件的问题。用户提到了iText同版本,我需要先确认用户指的是哪个版本,因为iText 5和iText 7的API有很大同。根据用户提供的引用,引用[1]提到了iText 5和iText 7的区别,而用户的问题可能希望得到具体版本的示例代码。 首先,用户的问题是想用iText生成带有表格PDF,所以需要分别给出iText 5和iText 7的示例代码。引用[2]中的代码示例是iText 5的,因为它使用了com.itextpdf.text包,而引用[3]中的Document构造方法看起来像iText 5的。因此,我需要分别整理两个版本的实现方法。 对于iText 5,创建表格通常使用PdfPTable和PdfPCell类。用户需要导入相应的包,创建Document实例,然后添加表格内容。代码结构可能包括创建表格对象,添加单元格,设置样式等步骤。引用[2]中的示例展示了如何创建一个简单的文档,但没有表格部分,所以需要补充表格的创建过程。 对于iText 7,表格的实现方式同,使用Table和Cell类,并且属于新的包com.itextpdf.layout.element。需要创建PdfDocument和Document对象,然后构建表格并添加到文档中。同时,需要注意资源管理,比如关闭文档。 此外,用户可能需要了解如何设置表格的列数、边框、单元格内容等基本操作。需要确保代码示例正确,并且语法无误,比如正确的类名和方法调用。还要提到依赖的添加,比如Maven或Gradle的配置,因为用户可能需要引入正确的库版本。 最后,根据引用[1],需要明确区分两种方法的同,所以在回答中要指出iText 5和iText 7的同实现,并分别提供代码示例。同时,要确保回答结构清晰,分步骤说明,帮助用户理解同版本的使用方式。 需要验证代码的正确性,比如检查iText 5中PdfPTable的使用是否正确,以及iText 7中Table和Cell的导入是否正确。另外,表格的添加顺序是否正确,比如在iText 7中是否需要先创建Table对象,添加单元格后再添加到Document中。 可能还需要提到异常处理,比如在iText中操作文档时需要处理异常,但示例代码可能为了简洁省略了try-catch块,但最好在注释中说明这一点。此外,关闭文档的重要性也需要强调,以避免资源泄漏。 总结步骤: 1. 确定用户需要iText 5和iText 7的示例。 2. 分别编写两个版本的创建表格的代码。 3. 指出两者的差异和注意事项。 4. 提供依赖配置的提示。 5. 确保代码语法正确,符合用户提供的引用内容。</think>在iText库中创建表格需区分版本实现,以下是iText 5和iText 7两种方法的详细说明: --- ### iText 5实现表格(旧版API) ```java // 引用[2]中Document类的使用方式 import com.itextpdf.text.*; import com.itextpdf.text.pdf.*; public class TableExample { public static void main(String[] args) throws Exception { Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream("table_example.pdf")); document.open(); // 创建3列的表格 PdfPTable table = new PdfPTable(3); // 添加表头 table.addCell("姓名"); table.addCell("年龄"); table.addCell("职业"); // 添加数据行 table.addCell("张三"); table.addCell("30"); table.addCell("工程师"); document.add(table); document.close(); // 必须关闭以生成文件[^3] } } ``` --- ### iText 7实现表格(新版API) ```java // 引用[1]中提到的PdfDocument类 import com.itextpdf.kernel.pdf.*; import com.itextpdf.layout.*; import com.itextpdf.layout.element.*; public class TableExampleV7 { public static void main(String[] args) throws Exception { PdfDocument pdf = new PdfDocument(new PdfWriter("table_example_v7.pdf")); Document document = new Document(pdf); // 创建3列的表格iText 7使用Table类) Table table = new Table(3); // 添加表头 table.addCell(new Cell().add("姓名")); table.addCell(new Cell().add("年龄")); table.addCell(new Cell().add("职业")); // 添加数据行 table.addCell("张三"); table.addCell("30"); table.addCell("工程师"); document.add(table); document.close(); // 必须关闭以释放资源[^1] } } ``` --- ### 关键差异说明 1. **API包结构同** iText 5使用`com.itextpdf.text.pdf.PdfPTable`,而iText 7改用`com.itextpdf.layout.element.Table`[^1]。 2. **单元格样式设置** iText 5通过`PdfPCell`设置边框、背景色;iText 7通过`Cell`类的`setBorder`/`setBackgroundColor`方法。 3. **依赖配置** - iText 5的Maven依赖: ```xml <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13.3</version> </dependency> ``` - iText 7的依赖: ```xml <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext7-core</artifactId> <version>7.2.5</version> </dependency> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值