【发布时间】:2016-01-13 19:52:55
【问题描述】:
我有一个功能,可以在 PDF 中的一个字段顶部传递一个图章,以用作填充富文本字段。
public void FillRichTextField(AcroFields pdfForm, PdfStamper pdfStamper, string fieldName, string value)
{
System.Collections.Generic.IList<AcroFields.FieldPosition> pos = pdfForm.GetFieldPositions(fieldName);
//tell itextSharp to overlay this content
PdfContentByte contentByte = pdfStamper.GetOverContent(pos[0].page);
//create a new paragraph
Paragraph par = new Paragraph();
//parse html
var mh = new SampleHandler();
//Bind a reader to our text
using (TextReader sr = new StringReader(value))
{
//Parse
XMLWorkerHelper.GetInstance().ParseXHtml(mh, sr);
}
for (int k = 0; k < mh.elements.Count; k++)
{
par.Add((IElement)mh.elements[k]);
}
//create a ColumnText to hold the paragraph and set position to the position of the field
ColumnText ct = new ColumnText(contentByte);
ct.SetSimpleColumn(pos[0].position.Left, pos[0].position.Bottom, pos[0].position.Right, pos[0].position.Top);
ct.AddElement(par);
int status = ct.Go();
bool fits = !ColumnText.HasMoreText(status);
}
段落被截断,所以我想调整段落的大小/重新缩放以适应 ColumnText,似乎没有办法做到这一点。我无法启动新字体,因为该段落包含具有自己字体的富文本数据。我想我最好的选择是将段落转换为可缩放的图像,然后调整大小以适应?
或者如果有更好的方法来填充富文本字段,以便所有文本都符合所维护的样式,请告诉我。
【问题讨论】:
-
你说你填充富文本字段。对我来说,它看起来更像是您将文本标记到字段所在位置的常规页面内容上。填充字段通常涉及向字段本身及其小部件注释添加内容...
-
我改了语言,你是对的。我将文本标记到富文本字段上,因为我认为没有更好的方法来填充富文本字段。让我知道我是否错了。感谢您指出这一点。
-
我认为没有更好的方法来填充富文本字段。 - 理论上应该有,但我还没有认真处理这项任务。话虽如此,如果填写的方式适合您,您可以缩放坐标系以使其适合。从本质上讲,您已经保留了一个带有富文本字段的区域,并希望使一些富文本内容适合该区域,对吗?
-
是的,区域已定义,富文本内容只是盖在上面的一个印章。我想我的问题是如何缩放邮票字段
-
好的,我想试试。你能分享一个示例 PDF(通过谷歌驱动器或投递箱公共共享)和富文本字符串
value(大到足以导致问题)吗?
标签: java c# pdf itextsharp itext