[原]itext使用总结

一、什么是iText?

以下从iText的官网(http://itextpdf.com/)摘录介绍了iText:

What is iText?
If you look at PDF creation, you'll find that graphical designers use desktop applications such as Adobe Acrobat or Adobe InDesign to create a document in a manual or semi-manual process. In another context, PDF documents are created programmatically, using an API to produce PDFs directly from software applications, without or with minimal human intervention. Sometimes the document is created in an intermediary format first, and then converted to PDF. These different approaches demand different software products. The same goes for PDF manipulation. You can update a PDF manually in Adobe Acrobat, but there are also tools that allow forms to be filled out automatically based on information from a database.
iText is a tool that focuses on the automation side of things.

翻译如下:

如果您关注PDF作品,您会发现图形设计者用桌面应用程序,如Adobe Acrobat或Adobe InDesign,手工或半手工去生成一份文档。在另一个场合,PDF文档通过程序创建,直接从软件应用调用API来生成PDF文档,不需要或只需要很少的认为介入。有时,文档首先被创建为中间格式,然后再转换成PDF。不同的方式需要不同的软件产品。同样适用于PDF操作。你可以用Adobe Acrobat手工修改PDF,但也有一些工具允许将数据库中的信息自动写入到PDF中。iText就是这样一个工具。

 

二、库文件

从http://sourceforge.net/projects/itext/files/下载Java版(iText也支持C#)的JAR包:

iText-5.0.4.jar 核心库

iTextAsian.jar 资源库,包含亚洲字体资源。需要手工将该文件中的“com/lowagie/text”路径改为“com/itextpdf/text”

 

三、实例

import java.io.FileOutputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;

import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfWriter;

public class ITextTest{
    public static final float FONT_SIZE = 12f;
    public static void main(String args[]) throws Exception{
        BaseFont baseFont = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252,
                BaseFont.NOT_EMBEDDED);
        BaseFont simsunFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
                BaseFont.NOT_EMBEDDED);
   
        Document doc = new Document();
        PdfWriter writer = PdfWriter.getInstance(document,
                new FileOutputStream("c:/iTextTest.pdf"));
        document.open();
               
        PdfContentByte cb = writer.getDirectContent();
        cb.saveState();
       
        //......
       
        cb.restoreState();
       
        doc.close();
    }
   
    /**
     *
     * @param y
     * @return
     */
    public boolean checkOverflow(float y) {
        return y > CONTENT_BOTTOM;
    }

    /**
     *
     * @param doc
     * @param cb
     * @param statement
     * @param pageNum
     * @return
     * @throws Exception
     */
    private void dealWithOverflow(PdfContentByte cb)
            throws Exception {
        cb.restoreState();
        cb.getPdfDocument().newPage();
        cb.saveState();
    }

    /**
     * convert point to cm
     *
     * @param point
     * @return
     */
    public static float point2cm(float point) {
        return point / 72f * 2.54f;
    }

    /**
     * convert cm to point
     *
     * @param cm
     * @return
     */
    public static float cm2point(float cm) {
        return cm * 72f / 2.54f;
    }

    /**
     * convert a logic Y coordinate to a actual coordinate, unit is centimeter
     *
     * @param logic
     * @return
     */
    public static float toActualYCoordinate(float logic) {
        return PAGE_HEIGHT - logic;
    }

    /**
     * show text units of x and y are centimeter, fontSize's unit is point
     *
     * @param cb
     * @param text
     * @param x
     * @param y
     * @param font
     * @param fontSize
     */
    public static void showText(PdfContentByte cb, String text, float x,
            float y, BaseFont font, float fontSize) {
        cb.beginText();
        cb.setFontAndSize(font, fontSize);
        cb.moveText(cm2point(x), cm2point(toActualYCoordinate(y)));
        cb.showText(text);
        cb.endText();
    }

    /**
     * show text in indicated alignment units of x and y are centimeter,
     * fontSize's unit is point
     *
     * @param cb
     * @param alignment
     * @param text
     * @param x
     * @param y
     * @param font
     * @param fontSize
     */
    public static void showTextAligned(PdfContentByte cb, int alignment,
            String text, float x, float y, BaseFont font, float fontSize) {
        cb.beginText();
        cb.setFontAndSize(font, fontSize);
        cb.showTextAligned(alignment, text, cm2point(x),
                cm2point(toActualYCoordinate(y)), 0f);
        cb.endText();
    }

    /**
     * show line, units of fromX, fromY, toX and toY are centimeter, unit of
     * lineWidth is point
     *
     * @param cb
     * @param lineWidth
     * @param fromX
     * @param fromY
     * @param toX
     * @param toY
     */
    public static void showLine(PdfContentByte cb, float lineWidth,
            float fromX, float fromY, float toX, float toY) {
        cb.setLineWidth(lineWidth);
        cb.setLineDash(3, 0, 0);
        cb.moveTo(cm2point(fromX), cm2point(toActualYCoordinate(fromY)));
        cb.lineTo(cm2point(toX), cm2point(toActualYCoordinate(toY)));
        cb.closePathFillStroke();
    }

    /**
     * show dash line
     *
     * @param cb
     * @param lineWidth
     * @param unitsOn
     * @param unitsOff
     * @param fromX
     * @param fromY
     * @param toX
     * @param toY
     */
    public static void showDashLine(PdfContentByte cb, float lineWidth,
            float unitsOn, float unitsOff, float fromX, float fromY, float toX,
            float toY) {
        cb.setLineWidth(lineWidth);// 设置虚线大小
        cb.setLineDash(cm2point(unitsOn), cm2point(unitsOff), 0);

        cb.moveTo(cm2point(fromX), cm2point(fromY));
        cb.lineTo(cm2point(toX), cm2point(toY));

        cb.stroke();

    }

    /**
     *
     * @param d
     * @return
     */
    public static String double2String(double d) {
        String s = "0.00";

        DecimalFormat format = new DecimalFormat(NUMBER_FORMAT_PATTERN_1);
        s = format.format(d);

        return s;
    }

    /**
     *
     * @param month
     * @return
     */
    public static String month2String(Date month, String pattern) {
        String s = "";
        SimpleDateFormat format = new SimpleDateFormat(pattern);
        s = format.format(month);
        return s;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值