使用PDFBOX API创建新的PDF文档

Gan*_*hja 5 java pdfbox

我需要创建一个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)