java
复制代码
package mis.shared.file;
import com.bestvike.linq.Linq;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.draw.LineSeparator;
import java.io.FileOutputStream;
/**
* pdf工具类
*/
public class PdfUtil {
public static void main(String[] args) throws Exception {
Demo();
}
public static void Demo() throws Exception {
Document document = new Document(PageSize.A4, 50, 50, 30, 30); // 指定页面大小为A4,且自定义页边距(marginLeft、marginRight、marginTop、marginBottom)
PdfWriter.getInstance(document, new FileOutputStream("E:\\develop\\tmp\\test" + System.currentTimeMillis() + ".pdf"));
document.open();
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font keyfont = new Font(bfChinese, 10, Font.BOLD);
Font textfont = new Font(bfChinese, 10, Font.NORMAL);
Paragraph wrap = new Paragraph("\r\n", textfont);
// 段落
Paragraph paragraph = new Paragraph("知之愈明,则行之愈笃;行之愈笃,则知之益明。------朱熹(宋)", textfont);
// 直线
Paragraph line = new Paragraph();
line.add(new Chunk(new LineSeparator()));
// 超链接
Anchor link = new Anchor("点击跳转到百度", textfont);
link.setReference("www.baidu.com");
// 添加图片
Image image = Image.getInstance("E:\\develop\\tmp\\install.png");
image.setAlignment(Image.ALIGN_CENTER);
image.scalePercent(40); //依照比例缩放
// 表格
PdfPTable table = createTable(new float[]{80, 80, 80, 80, 80, 80});
table.addCell(createCell("早上9:00", keyfont, Element.ALIGN_CENTER));
table.addCell(createCell("中午11:00", keyfont, Element.ALIGN_CENTER));
table.addCell(createCell("中午13:00", keyfont, Element.ALIGN_CENTER));
table.addCell(createCell("下午15:00", keyfont, Element.ALIGN_CENTER));
table.addCell(createCell("下午17:00", keyfont, Element.ALIGN_CENTER));
table.addCell(createCell("晚上19:00", keyfont, Element.ALIGN_CENTER));
for (int i = 0; i < 5; i++) {
table.addCell(createCell("起床", textfont));
table.addCell(createCell("吃午饭", textfont));
table.addCell(createCell("午休", textfont));
table.addCell(createCell("下午茶", textfont));
table.addCell(createCell("回家", textfont));
table.addCell(createCell("吃晚饭", textfont));
}
//最后一行
table.addCell(createCell("总计", textfont, Element.ALIGN_CENTER));
// 处理最后一行边框合并
PdfPCell cell = new PdfPCell();
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setBorderWidthTop(0);
cell.setBorderWidthLeft(0);
cell.setColspan(5);
cell.setPhrase(new Phrase("5天", textfont));
table.addCell(cell);
// 开始从内存写入到磁盘 pdf文件中
document.add(paragraph);
document.add(line);
document.add(link);
document.add(wrap);
document.add(table);
document.add(image);
document.close();
}
public static PdfPTable createTable(float[] widths) {
PdfPTable table = new PdfPTable(widths);
try {
table.setTotalWidth(Linq.of(widths).sumFloat());
table.setLockedWidth(true);
table.setHorizontalAlignment(Element.ALIGN_CENTER);
table.getDefaultCell().setBorder(1);
} catch (Exception e) {
e.printStackTrace();
}
return table;
}
public static PdfPCell createCell(String value, Font font) {
PdfPCell cell = new PdfPCell();
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setPhrase(new Phrase(value, font));
return cell;
}
public static PdfPCell createCell(String value, Font font, int align) {
PdfPCell cell = new PdfPCell();
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setHorizontalAlignment(align);
cell.setPhrase(new Phrase(value, font));
return cell;
}
}