iText学习(一)

一、使用iText五步创建pdf文档

  1、 在项目中导入iText5.0.6.jar以及iTextAsian.jar(亚洲字符处理包),然后通过五步既可以创建我们的第一个pdf文档

public class First {
	public static void main(String[] args)throws Exception {
		Document doc = new Document();
		PdfWriter.getInstance(doc, new FileOutputStream("d:\\first.pdf"));
		doc.open();
		doc.add(new Phrase("hello world"));
		doc.close();
	}
}

2、 使用iText构建pdf首当其冲的类就是Document类, Document类我们可以理解为一个容器。


 3、Document 有三个构造函数:

public Document();
public Document(Rectangle pageSize);
public Document(Rectangle pageSize, float marginLeft, float marginRight, float marginTop, float marginBottom);

 如果调用的Document的无参构造器创建的页面大小就是A4,页边距全是36pt。默认的字体为Helvetica,字体大小12pt,但还是建议显示的设置页面大小和页边距。

 

   当然,当你设定好了pdf文档的边距对于页面尺寸后,可以对文档的边距与页面大小进行改变,但是他不会影响当前页,而是从下一个新页面开始起作用。

   注意:

         页边距在文档双面打印的时候要注意一些细节:如果文档要装订成册,那么我们就会希望在装订的一边设置大一点的页边距,

         比如说平常的书左边装订,那么第一页的左边距要大一点,而第二页的右边距要和第一页的左边距一样。总而言之页边距要对称。

         这些在iText中可以这样设置:

        

document.SetPageSize(PageSize.A5);
document.SetMargins(36, 72, 108, 180);
document.SetMarginMirroring(true);//设置外边距的反射效果为true
        这样设置页面的左边距和右边距就对称了。


      但还有一些书是在页面的上部或者下部装订,因此就需要页面的上边距和下边距对称

document.setMargins(180, 72, 108, 72);
document.setMarginMirroringTopBottom(true);

 4、关于pdf中度量单位的问题

        在pdf中度量单位是用户单位(user unit)。换算的公式是 1英寸=25.4mm=72 user units≈72pt(磅);

        在iText中,默认的度量单位是pt不是user uint。因为pt和user unit基本上是相等的;

        一般来讲,我们生成pdf文档是都会选用一些标准页面大小。为了方便生成标准页面大小,iText中提供一个PageSize类,

        其中包含了大量标准页面大小,有B0到B10,A0到A10还有美国的标准页面:LETTER,LEGAL等。因此我们可以使用他来设置Document的页面大小。

        如果你不喜欢来在不同单位中进行计算的话,iText中提供了一个Utilities静态类中的一些帮助我们在不同单位间切换(英寸、毫米)
       

static float millimetersToInches(float value) ;
....
 5、向Document中添加内容的方式:

        一种是:添加高级类,如:Chunk Pharse Paragraph类等,添加使用document.add(Element ele);

        二种是:直接使用PdfWriter实例进行低级操作来添加数据。

       获取PdfWriter的实例

 PdfWriter weriter = PdfWriter.getInstance(document, new FileStream(fileName, FileMode.Create));

  6、 关闭Document

        在关闭Document的时候,设置的输出流也会被自动关闭,但有时候我们希望输出流不被自动关闭。

         如,我们需要将多个生成的pdf进行打包成zip文件,那要如何做呢?

         只要设置PdfWriter的ClosedStream属性为true即可。

    

ZipOutputStream zip = new ZipOutputStream(new FileStream(fileName, FileMode.Create));
for (int i = 0; i < 4; i++){
  ZipEntry entry = new ZipEntry("hello_" + i + ".pdf");
  zip.PutNextEntry(entry);
  Document document= new Document();
  PdfWriter writer = PdfWriter.getInstance(document, zip);
  writer.setCloseStream(false);
  document.open();
  document.add(new Paragraph("Hello " + i));
  document.close();
  zip.closeEntry();
}
  zip.close();  
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值