用户注册



邮箱:

密码:

用户登录


邮箱:

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

发表随想


还能输入: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、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

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

加载中,请稍后...