我需要创建一个PDF来保存执行状态的报告,其中状态将在表结构中.是否可以使用PDFBOX api生成pdf表格式?
以下是一些用于创建新PDF文档的示例代码:
import java.awt.Color;
import java.io.IOException;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
public class HelloWorld
{
/**
* Constructor.
*/
public HelloWorld()
{
super();
}
public static void main(String[] args) throws IOException, COSVisitorException
{
PDDocument doc = null;
try
{
doc = new PDDocument();
PDPage page = new PDPage();
doc.addPage( page );
PDFont font = PDType1Font.COURIER_BOLD_OBLIQUE;
Color color = Color.blue;
PDPageContentStream contentStream = new PDPageContentStream(doc, page);
contentStream.beginText();
contentStream.setFont( font, 12 );
contentStream.setNonStrokingColor(color);
contentStream.moveTextPositionByAmount( 100, 700 );
contentStream.drawString( "message" );
contentStream.setNonStrokingColor(Color.GREEN);
contentStream.drawString( "Hi" );
contentStream.endText();
contentStream.close();
doc.save( "d:\\abc.pdf" );
}
finally
{
if( doc != null )
{
doc.close();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
imm*_*ble 16
Try this:
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.getCropBox().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;
}
}
Run Code Online (Sandbox Code Playgroud)
And simply call this method in main function
public static void main(String[] args) throws IOException, COSVisitorException {
PDDocument doc = new PDDocument();
PDPage page = new PDPage();
doc.addPage( page );
PDPageContentStream contentStream = new PDPageContentStream(doc, page);
String[][] content = {
{"Name"," Time "},
{"HTC","01:25"},
{"Samsung Tab2","05:30"}
} ;
drawTable(page, contentStream, 700, 100, content);
contentStream.close();
doc.save("h:\\test.pdf" );
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33452 次 |
| 最近记录: |