用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

Java 利用BFO操作PDF文件

2012-12-22 作者: 小蜜锋举报

[java]代码库

import org.faceless.pdf2.*;
import java.util.Locale;
import java.awt.Color;
import java.util.*;
import java.io.*;
 
/**
 * 创建一个PDF文档,内容来源于一个TXT文本文件。
 * 相关包下载 http://big.faceless.org/products/bfopdf-2.11.4.zip
 * author:小段
 */
public class CreateBook {
    private static PDFStyle numstyle;
    private static int pagenum = 1;
    private static PDF pdf;
    private static final String PAGESIZE = "A4-Landscape";
    private static final float WIDTH, HEIGHT;
    static {
        PDFPage page = new PDFPage(PAGESIZE);
        WIDTH = (page.getWidth() / 2) - 100;
        HEIGHT = page.getHeight() - 100;
    }
 
    public static void main(String args[]) throws IOException {
        String filename = args.length > 0 ? args[0] : "C:\\bfo.txt";
        // 设置文本源文件,并且创建一个PDF对象。
        pdf = new PDF();
        pdf.setLocale(Locale.ENGLISH);
        // 创建一个新的PDF格式,设置字体(罗马字体)、字号(11)以及颜色(黑色)。
        PDFStyle textstyle = new PDFStyle();
        textstyle.setFont(new StandardFont(StandardFont.TIMES), 11);
        textstyle.setFillColor(Color.black);
        textstyle.setTextAlign(PDFStyle.TEXTALIGN_JUSTIFY);
        numstyle = new PDFStyle();
        numstyle.setFont(new StandardFont(StandardFont.TIMES), 8);
        numstyle.setFillColor(Color.black);
        numstyle.setTextAlign(PDFStyle.TEXTALIGN_CENTER);
        LayoutBox chapter = new LayoutBox(WIDTH);
        int chapternumber = 0;
        BufferedReader in = new BufferedReader(new FileReader(filename));
        String line;
        long starttime = System.currentTimeMillis();
        System.out.println(new Date()+": Starting file");
        // 文件开始被读取.
        while ((line=in.readLine())!=null) {
            line = line.trim();
            if (line.length()==0) {
                line = "\n\n";
            } else {
                line += " ";
            }
            // 调用requote方法。
            line = textstyle.getFont().requote(line, pdf.getLocale());
            // 开始将内容写进PDF文档。
            if (line.startsWith("Chapter ")) {
                if (chapternumber>0) {
                    System.out.println(new Date()+": Writing Chapter "+chapternumber);
                    writeChapter(chapter, chapternumber);
                }
                chapternumber++;
                chapter = new LayoutBox(WIDTH);
            }
            chapter.addText(line, textstyle, pdf.getLocale());
        }
        // 将最后一个段落写入PDF文档
        System.out.println(new Date()+": Writing Chapter "+chapternumber);
        writeChapter(chapter, chapternumber);
        System.out.println(new Date()+": Compressing and writing to file");
        OutputStream out = new FileOutputStream("C:\\BFO.pdf");
        pdf.render(out);
        out.close();
        // 显示操作PDF文档的总共时间。
        System.out.println("Total time was "+(System.currentTimeMillis()-starttime)+"ms");
    }
 
    private static void writeChapter(LayoutBox chapter, int chapternumber) {
        PDFPage page=null;
        boolean firstpage = true;
        float left;
        // 测量文本高度以前,必须清空缓存。
        chapter.flush();
        while (chapter!=null) {
            // 清空布局格式。
            LayoutBox next=null;
            if (chapter.getHeight() > HEIGHT) {
                next = chapter.splitAt(HEIGHT);
            }
            if (pagenum%2 == 1) {
                page = pdf.newPage(PAGESIZE);
                left = 50;
                // 写下页数。
                page.setStyle(numstyle);
                page.drawText("Page "+ pagenum, page.getWidth()/4, 30);
                page.drawText("Page "+ (pagenum+1), 3*page.getWidth()/4, 30);
            } else {
                 left = (page.getWidth()/2)+50;
            }
            page.drawLayoutBox(chapter, left, page.getHeight()-50);
            chapter = next;
            pagenum++;
            // 如果是第一页的话,添加一个书签。
            if (firstpage) {
                pdf.getBookmarks().add(new PDFBookmark("Chapter "+chapternumber, PDFAction.goTo(page)));
                firstpage = false;
            }
        }
        // 确定下一个段落应该写在剩下的页面。
        pagenum |= 1;
    }}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...