2010-12-04 14 views
1

absoluteX = 10f、絶対y = rectangle.getLeft()+(rectangle.getWidth())の間にイメージをウォーターマークとして絶対位置に追加しようとすると、 -image.getPlainWidth());iTextでページサイズが変化するPDFファイルに透かしを挿入する際の問題

一部のページサイズでは、absoluteX = 10fでイメージが追加されず、300f以上に増やす必要があります。左の絶対位置を正しく取り出す方法。

+0

問題はどのページングですか? – Jes

答えて

0

ページのクロップボックスをチェックして、それに関連してテキストを配置する必要があります。また、左下隅は0,0でなくてもよく、ページは回転できるであることに注意してください。

私は風景のページは三つの方法生成さ見てきました

11 "x8.5"(幸い、私は見たことがない270度

@ 90度 8.5×11 @

8.5×11を

"ポートレート"ページは、8.5インチx11インチ(または測定値が何であれ)で一般的に生成されています。 PDFを使って10年以上経っても、私は回転した肖像画のページをまだ見ていません。法的だがばかだ。私は頻繁に私がするためにかなりにより、ページサイズを爆破する必要が見つけ

final double TOP_OFFSET = 10.0 + IMAGE_HEIGHT; // or whatever 
final double RIGHT_OFFSET = 15.0 + IMAGE_WIDTH; 

PdfReader reader = new PdfReader(path); 
PdfStamper stamper = new PdfStamper(reader, outStream); 

Rectangle cropBox = reader.getCropBox(1); 
int rotation = reader.getPageRotation(1); 
PdfContentByte content = stamper.getOverContent(1); // first page 

AffineTransform transform; 
double xOffset, yOffset; 
switch(rotation) { 
    case 0: 
    xOffset = cropBox.getRight() - RIGHT_OFFSET; 
    yOffset = cropBox.getTop() - TOP_OFFSET; 
    transform = AffineTransform.getTranslateInstance(xOffset, yOffset); 
    break; 
    case 90: 
    // some other transformations here 
    break; 
    case 180: 
    // and here 
    break; 
    case 270: 
    // and here. 
    break; 
}; 

content.transform(transform); 
content.addImage(waterMarkImage); 

stamper.close(); 

だから、あなたの正しいバウンディングボックスを取得し、所定の位置にテキストを回転させるために、次のようなものが必要だろう私の変容でどこが間違っているのかを調べる。メディアボックスの各罫線に+1000と言ってください(存在する場合は作物)。今

PdfDictionary pageDict = reader.getPageN(1); 
PdfArray boxes[] = {pageDict.getAsArray(PdfName.MEDIABOX), pageDict.getAsArray(PdfName.CROPBOX) }; 
float mods[] = {-1000, -1000, 1000, 1000 } 
for (int i = 0; i < boxes.length; ++i) { 
    if (boxes[i] == null) 
    continue; // crop boxes are optional 
    for (int j = 0; j < 4; ++j) { 
    PdfNumber curVal = boxes[i].getAsNumber(j); 
    PdfNumber newVal = curVal.getFloat() + mods[j]; 
    boxes[i].set(j, newVal); 
    } 
} 

、あなたの変換を(私は必然的に行う)台無しにするとき、あなたは台無しにする方法を参照してください、そしてそれを修正することができるでしょう。

関連する問題