我正在使用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" );
我有一个DBA创建的表。我想为每个表提供实体类以供进一步查询。有人能建议如何使用eclipse自动创建实体类吗?
问题内容: Redis非常快。在我的机器上,大多数情况下它的速度与node.js中的本机Javascript语句或函数调用一样快。在node.js中编写常规的Javascript代码很容易/很轻松,因为不需要回调。我不明白为什么使用node.js在Redis中获取/设置键/值数据不那么容易。 假设node.js和Redis在同一台机器上,是否有任何npm库允许使用阻塞调用与node.js上的Red
问题内容: 我的教授和这个家伙都声称创造了价值清单。 “注意:范围函数仅返回包含从x到y-1的数字的列表。例如,range(5,10)返回列表[5、6、7、8、9]。” 我认为这是不准确的,因为: 此外,访问由创建的整数的唯一显而易见的方法是遍历它们,这使我认为标记为列表是不正确的。 问题答案: 在Python 2.x中,返回一个列表,但在Python 3.x中,返回一个不可变序列,类型为。 Py
问题内容: http://www.vaannila.com/spring/spring-hibernate- integration-1.html 在阅读本教程时,他们没有提到在数据库中创建表的任何内容。一旦我指定了表和字段,Hibernate会自动处理它吗? 这是我的bean配置。 问题答案: 您的hibernate.hbm2ddl.auto设置应该确定所创建的数据库(选项为,,或者)
问题内容: 我正在从Windows编程(我指的是Windows编程)转向Linux编程。 对于Windows编程,我们可以选择Win32API(MFC只是一个C ++包装器)。 我想知道是否有直接暴露给程序员的东西(相当于WINAPI)?在哪里可以找到参考? 就我对POSIX库的一点了解而言,我发现它包装了的 一部分 。但是 创建GUI应用程序呢? POSIX不提供该功能。我知道有大量的第三方Wi
问题内容: 我试图在我的Python编程中使用一些AOP,但是我对现有的各种库没有任何经验。 所以我的问题是: Python有哪些AOP支持?两者之间的差异库有什么优势? 编辑 我找到了一些,但我不知道它们的比较: Aspyct 适用于Python的轻量级AOP 编辑2 我将在哪种情况下使用这些? 我有两个用Python编写的应用程序,它们通常具有计算税金和其他金钱事物的方法。我希望能够编写功能的