在 acro 文本字段位置显示图像
Showing image on a acro text field position
我有一个 PDF 文档,其中包含已共享给客户的宏文本字段。现在客户想要在其中一个文本字段中插入签名图像。我的经理让我尝试一种方法来实现 same.My 想法是替换文本字段位置顶部的图像并将文本字段调整为图像大小。
为了将 pdf 的 acro 文本字段替换为图像,我正在尝试如下
1.Finding the text field by its field id
String position = null;
List<FieldPosition> fieldPositons = form.getFieldPositions("50106");
for (FieldPosition position :fieldPositons) {
this.position = position.position;
}
2. Setting the image into that position of text field
Image image = Image.getInstance("ImageFileName");
Float dimensions = position.split("x");
image.setAbsolutePosition(dimensions[0], dimensions[1]);
content.addImage(image);
根据给定的图像宽度和高度,我需要更改 acro 文本字段的宽度和高度。
任何人都可以尝试如下,我的逻辑是否适用于 itext pdf 库。让我知道是否有任何想法用图像
替换 acro 文本字段
更改 AcroField 的尺寸绝不是一个好主意,因为 PDF 中的所有内容都是在绝对位置添加的。当您更改字段的维度时,您可能会面临与其他内容重叠的风险。
因此,您最好的选择是使图像的大小适应 AcroField 的大小。正如您已经指出的那样,您可以获得这样的字段位置:
AcroFields.FieldPosition f = form.GetFieldPositions("50106")[0];
请注意,将其设为 string
并不是一个好主意。您可以像这样使用 FieldPosition
对象:
int page = f.page;
Rectangle rect = f.position;
您可以像这样缩放和定位图像:
Image image = Image.getInstance("ImageFileName");
image.ScaleToFit(rect.Width, rect.Height);
image.SetAbsolutePosition(rect.Left, rect.Bottom);
ScaleToFit()
方法将以适合表单域尺寸的方式缩放图像,尊重图像的原始纵横比(您不想添加 拉伸图像)。
您需要 page
变量才能将图像添加到正确的页面:
PdfContentByte canvas = stamper.GetOverContent(page);
canvas.AddImage(image);
重要提示:
- 如果您按上述方式添加图像,则需要删除该字段(如果您展平 表单,这会自动发生)。
- 如果表单域是一个按钮,那么你不应该使用上面的代码。相反,您应该替换按钮的图标。这在我对问题的回答中有所描述 How to change a Button Icon of a PDF Formular with itextsharp? 这个答案解释了做你想做的事情的标准方法,但它要求你要添加图像的字段是一个按钮字段(并且基于关于你的问题,它似乎是一个文本字段。
我有一个 PDF 文档,其中包含已共享给客户的宏文本字段。现在客户想要在其中一个文本字段中插入签名图像。我的经理让我尝试一种方法来实现 same.My 想法是替换文本字段位置顶部的图像并将文本字段调整为图像大小。
为了将 pdf 的 acro 文本字段替换为图像,我正在尝试如下
1.Finding the text field by its field id
String position = null;
List<FieldPosition> fieldPositons = form.getFieldPositions("50106");
for (FieldPosition position :fieldPositons) {
this.position = position.position;
}
2. Setting the image into that position of text field
Image image = Image.getInstance("ImageFileName");
Float dimensions = position.split("x");
image.setAbsolutePosition(dimensions[0], dimensions[1]);
content.addImage(image);
根据给定的图像宽度和高度,我需要更改 acro 文本字段的宽度和高度。
任何人都可以尝试如下,我的逻辑是否适用于 itext pdf 库。让我知道是否有任何想法用图像
替换 acro 文本字段更改 AcroField 的尺寸绝不是一个好主意,因为 PDF 中的所有内容都是在绝对位置添加的。当您更改字段的维度时,您可能会面临与其他内容重叠的风险。
因此,您最好的选择是使图像的大小适应 AcroField 的大小。正如您已经指出的那样,您可以获得这样的字段位置:
AcroFields.FieldPosition f = form.GetFieldPositions("50106")[0];
请注意,将其设为 string
并不是一个好主意。您可以像这样使用 FieldPosition
对象:
int page = f.page;
Rectangle rect = f.position;
您可以像这样缩放和定位图像:
Image image = Image.getInstance("ImageFileName");
image.ScaleToFit(rect.Width, rect.Height);
image.SetAbsolutePosition(rect.Left, rect.Bottom);
ScaleToFit()
方法将以适合表单域尺寸的方式缩放图像,尊重图像的原始纵横比(您不想添加 拉伸图像)。
您需要 page
变量才能将图像添加到正确的页面:
PdfContentByte canvas = stamper.GetOverContent(page);
canvas.AddImage(image);
重要提示:
- 如果您按上述方式添加图像,则需要删除该字段(如果您展平 表单,这会自动发生)。
- 如果表单域是一个按钮,那么你不应该使用上面的代码。相反,您应该替换按钮的图标。这在我对问题的回答中有所描述 How to change a Button Icon of a PDF Formular with itextsharp? 这个答案解释了做你想做的事情的标准方法,但它要求你要添加图像的字段是一个按钮字段(并且基于关于你的问题,它似乎是一个文本字段。