2

我正在使用 Flyingsaucer 生成 PDF。我正在尝试通过实现 ReplacedElementFactory 将图像嵌入到 pdf 中。我可以生成替换为图像的pdf。没问题。

但我想要的是在类中动态设置图像的高度和宽度。我需要将图像缩放到确定的大小。我将找到图像的新缩放高度和宽度,并希望为嵌入的图像设置这些比例。

我可以在从 BlockBox 获取的元素中添加样式属性并更新此元素吗?这行得通吗?我尝试使用 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