- PR -

PDFの変更が反映されない。

投稿者投稿内容
サキ
会議室デビュー日: 2006/10/10
投稿数: 6
投稿日時: 2006-10-10 10:38
こんにちは。お世話になります。

iTextを使用して既存PDFファイルの角度や大きさを変更し、新しいPDFファイルを作成するサーブレットを作っています。
しかし、下記の現象が起きて困っています。
・PDFファイルを適当にAcrbatで作成する。(この時のPDFファイルをAとする)
 ⇒そのファイルをAcrbatで編集し、保存する。(回転させたり、画像を貼り付けた
り、色を変えたり)(この時のファイルをBとする)
 ⇒ファイルBを既存PDFファイルとしてサーブレットで縦横50%に縮小して新しいPDFフ
ァイルを作成する。
 ⇒新しいPDFファイルをAcrbatで表示させる。
 ⇒ファイルAを50%に縮小させたPDFファイルが表示され、Acrbatで編集したファイルB
が反映されていない。

Windows XP Professional Version2002 SP2
j2sdk1.4.2_10
Adobe Acrbat 7.0 Professional
itext-1.4.5.jar

サーブレットのソースは次の通りです。

コード:
--------------------------------------------------------------------------------

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import com.lowagie.text.*;
import com.lowagie.text.pdf.*;

public class PDF {

/**
* @param args
*/
public static void main(String[] args) {
try {
// step 1: creation of a document-object
//documentオブジェクトの作成
Document document = new Document();
// step 2: we create a writer that listens to the document
//出力PDFオブジェクトの作成(出力PDFのファイル名の指定)
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:/NewPdf.pdf"));
// step 3: we open the document
//documentオブジェクトの作業開始
document.open();
// step 4: we add content
PdfContentByte cb = writer.getDirectContent();

String imagePDFfilename = "C:/OldPdf.pdf";
PdfReader reader = new PdfReader(imagePDFfilename);
PdfImportedPage page2 = writer.getImportedPage(reader, 1);
cb.addTemplate(page2,0.5f,0,0,0.5f,0,0);

// step 5: we close the document
//documentオブジェクトの作業終了
document.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

--------------------------------------------------------------------------------

何かお分かりになりましたら
ご教授よろしくお願いいたします。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2006-10-10 12:51
キャッシュが悪さしていないかどうか確認してみてください。

キャッシュは
サーバー上、
プロキシーサーバー上(使用している場合)、
クライアント(ウェブブラウザ)
で行われています。
サキ
会議室デビュー日: 2006/10/10
投稿数: 6
投稿日時: 2006-10-10 14:22
かずくんさん、書き込みありがとうございます。
キャッシュが悪さしていないかどうか、クライアント(ウェブブラウザ) のキャッシュをクリアし、確認しましたがダメでした。

他にも調査した結果、
「PdfWriterは、スクラッチから文書を生成するものですが、ほかのPDF文書からインポ ートしたページについてもサポートしています。
 しかし、PdfWriterを使うと、PdfImportedPage の対話機能(注釈、しおり、フィール ドなど)が処理中に失われるという大きな欠点があります。」
と、iText.NET(.NET) に記述がありました。

iTextには、PdfWriter以外に既存のPDFファイルを縮小、回転して新しいPDFファイルを作成する方法は存在しないのでしょうか?

iTextにお詳しい方、ご教授よろしくお願いいたします。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2006-10-10 14:35
引用:

サキさんの書き込み (2006-10-10 14:22) より:
キャッシュが悪さしていないかどうか、クライアント(ウェブブラウザ) のキャッシュをクリアし、確認しましたがダメでした。


これは、ブラウザのキャッシュを破棄しただけ。

サーバーのキャッシュ制御がどうなってるかを確認しなきゃいけない。
通常は、HTTPレスポンスのヘッダに、キャッシュ制御を記述します。
ここがどうなってるか確認してみてください(Servletでどう記述するかはわからないので、明確な回答はできない)。

HTTPのキャッシュ制御についてはRFC 2068に記述されています。

追加
@ITのサイト内にも、キャッシュに関する解説記事があったはず。

[ メッセージ編集済み 編集者: かずくん 編集日時 2006-10-10 14:36 ]
サキ
会議室デビュー日: 2006/10/10
投稿数: 6
投稿日時: 2006-10-10 15:14
かずくんさん>
記述していませんでしたが、このサーブレットをローカルPCのEclipseでデバッグしても、同じ現象が起きます。
サーブレットの内容は上記に記述したソースコードだけです。
キャッシュに関してはあまり詳しくないのですが、ローカルPC内の場合でもHTTPのキャッシュ制御が関係するのでしょうか?
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2006-10-10 15:53
引用:

サキさんの書き込み (2006-10-10 15:14) より:

キャッシュに関してはあまり詳しくないのですが、ローカルPC内の場合でもHTTPのキャッシュ制御が関係するのでしょうか?


eclipsがどう処理するのかはわからないが、基本的にローカルだろうが、リモートサーバーだろうが関係なく、キャッシュ制御しないとダメだと思う。

キャッシュ制御の結果を反映させるかどうかは、最終的にUA(ブラウザ)が判断することだから。

ただ、今回の件がキャッシュされたことが原因かどうかは、わかりません。
わき道をただがむしゃらに進んでいるだけかもしれません。あしからず。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-10-10 16:14
最初の書き込みにいろいろ疑問があるので、まずは確認。

引用:

サキさんの書き込み (2006-10-10 10:38) より:
・PDFファイルを適当にAcrbatで作成する。(この時のPDFファイルをAとする)


このAというのはソースでいうとOldPdf.pdfのことですか?

引用:

 ⇒そのファイルをAcrbatで編集し、保存する。(回転させたり、画像を貼り付けた
り、色を変えたり)(この時のファイルをBとする)


このBというのはソースでいうとNewPdf.pdfのことですか? それとも、

引用:

 ⇒ファイルBを既存PDFファイルとしてサーブレットで縦横50%に縮小して新しいPDFフ
ァイルを作成する。


こっち?

引用:

 ⇒新しいPDFファイルをAcrbatで表示させる。


どうやって? ブラウザから?

引用:

サーブレットのソースは次の通りです。


どこにもサーブレットのソースがないようですが。
サキ
会議室デビュー日: 2006/10/10
投稿数: 6
投稿日時: 2006-10-10 16:57
ukさん>
引用:

・PDFファイルを適当にAcrbatで作成する。(この時のPDFファイルをAとする)

 ⇒そのファイルをAcrbatで編集し、保存する。(回転させたり、画像を貼り付けた
り、色を変えたり)(この時のファイルをBとする)

 ⇒ファイルBを既存PDFファイルとしてサーブレットで縦横50%に縮小して新しいPDFフ
ァイルを作成する。



ファイルBはソースで言うとOldPdf.pdfです。
(元々はファイルAがOldPdf.pdfと言うファイル名で、これをAcrbatで編集し、上書き保存しました)
新しいPDFファイルがソースで言うとNewPdf.pdfです。
引用:

 ⇒新しいPDFファイルをAcrbatで表示させる。
 どうやって? ブラウザから?


Cドライブに作成されたNewPdf.pdfをクリックしてAcrbatで開きます。

引用:

サーブレットのソースは次の通りです。
どこにもサーブレットのソースがないようですが。


上記のソースコードをPDF.javaとして、ローカルPCのEclipseで実行しました。

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