既存のPDFの縮小版を新しいPDFに面付けする2

package Chapter03StamUnder;

import java.io.FileOutputStream;
import java.io.IOException;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.CMYKColor;

public class StamUnder {
public static void main(String[] args) {
//A4で新しいドキュメントを作成
Document document = new Document(PageSize.A4);
try {
//既存PDFの読み込み
PdfReader reader = new PdfReader("C:\\java\\sample.pdf");
//作成するPDF
PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream("C:\\java\\CopyPageAsImage.pdf"));
//ドキュメントを開く
document.open();
//日本語フォント設定(英文だけならここは不要)
BaseFont bf = BaseFont.createFont("HeiseiKakuGo-W5","UniJIS-UCS2-HW-H",false);
Font font = new Font(bf,12);
//***最初のサムネイル:文字を追加する
document.add(new Paragraph("Chapter2 iTextとは",font));
//  1ページ目をインポートする
PdfImportedPage page = writer.getImportedPage(reader, 1);
//  Imageでラップ(変換)
Image image = Image.getInstance(page);
//  40%縮小
image.scalePercent(40f);
//  枠線をつける(付けないとページ枠が見えない)
image.setBorder(Rectangle.BOX);
//  枠線の太さ設定
image.setBorderWidth(3f);
//  枠線の色の設定
CMYKColor color1 =new CMYKColor(0,0,0,256);
image.setBorderColor(color1);
//  最後にImageをドキュメントに追加
document.add(image);
//***2番目のサムネイル:文字を追加する
document.add(new Paragraph("Chapter3 はじめてのiText",font));
//  6ページ目をインポートする
page = writer.getImportedPage(reader, 6);
//  Imageでラップ(変換)
image = Image.getInstance(page);
//  40%縮小
image.scalePercent(40f);
//  枠線をつける(付けないとページ枠が見えない)
image.setBorder(Rectangle.BOX);
//  枠線の太さ設定
image.setBorderWidth(3f);
//  枠線の色の設定
CMYKColor color2 =new CMYKColor(0,100,0,0);
image.setBorderColor(color2);
//  最後にImageをドキュメントに追加
document.add(image);
//***2番目のサムネイル:文字を追加する
document.add(new Paragraph("Chapter3 はじめてのiText",font));
//  6ページ目をインポートする
page = writer.getImportedPage(reader, 6);
//  Imageでラップ(変換)
image = Image.getInstance(page);
//  40%縮小
image.scalePercent(40f);
//  枠線をつける(付けないとページ枠が見えない)
image.setBorder(Rectangle.BOX);
//  枠線の太さ設定
image.setBorderWidth(3f);
//  枠線の色の設定
CMYKColor color3 =new CMYKColor(0,100,0,0);
image.setBorderColor(color3);
//  最後にImageをドキュメントに追加
document.add(image);
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
document.close();
}
}

既存のPDFの縮小版を新しいPDFに面付けする1

package Chapter03StamUnder;

import java.io.FileOutputStream;
import java.io.IOException;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfWriter;

public class StamUnder {
public static void main(String[] args) {
//A4で新しいドキュメントを作成
Document document = new Document(PageSize.A4);
try {
PdfReader reader = new PdfReader("C:\\java\\sample.pdf");
PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream("C:\\java\\CopyPageAsImage2.pdf"));
//ドキュメントを開く
document.open();
//PdfContentByteを取得する
PdfContentByte cb = writer.getDirectContent();
//インポートするページの入れ物PdfImportedPage
PdfImportedPage page;
//1ページ目をインポート
page = writer.getImportedPage(reader, 1);
cb.addTemplate(page, -0.5f, 0f, 0f, -0.5f, PageSize.A4.getWidth()/2, PageSize.A4.getHeight());
//2ページ目をインポート
page = writer.getImportedPage(reader, 2);
cb.addTemplate(page, 0.5f, 0f, 0f, 0.5f, 0f, 0f);
//3ページ目をインポート
page = writer.getImportedPage(reader, 3);
cb.addTemplate(page, 0.5f, 0f, 0f, 0.5f, PageSize.A4.getWidth()/2f, 0f);
//4ページ目をインポート
page = writer.getImportedPage(reader, 4);
cb.addTemplate(page, -0.5f, 0f, 0f, -0.5f, PageSize.A4.getWidth(), PageSize.A4.getHeight());
//点線を設定
cb.setLineDash(10, 5, 3);
//ページ左辺中央へ移動
cb.moveTo(0, PageSize.A4.getHeight()/2f);
//そのまま右へ直線描く
cb.lineTo(PageSize.A4.getWidth(), PageSize.A4.getHeight()/2f);
cb.stroke();
//ページ下辺中央へ移動
cb.moveTo(PageSize.A4.getWidth()/2f, 0);
//そのまま上へ直線描く
cb.lineTo(PageSize.A4.getWidth()/2f, PageSize.A4.getHeight());
cb.stroke();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
//ドキュメントをクローズ
document.close();
}
}

最初のページに1ページ追加し、後ろのページを縮小して貼付ける

package Chapter03StamUnder;

import java.io.FileOutputStream;
import java.io.IOException;

import com.itextpdf.text.DocumentException;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

public class StamUnder {
public static void main(String[] args) {
try {
PdfReader reader = new PdfReader("C:\\java\\sample.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("C:\\java\\CopyPage.pdf"));
//コピーしたページ
PdfImportedPage p;
//コピーしたページを貼り付けるための台紙のページを先頭に挿入する
stamper.insertPage(1, PageSize.A4);
//最上位層PdfContentByteを取得
PdfContentByte cb = stamper.getOverContent(1);
//2ページ目をコピーして張り付ける
p = stamper.getImportedPage(reader, 2);
cb.addTemplate(p, 0.4f, 0f, 0f, 0.4f, 36f, 450f);
//3ページ目をコピーして張り付ける
p = stamper.getImportedPage(reader, 3);
cb.addTemplate(p, 0.4f, 0f, 0f, 0.4f, 300f, 450f);
//4ページ目をコピーして張り付ける
p = stamper.getImportedPage(reader, 4);
cb.addTemplate(p, 0.4f, 0f, 0f, 0.4f, 36f, 36f);
//5ページ目をコピーして張り付ける
p = stamper.getImportedPage(reader, 5);
cb.addTemplate(p, 0.4f, 0f, 0f, 0.4f, 300f, 36f);
stamper.close();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
}

既存のPDFに新しいページを作って追加する

package Chapter03StamUnder;

import java.io.FileOutputStream;
import java.io.IOException;

import com.itextpdf.text.DocumentException;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

public class StamUnder {
public static void main(String[] args) {
try {
PdfReader reader = new PdfReader("C:\\java\\sample.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("C:\\java\\insertPage.pdf"));
//ページ追加
stamper.insertPage(1, PageSize.A4);//ページを追加するページ番号
//題名追加
BaseFont bf = BaseFont.createFont("HeiseiKakuGo-W5","UniJIS-UCS2-HW-H",false);
PdfContentByte cb = stamper.getOverContent(1);//文字を入れるページ番号
cb.beginText();
cb.setFontAndSize(bf, 36);
cb.setTextMatrix(200, 420);
cb.showText("iText入門");
cb.endText();
stamper.close();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
}

iTextでPDFに透かし画像をいれる

package Chapter03StamUnder;

import java.io.FileOutputStream;
import java.io.IOException;

import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

public class StamUnder {
public static void main(String[] args) {
try {
PdfReader reader = new PdfReader("C:\\java\\sample.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("C:\\java\\StampWatermark.pdf"));
//透かし画像
Image img = Image.getInstance("C:\\java\\image\\logo.jpg");
//透かしの位置決め
img.setAbsolutePosition(80, 420);
PdfContentByte under;
BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA,
BaseFont.WINANSI, BaseFont.NOT_EMBEDDED);
//総ページ数取得
int total = reader.getNumberOfPages() + 1;
//ページ数分だけ繰り返し、全ページを処理
for (int i = 1; i < total; i++) {
//アンダーコンテントを取得する
under = stamper.getUnderContent(i);
//透かし画像を追加する
under.addImage(img);
//ページ番号を追加する、フォント設定、位置設定
under.beginText();
under.setFontAndSize(bf, 12);
under.moveText(500, 810);
under.showText("page " + i + " of " + total);
under.endText();
}
stamper.close();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
}

フォームを付けたPDFに名前を入れる

package Chapter03FillAcroForm;

import java.io.FileOutputStream;
import java.io.IOException;

import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;


public class FillAcroForm {
public static void main(String args){
try{
PdfReader reader;
PdfStamper stamper;
AcroFields form;
String
names={"野村隆","斎藤雄三","中村美紀"};
for(int i=0;i<3;i++){
//PDFを読み込む
reader=new PdfReader("C:\\java\\form-sample.pdf");//AcroFormがあるform-sample.pdfを読み込むこと
//PdfStamper取得
stamper = new PdfStamper(reader,new FileOutputStream("C:\\java\\filled-sample"+i+".pdf"));
//AcroForm取得
form= stamper.getAcroFields();
//userフィールドに入力
form.setField("user",names[i]);
//クローズ
stamper.close();
}
}catch (IOException e){
e.printStackTrace();
}catch (DocumentException e){
e.printStackTrace();
}
}
}