gpt4 book ai didi

c# - 使用 iTextSharp 将表单字段的不同部分设置为具有不同的字体

转载 作者:太空狗 更新时间:2023-10-29 21:25:02 25 4
gpt4 key购买 nike

我不确定这是否可能,但我认为值得一问。我已经弄清楚如何使用 pdfstamper 和 acrofields 方法设置表单域的字体,但我真的很想能够在同一字段中设置文本不同部分的字体。以下是我目前如何设置表单字段的字体:

            // Use iTextSharp PDF Reader, to get the fields and send to the 
//Stamper to set the fields in the document
PdfReader pdfReader = new PdfReader(fileName);

// Initialize Stamper (ms is a MemoryStream object)
PdfStamper pdfStamper = new PdfStamper(pdfReader, ms);

// Get Reference to PDF Document Fields
AcroFields pdfFormFields = pdfStamper.AcroFields;

//create a bold font
iTextSharp.text.Font bold = FontFactory.GetFont(FontFactory.COURIER, 8f, iTextSharp.text.Font.BOLD);

//set the field to bold
pdfFormFields.SetFieldProperty(nameOfField, "textfont", bold.BaseFont, null);

//set the text of the form field
pdfFormFields.SetField(nameOfField, "This: Will Be Displayed In The Field");

// Set the flattening flag to false, so the document can continue to be edited
pdfStamper.FormFlattening = true;

// close the pdf stamper
pdfStamper.Close();

我希望能够在上面设置文本的地方将“This:”设置为粗体,并将“Will Be Displayed In The Field”保留为非粗体。我不确定这是否真的可行,但我认为这值得一问,因为它对我目前的工作确实有帮助。

提前致谢!

最佳答案

是的,有点。 PDF 字段可以具有富文本值(自 acrobat 6/pdf1.5 起)以及常规值。

常规值使用默认外观中定义的字体……单一字体。

富值格式(iText 不直接支持,至少现在不支持)在 PDF Reference 的第 12.7.3.4 章中有描述。 . <b>, <i>, <p> ,以及相当多的 css2 文本属性。它需要具有各种属性。

要启用丰富的值,您必须为文本字段设置字段标志 (PdfName.FF) 的第 26 位。 PdfFormField 没有“setRichValue”,但它们是字典,因此您可以:

myPdfFormField.put(PdfName.RV, new PdfString( richTextValue ) );

如果您尝试将富文本添加到尚不支持的现有字段:

AcroFields fields = stamper.getAcroFields();

AcroFields.Item fldItem = fields.getFieldItem(fldName);
PdfDictionary mergedDict = item.getMerged(0);
int flagVal = mergedDict.getAsNumber(PdfName.FF).intValue();
flagVal |= (1 << 26);

int writeFlags = AcroFields.Item.WRITE_MERGED | AcroFields.Item.WRITE_VALUE;
fldItem.writeToAll(PdfName.FF, new PdfNumber(flagVal), writeFlags);
fldItem.writeToAll(PdfName.RV, new PdfString(richTextValue), writeFlags);

我实际上是在输入此消息时向 iText(不清晰)添加富文本支持。为 SO 的贡献者欢呼。 Paulo 最近在保持 iTextSharp 同步方面做得很好,所以这应该不是问题。下一个主干版本应该有这个功能......所以你可以写:

myPdfFormField.setFieldFlags( PdfFormField.FF_RICHTEXT );
myPdfFormField.setRichValue( richTextValue );

// note that this will fail unless the rich flag is set
acroFields.setFieldRichValue( richTextValue );

注意:iText 的外观生成尚未更新,只是事物的值(value)方面。这将需要更多的工作。所以你会想 acroFields.setGenerateAppearances(false)或者让 JS 在打开表单时重置字段值以强制 Acrobat/Reader 为您构建外观。

关于c# - 使用 iTextSharp 将表单字段的不同部分设置为具有不同的字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4410895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com