Ben*_*Ben 6 .net c# pdf fonts itextsharp
我不确定这是可能的,但我认为值得一提.我已经弄清楚如何使用pdfstamper和acrofields方法设置一个formfield的字体,但我真的希望能够在同一个字段中设置文本的不同部分的字体.这是我如何设置当前表单字段的字体:
// 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();
Run Code Online (Sandbox Code Playgroud)
我想在上面设置文本的地方做的是将"This:"设置为粗体,并将"将在场中显示"非粗体.我不确定这实际上是否可行,但我认为值得一提,因为它对我目前的工作非常有帮助.
提前致谢!
是的,有点.PDF字段可以具有富文本值(自acrobat 6/pdf1.5起)以及常规值.
常规值使用默认外观中定义的字体...单个字体.
富值格式(iText不直接支持,至少尚未支持),在PDF参考的第12.7.3.4节中描述. <b>, <i>, <p>
,以及相当多的css2文本属性.它需要具有各种属性.
要启用丰富的值,您必须PdfName.FF
为文本字段设置字段flags()的第26位.PdfFormField没有"setRichValue",但它们是字典,所以你可以:
myPdfFormField.put(PdfName.RV, new PdfString( richTextValue ) );
Run Code Online (Sandbox Code Playgroud)
如果您尝试将富文本添加到尚不支持它的现有字段:
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);
Run Code Online (Sandbox Code Playgroud)
当我输入此消息时,我实际上是在向iText(不是尖锐的)添加富文本支持.Hurray为SO的贡献者.Paulo最近保持了iTextSharp的同步,所以这应该不是问题.下一个trunk版本应具有此功能...所以你可以写:
myPdfFormField.setFieldFlags( PdfFormField.FF_RICHTEXT );
myPdfFormField.setRichValue( richTextValue );
Run Code Online (Sandbox Code Playgroud)
要么
// note that this will fail unless the rich flag is set
acroFields.setFieldRichValue( richTextValue );
Run Code Online (Sandbox Code Playgroud)
注意:iText的外观生成尚未更新,只是价值方面.这将需要更多的工作.因此acroFields.setGenerateAppearances(false)
,当表单打开时,您需要或让JS重置字段值,以强制Acrobat/Reader为您构建外观[s].
归档时间: |
|
查看次数: |
14440 次 |
最近记录: |