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