来源 :使用PDFBox创建表
以下方法绘制具有指定表内容的表。这有点骇人听闻,并且适用于小的文本字符串。它不执行自动换行,但是您可以了解它是如何完成的。搏一搏!
public static void drawTable(PDPage page, PDPageContentStream contentStream, float y, float margin, String[][] content) throws IOException { final int rows = content.length; final int cols = content[0].length; final float rowHeight = 20f; final float tableWidth = page.findMediaBox().getWidth() - margin - margin; final float tableHeight = rowHeight * rows; final float colWidth = tableWidth/(float)cols; final float cellMargin=5f; //draw the rows float nexty = y ; for (int i = 0; i <= rows; i++) { contentStream.drawLine(margin, nexty, margin+tableWidth, nexty); nexty-= rowHeight; } //draw the columns float nextx = margin; for (int i = 0; i <= cols; i++) { contentStream.drawLine(nextx, y, nextx, y-tableHeight); nextx += colWidth; } //now add the text contentStream.setFont( PDType1Font.HELVETICA_BOLD , 12 ); float textx = margin+cellMargin; float texty = y-15; for(int i = 0; i < content.length; i++){ for(int j = 0 ; j < content[i].length; j++){ String text = content[i][j]; contentStream.beginText(); contentStream.moveTextPositionByAmount(textx,texty); contentStream.drawString(text); contentStream.endText(); textx += colWidth; } texty-=rowHeight; textx = margin+cellMargin; }}
用法:
PDdocument doc = new PDdocument();PDPage page = new PDPage();doc.addPage( page );PDPageContentStream contentStream = new PDPageContentStream(doc, page);String[][] content = {{"a","b", "1"}, {"c","d", "2"}, {"e","f", "3"}, {"g","h", "4"}, {"i","j", "5"}} ;drawTable(page, contentStream, 700, 100, content);contentStream.close();doc.save("test.pdf" );
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)