在itextSharp中设置AcroField文本颜色

时间:2014-11-21 08:40:15

标签: itextsharp

我正在使用iTextSharp 5.5.3我有一个带有命名字段的PDF我使用Adobe生命周期创建我能够使用iTextSharp填充字段但是当我更改字段的textcolor时它不会改变。我真的不知道为什么会这样。这是我的代码

        form.SetField("name", "Michael Okpara");
        form.SetField("session", "2014/2015");
        form.SetField("term", "1st Term");

        form.SetFieldProperty("name", "textcolor", BaseColor.RED, null);
        form.RegenerateField("name");

2 个答案:

答案 0 :(得分:2)

如果您的表单是使用Adobe LifeCycle创建的,那么有两个选项:

  • 您有一个纯XFA表单。 XFA代表XML Forms Architecture,您的PDF只不过是XML流的容器。文档中几乎没有PDF语法,也没有AcroForm字段。我不认为是这种情况,因为你仍然可以填写字段(如果你有一个纯XFA表单,这将无法工作)。
  • 您有混合表单。在这种情况下,表单在PDF文件中描述两次:一次使用XML流(XFA),一次使用PDF语法(AcroForm)。 iText将填写两个描述中的字段,但在呈现文档时XFA描述会受到偏好。更改字段(或其他属性)的颜色需要更改XML,iText(夏普)不能这样做。

如果我可以做出有根据的猜测,我会说你有一个混合形式,你只是改变了AcroForm字段的文本颜色而没有改变XFA字段中的文本颜色(这真的很难实现)

请尝试添加此行:

form.RemoveXfa();

这将删除XFA流,从而生成仅保留AcroForm描述的表单。

我使用您共享的表单来编写一个名为RemoveXFA的小示例来演示这一点。这是该示例的C#/ iTextSharp版本:

public void ManipulatePdf(String src, String dest)
{
    PdfReader reader = new PdfReader(src);
    PdfStamper stamper = new PdfStamper(reader, new FileStream(dest, FileMode.Create));
    AcroFields form = stamper.AcroFields;
    form.RemoveXfa();
    IDictionary<String, AcroFields.Item> fields = form.Fields;
    foreach (String name in fields.Keys)
    {
        if (name.IndexOf("Total") > 0)
            form.SetFieldProperty(name, "textcolor", BaseColor.RED, null);
        form.SetField(name, "X");
    }
    stamper.Close();
    reader.Close();
}

在此示例中,我删除了XFA流,并查看了所有剩余的AcroField。我使用单词&#34; Total&#34;更改所有字段的文本颜色。在他们的名字中,我用&#34; X&#34;。

填写每个字段

结果如下所示:reportcard.pdf

enter image description here

所有字段都显示字母&#34; X&#34;,但TOTAL列中的字段以红色显示。

答案 1 :(得分:0)

我终于找到了一种方法,猜测问题来自于使用Adobe LC,所以我切换到Open Office它都工作但是当我压扁表格时,一切都消失了。我找到了ITextSharp PDFTemplate FormFlattening removes filled data

的解决方案

感谢Lowagie先生的帮助