2012年12月6日木曜日

iText-ページの結合

PDFファイルの書かれている内容を奇数ページを一つのページの左側に偶数ページを右側に
置いてページ数を半分にするプログラムです。


package iTextTest;
import java.io.*;
import com.lowagie.text.*;
import com.lowagie.text.pdf.*;

public class IText202 {

public IText202() {
try {
// リーダオブジェクトを作成します
PdfReader reader = new PdfReader("d:/temp/pac.pdf");
// 総ページ数を取得します
int n = reader.getNumberOfPages();
// 最初のページのサイズを取得します
Rectangle psize = reader.getPageSize(1);
float width = psize.getHeight();
float height = psize.getWidth();

Document document = new Document(new Rectangle(width, height));
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("d:/temp/itext202.pdf"));
document.open();
// 内容を追加します
PdfContentByte cb = writer.getDirectContent();
int i = 0;
int p = 0;
while (i < n) {
document.newPage();
p++;
i++;
PdfImportedPage page1 = writer.getImportedPage(reader, i);
cb.addTemplate(page1, .5f, 0, 0, .5f, 60, 120);
if (i < n) {
i++;
PdfImportedPage page2 = writer.getImportedPage(reader, i);
cb.addTemplate(page2, .5f, 0, 0, .5f, width / 2 + 60, 120);
}
BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
cb.beginText();
cb.setFontAndSize(bf, 14);
cb.showTextAligned(PdfContentByte.ALIGN_CENTER,
"page " + p + " of " + ((n / 2) + (n % 2 > 0? 1 : 0)), width / 2, 40, 0);
cb.endText();
}
document.close();
}
catch (Exception de) {
de.printStackTrace();
}
}
public static void main(String[] args){
new IText202();
}
}

0 件のコメント:

コメントを投稿