使用PDFBOX API创建新的PDF文档 [英] Creating a new PDF document using PDFBOX API

查看:124
本文介绍了使用PDFBOX API创建新的PDF文档的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



公共类HelloWorld
{
/ **
*构造函数。
* /
public HelloWorld()
{
super();
}


public static void main(String [] args)抛出IOException,COSVisitorException
{
PDDocument doc = null;
try
{
doc = new PDDocument();

PDPage page = new PDPage();
doc.addPage(页);
PDFont font = PDType1Font.COURIER_BOLD_OBLIQUE;
颜色= 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);
}
最后
{
if(doc!= null)
{
doc.close();
}
}
}
}


试试这个:

  public static void drawTable(PDPage page,PDPageContentStream contentStream,
float y,float margin,
String [] [] content)抛出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;

//绘制行
float nexty = y;
for(int i = 0; i< = rows; i ++){
contentStream.drawLine(margin,nexty,margin + tableWidth,nexty);
nexty- = rowHeight;
}

//绘制列
float nextx = margin;
for(int i = 0; i< = cols; i ++){
contentStream.drawLine(nextx,y,nextx,y-tableHeight);
nextx + = colWidth;
}

//现在添加文本
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;
}
}

只需在 main function

  public static void main(String [] args)抛出IOException,COSVisitorException {
PDDocument doc = new PDDocument();
PDPage page = new PDPage();
doc.addPage(页);
PDPageContentStream contentStream = new PDPageContentStream(doc,page);

String [] [] content = {
{Name,Time},
{HTC,01:25},
{三星Tab2,05:30}
};

drawTable(page,contentStream,700,100,content);

contentStream.close();
doc.save(h:\\test.pdf);
}


I need to create a PDF which will hold the report of execution status, where the status would be in table structure. Is it possible to generate pdf table format with the PDFBOX api?

Here is some sample code for creating a new PDF document:

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();
        }
    }
    } 
}

解决方案

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;
        }
    }

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" );
} 

这篇关于使用PDFBOX API创建新的PDF文档的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆