- PR -

JavaでPDFのサイズ縮小を行いたい

1
投稿者投稿内容
ナカムラ
会議室デビュー日: 2004/03/21
投稿数: 12
投稿日時: 2004-09-30 00:24
お疲れ様です。中村です。

MSExcelやMSWordをPDF化したファイルに対し、
属性情報等を付加してPDFを再構築したいという要件がありまて試行錯誤しております。

当初はiTextを用いて属性情報を付加してやればいいのかなと、
安易に考えておりましたが、
この属性情報とやらがやたら多く(紙面の上部1/4&左サイド1/6を占めてしまう)、
印刷マージンではカバーできず、
A4で納めるにはどうしても元となるPDFのサイズを
縮小しなければならなくなってしましました。

iTextではPDFのサイズ縮小はサポートしておらず、
どうすればよいのか暗礁に乗り上げている次第です。


何か良策はないでしょうか?
ご教授願います。
c9katayama
常連さん
会議室デビュー日: 2003/02/04
投稿数: 38
投稿日時: 2004-10-05 22:53
こんにちは。
iTextでは縮小もサポートしています。

サンプルを書くとこんな感じです。

//入力ファイル取得
PdfReader reader = new PdfReader(Test.class.getResource("input.pdf"));
//出力先
File outputFile = new File("c:/output.pdf");
outputFile.createNewFile();
FileOutputStream fout = new FileOutputStream(outputFile);
Document document = new Document();
PdfWriter docWriter = PdfWriter.getInstance(document,fout);
document.open();

int pagenum = reader.getNumberOfPages();

for(int i = 1;i <= pagenum;i++){
document.newPage();
PdfImportedPage page = docWriter.getImportedPage(reader,i);
PdfContentByte cb = docWriter.getDirectContent();
int rotation = reader.getPageRotation(i);
if (rotation == 90 || rotation == 270)
cb.addTemplate(page, 0, -0.5f, 0.5f, 0, 0, reader.getPageSizeWithRotation(i).height());
else
cb.addTemplate(page, 0.5f, 0, 0, 0.5f, 0, 0);
}
document.close();
fout.flush();
fout.close();

このコードで、読み込んだPDFを縮小して新しいPDFに吐き出すことが
できます。

よかったらこちらも参考にして下さい。
http://dev105.souko105.net/index.php?%A1%DAiText%A1%DB%20PDF%B9%E7%C0%AE

[ メッセージ編集済み 編集者: c95029 編集日時 2004-10-19 13:00 ]
ナカムラ
会議室デビュー日: 2004/03/21
投稿数: 12
投稿日時: 2004-10-07 10:02
お疲れ様です。中村です。

PDF縮小の件ですが、iTextのjavadocを見ていて、
addTemplate()の配置指定以外の引数は何に使っているのだろう?と思っていました。
というか、使ってみろよ!ということですね。
どうもありがとうございます。

そこで、もう一つ技術的なことでお聞きしたいことがあります。
効率良く配置指定する方法はないでしょうか?
@ソースを書き換え
Aリビルド
Bアプリ実行(PDF作成)
CAcrobat Readerで配置のチェック
やはり、この@〜Cの繰り返しを行うべきなのでしょうか?

グリッド表示とかあったら嬉しいのですが・・・

以上です。よろしくお願いします。
c9katayama
常連さん
会議室デビュー日: 2003/02/04
投稿数: 38
投稿日時: 2004-10-07 22:05
グリッド表示、確かに欲しいですね・・・

私はディスプレイを2つ使って、片方ブラウザでPDF表示、片方開発ツールで
まず固定部分やFormでまかなえるところは極力Acrobatで作ってしまい、
どうしてもJavaコードが必要なところは
ソース書き換え>リビルド>実行>ブラウザリロード
という感じでセコセコやっています。

WebアプリでPDFを出しているのですが、さすがにサーバ再起動やっていては
身がもたないため、PDF生成の部分だけは単体で動くように設計して、デバック時は
Javaアプリケーションとして動かしてなるべく手返しよくやるようにしています。
まあここはさすがに市販のGUIツール付き製品に比べるとしんどい所ですが、
細かい芸ができるのでまあしょうがないかなと、思ったりしています。

参考になれば幸いです。ではでは。
1

スキルアップ/キャリアアップ(JOB@IT)