java 操作pdf 合并单元格操作

本文介绍了一个使用Java和iText库动态生成PDF文件的方法,重点在于如何创建带有动态数据的表格。通过实例展示了如何设置字体、段落样式以及表格单元格属性。
package com.exgrain.common.service;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.commons.collections.map.HashedMap;

import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;


/**
 * <P>替换docx文档内容service 动态生成表格</P>
 * 
 */
public class GenerateDynamicDocxFileService {

    public static <E> void main(String[] args) throws DocumentException, IOException {

        pdfXX();
    }

  
    public static Paragraph createParagraph(String string, Font font, int alignment, float spacingBefore) {
        Paragraph paragraph = new Paragraph(string, font);
        paragraph.setAlignment(alignment);
        paragraph.setSpacingBefore(spacingBefore);
        return paragraph;
    }

  
    public static PdfPCell createPdfPCell(String string, Font font, int colspan, int rowspan, float fixedHeight) {
        PdfPCell pdfPCell = new PdfPCell(new Paragraph(string, font));
        pdfPCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
        pdfPCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
        pdfPCell.setColspan(colspan);
        pdfPCell.setRowspan(rowspan);
        pdfPCell.setFixedHeight(fixedHeight * rowspan);
        return pdfPCell;
    }

    public static void pdfXX() throws DocumentException, IOException {
        String targetPath = "G:\\pdf\\aaa.pdf";
        File pdfFile = new File(targetPath);
        pdfFile.setWritable(true, false);
      
        OutputStream out = new FileOutputStream(targetPath);

        BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
        com.lowagie.text.Document pdfDoc = new com.lowagie.text.Document(com.lowagie.text.PageSize.A4, 20, 20, 20, 20);
        Font title = new Font(bfChinese, 20, Font.BOLD);
        Font cellTitle = new Font(bfChinese, 12, Font.BOLD);
        Font cellContent = new Font(bfChinese, 11, Font.NORMAL);

        PdfWriter.getInstance(pdfDoc, out);
        pdfDoc.open();

        Paragraph docTitle = createParagraph("xxxxxxxxxxxxxxxxx告知单\n", title, Element.ALIGN_CENTER, 20);
        pdfDoc.add(docTitle);

        docTitle = createParagraph("编号:" + "11123322211" + "\n" + "", cellContent, Element.ALIGN_RIGHT, 20);
        pdfDoc.add(docTitle);

        docTitle = createParagraph("致:" + "xxxxxxxxxxxxxxxxxxxxxxxxx公司" + "    公司" + "\n" + "", cellContent,
                Element.ALIGN_LEFT, 20);
        pdfDoc.add(docTitle);

        String xxxxxxxx = "        嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111:"
                + "\n";
        docTitle = new Paragraph(xxxxxxxx, cellContent);
        docTitle.setAlignment(Element.ALIGN_LEFT);
        docTitle.setSpacingBefore(20);
        pdfDoc.add(docTitle);
        int size = 35;

        int widths[] = { 40, 40, 25, 20, 25, 20, 20, 20 };
        PdfPTable baseTable = new PdfPTable(8);
        baseTable.setWidthPercentage(100);
        baseTable.setSpacingBefore(10);
        baseTable.setWidths(widths);
        PdfPCell baseTableCell = null;

        baseTableCell = createPdfPCell("编号", cellTitle, 1, 1, size);
        baseTable.addCell(baseTableCell);
        baseTableCell = createPdfPCell("订单编号", cellTitle, 1, 1, size);
        baseTable.addCell(baseTableCell);
        baseTableCell = createPdfPCell("签订时间", cellTitle, 1, 1, size);
        baseTable.addCell(baseTableCell);
        baseTableCell = createPdfPCell("合同数量", cellTitle, 1, 1, size);
        baseTable.addCell(baseTableCell);
        baseTableCell = createPdfPCell("保证金时间", cellTitle, 1, 1, size);
        baseTable.addCell(baseTableCell);
        baseTableCell = createPdfPCell("支付数量", cellTitle, 1, 1, size);
        baseTable.addCell(baseTableCell);
        baseTableCell = createPdfPCell("数量", cellTitle, 1, 1, size);
        baseTable.addCell(baseTableCell);
        baseTableCell = createPdfPCell("服务费", cellTitle, 1, 1, size);
        baseTable.addCell(baseTableCell);

        // ----数据 S
        Map<String, String> map = new HashedMap();
        map.put("aa", "xxxxxxxxxxxxxxxx");
        map.put("bb", "aaaaaaaaaaaaa");
        map.put("cc", "2020/06/15");
        map.put("dd", "1314");
        map.put("ee", "2020/06/15");
        map.put("ff", "100");
        map.put("gg", "2288");
        map.put("hh", "200");
        List<Map> list = new ArrayList<Map>();
        list.add(map);
        list.add(map);
        list.add(map);
        list.add(map);
        list.add(map);
        list.add(map);
        list.add(map);
        // ----数据 E
        int rows = list.size();
        System.out.println((String) list.get(0).get("aa"));

        baseTableCell = createPdfPCell((String) list.get(0).get("aa"), cellContent, 1, rows, size);
        baseTable.addCell(baseTableCell);

        baseTableCell = createPdfPCell((String) list.get(0).get("bb"), cellContent, 1, rows, size);
        baseTable.addCell(baseTableCell);

        baseTableCell = createPdfPCell((String) list.get(0).get("cc"), cellContent, 1, rows, size);
        baseTable.addCell(baseTableCell);

        baseTableCell = createPdfPCell((String) list.get(0).get("dd"), cellContent, 1, rows, size);
        baseTable.addCell(baseTableCell);

        for (int i = 0, length = list.size(); i < length; i++) {
            Map tempM = list.get(i);
            baseTableCell = createPdfPCell((String) list.get(0).get("ee"), cellContent, 1, 1, size);
            baseTable.addCell(baseTableCell);

            baseTableCell = createPdfPCell((String) list.get(0).get("ff"), cellContent, 1, 1, size);
            baseTable.addCell(baseTableCell);

            baseTableCell = createPdfPCell((String) list.get(0).get("gg"), cellContent, 1, 1, size);
            baseTable.addCell(baseTableCell);

            baseTableCell = createPdfPCell((String) list.get(0).get("hh"), cellContent, 1, 1, size);
            baseTable.addCell(baseTableCell);
        }
        pdfDoc.add(baseTable);

        Paragraph docDown = createParagraph("    xxxxxxxxxxxxxxxxxxx公司" + "\n" + "", cellContent, Element.ALIGN_RIGHT,
                20);
        pdfDoc.add(docDown);
        pdfDoc.close();

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值