Flyingsaucer を使用して PDF を生成しています。ReplacedElementFactory を実装して、pdf に画像を埋め込もうとしています。画像に置き換えたpdfを生成できます。問題ない。
しかし、私が望んでいたのは、クラス内から動的に画像の高さと幅を設定することでした。画像を特定のサイズにスケーリングする必要があります。画像の新しいスケーリングされた高さと幅を見つけて、これらのスケールを埋め込まれた画像に設定したいと思います。
BlockBox から取得した Element に style 属性を追加して、この要素を更新できますか? これは機能しますか?blackBox.setElement を使用してみましたが、うまくいきません。
誰でも助けてもらえますか?
編集:
空飛ぶ円盤のグーグルグループのピーター・ブラントは、次のことを提案しました
ReplacedElement 実装で getIntrinsicHeight / getIntrinsicWidth をオーバーライドします。これらの値は、ピクセルではなくレンダリングの「ドット」になるため、適切にスケーリングする必要がある場合があることに注意してください。
しかし、残念ながら私にはうまくいきませんでした。空飛ぶ円盤の ReplaceElement をオーバーライドして、高さと幅を返しました。私にはうまくいきませんでした。試したサンプルコードはこちら
public class MyITextImageElement implements ITextReplacedElement
{
private final FSImage fsImage;
private float[] scaledWidthAndHeight = null;
public MyITextImageElement(FSImage image)
{
fsImage = image;
try
{
ITextFSImage itextFSImage = (ITextFSImage) image;
Image itextImage = itextFSImage.getImage();
byte[] imageByteArr = itextImage.getOriginalData();
//Getting scaled image height and width
scaledWidthAndHeight = getScaledWidthAndHeight(imageByteArr);
}
catch (Exception e)
{
//Exception Handling
}
}
@Override
public int getIntrinsicWidth()
{
if (scaledWidthAndHeight != null)
{
return Math.round(scaledWidthAndHeight[0]);
}
return fsImage.getWidth();
}
@Override
public int getIntrinsicHeight()
{
if (scaledWidthAndHeight != null)
{
return Math.round(scaledWidthAndHeight[1]);
}
return fsImage.getHeight();
}
...........
...........
}