- - PR -
PDFの変更が反映されない。
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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(); } } } -------------------------------------------------------------------------------- 何かお分かりになりましたら ご教授よろしくお願いいたします。 | ||||||||||||||||||||
|
投稿日時: 2006-10-10 12:51
キャッシュが悪さしていないかどうか確認してみてください。
キャッシュは サーバー上、 プロキシーサーバー上(使用している場合)、 クライアント(ウェブブラウザ) で行われています。 | ||||||||||||||||||||
|
投稿日時: 2006-10-10 14:22
かずくんさん、書き込みありがとうございます。
キャッシュが悪さしていないかどうか、クライアント(ウェブブラウザ) のキャッシュをクリアし、確認しましたがダメでした。 他にも調査した結果、 「PdfWriterは、スクラッチから文書を生成するものですが、ほかのPDF文書からインポ ートしたページについてもサポートしています。 しかし、PdfWriterを使うと、PdfImportedPage の対話機能(注釈、しおり、フィール ドなど)が処理中に失われるという大きな欠点があります。」 と、iText.NET(.NET) に記述がありました。 iTextには、PdfWriter以外に既存のPDFファイルを縮小、回転して新しいPDFファイルを作成する方法は存在しないのでしょうか? iTextにお詳しい方、ご教授よろしくお願いいたします。 | ||||||||||||||||||||
|
投稿日時: 2006-10-10 14:35
これは、ブラウザのキャッシュを破棄しただけ。 サーバーのキャッシュ制御がどうなってるかを確認しなきゃいけない。 通常は、HTTPレスポンスのヘッダに、キャッシュ制御を記述します。 ここがどうなってるか確認してみてください(Servletでどう記述するかはわからないので、明確な回答はできない)。 HTTPのキャッシュ制御についてはRFC 2068に記述されています。 追加 @ITのサイト内にも、キャッシュに関する解説記事があったはず。 [ メッセージ編集済み 編集者: かずくん 編集日時 2006-10-10 14:36 ] | ||||||||||||||||||||
|
投稿日時: 2006-10-10 15:14
かずくんさん>
記述していませんでしたが、このサーブレットをローカルPCのEclipseでデバッグしても、同じ現象が起きます。 サーブレットの内容は上記に記述したソースコードだけです。 キャッシュに関してはあまり詳しくないのですが、ローカルPC内の場合でもHTTPのキャッシュ制御が関係するのでしょうか? | ||||||||||||||||||||
|
投稿日時: 2006-10-10 15:53
eclipsがどう処理するのかはわからないが、基本的にローカルだろうが、リモートサーバーだろうが関係なく、キャッシュ制御しないとダメだと思う。 キャッシュ制御の結果を反映させるかどうかは、最終的にUA(ブラウザ)が判断することだから。 ただ、今回の件がキャッシュされたことが原因かどうかは、わかりません。 わき道をただがむしゃらに進んでいるだけかもしれません。あしからず。 | ||||||||||||||||||||
|
投稿日時: 2006-10-10 16:14
最初の書き込みにいろいろ疑問があるので、まずは確認。
このAというのはソースでいうとOldPdf.pdfのことですか?
このBというのはソースでいうとNewPdf.pdfのことですか? それとも、
こっち?
どうやって? ブラウザから?
どこにもサーブレットのソースがないようですが。 | ||||||||||||||||||||
|
投稿日時: 2006-10-10 16:57
ukさん>
ファイルBはソースで言うとOldPdf.pdfです。 (元々はファイルAがOldPdf.pdfと言うファイル名で、これをAcrbatで編集し、上書き保存しました) 新しいPDFファイルがソースで言うとNewPdf.pdfです。
Cドライブに作成されたNewPdf.pdfをクリックしてAcrbatで開きます。
上記のソースコードをPDF.javaとして、ローカルPCのEclipseで実行しました。 |