iText学习(一)

来源:互联网 发布:西部数码域名转移管理 编辑:程序博客网 时间:2024/05/02 04:31

一、使用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();  
  

0 0
原创粉丝点击