2

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();
    }

      ...........
      ...........
}
4

0 に答える 0