2011-06-28 29 views
1

イメージ/イメージを動的に追加する必要がある既存のPDFがあります。イメージはファイルアップロードから得られます。ファイルをアップロードしたら、どのようにしてPDF上にイメージを配置するかを指定できます。 1つのコードスニペットが正しく動作しません。これは、任意の数のページでPDFを処理する必要があります。私が理解しているところから、絶対位置はPDFの最後のページの左下隅から設定されています。ページ1の左から30ピクセル、左から50ピクセルのイメージを表示する必要がある場合は、どうすればよいでしょうか?または、ページ2の左側から100pxの上端から50pxの画像を表示する必要がある場合は、ITextを使用して特定のx-y座標で画像をPDFに追加するにはどうすればよいですか?

http://rip747.wordpress.com/2009/03/26/add-an-image-dynamically-to-a-pdf-with-cf-and-itext/にあるコードを使用しようとしました。私は以下の私のニーズのためにそれを変更した:

<cfscript> 
    myLeft = 30; 
    myTop = 50; 
    myPageNum = 1; 

    // output buffer to write PDF 
    fileIO = createObject("java","java.io.FileOutputStream").init(myOutputPath); 

    // reader to read our PDF 
    reader = createObject("java","com.lowagie.text.pdf.PdfReader").init(mySourcePath); 

    // stamper so we can modify our existing PDF 
    stamper = createObject("java","com.lowagie.text.pdf.PdfStamper").init(reader, fileIO); 

    // get the content of our existing PDF 
    content = stamper.getOverContent(reader.getNumberOfPages()); 

    // create an image object so we can add our dynamic image to our PDF 
    image = createobject("java", "com.lowagie.text.Image"); 

    // initalize our image 
    img = image.getInstance(imgPath); 

    x = (reader.getPageSize(1).width() - img.scaledWidth()) - myLeft; 
    y = (reader.getPageSize(1).height() - img.scaledHeight()) - myTop; 

    // now we assign the position to our image 
    img.setAbsolutePosition(javacast("float", x), javacast("float", y)); 

    // add our image to the existing PDF 
    content.addImage(img); 

    // flattern our form so our values show 
    stamper.setFormFlattening(true); 

    // close the stamper and output our new PDF 
    stamper.close(); 

    // close the reader 
    reader.close(); 
</cfscript> 

上記のコードは、2ページの右上隅に私の画像を配置 - は50px左からトップ/ 30pxを形成します。

私は近くにいると知っています...私のニーズに合わせてこれを釘付けにする助けが必要です。

私のコードを更新しました。これは、2ページの左上隅に画像を取得する - 正しいポジショニングが、私は1ページにそれをしたい:

x = myLeft; 
y = (reader.getPageSize(1).height()) - img.scaledHeight() - myTop; 
私はページまでの画像を取得するために、1ページの高さを追加するために必要かもしれないと思った

私は、以下のオプションのいずれかをしようとすると1が、イメージが完全に消える:

// I figure I'll need something like this to handle multi-page docs 
y = (reader.getPageSize(1).height() * reader.getNumberOfPages()) - img.scaledHeight() - myTop; 

y = reader.getPageSize(1).height() + reader.getPageSize(1).height() - img.scaledHeight() - myTop; 
+0

あなたのpdfの「縦向き」の向きのみですか? IIRCでは、ランドスケープpdfを使用してローテーションを考慮する必要があります。また、常にfileIOを閉じるか、ファイルがロックされたままになることがあります。 (ヘンリーが言及したようにCF8にいないと仮定して) – Leigh

答えて

1

私は私の答えを見つけた:

ページ番号がcom.lowagie.text.pdf.PdfStamper.getOverContent()に設定する必要があります。

content = stamper.getOverContent(myPageNum); 

わかりやすかったです。

0

あなたはCF8 +を使用していますか?あなたはstamper.getOverContent(reader.getNumberOfPages());からあなたの "OverContent" を取得している

<cfpdf action="addWatermark" source="myPDF.pdf" image="myImage.jpg" 
     position="0,0" rotation="0" showOnPrint="true" opacity="10"> 
6

を使用することができます。 getOverContent()のパラメータはページ番号です。したがって、あなたのコードは、最初のページではなく最後のページのためにPdfContentByteになっています。

関連する問題