我正在使用Apache PDFBox Java库创建PDF。有没有一种使用pdfbox创建数据表的方法?如果没有这样的API,我将需要使用drawLine等手动绘制表格。有关如何执行此操作的任何建议?
来源 :使用PDFBox创建表
以下方法绘制具有指定表内容的表。这有点骇人听闻,并且适用于小的文本字符串。它不执行自动换行,但是您可以了解它是如何完成的。搏一搏!
/** * @param page * @param contentStream * @param y the y-coordinate of the first row * @param margin the padding on left and right of table * @param content a 2d array containing the table data * @throws IOException */ 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" );