如何在iText 5中设置字体系列?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在iText 5中设置字体系列?相关的知识,希望对你有一定的参考价值。
我无法弄清楚如何使用iText 5在现有的pdf字段上设置字体系列。我发现这个问题的官方文档非常缺乏。
这是我试图调用这种字体的方式(我只想要Helvetica,它带有FontFactory库):
Font Helvetica = FontFactory.getFont("Helvetica");
form.setFieldProperty("Text Field 1", "textfont", "Helvetica", null);
当我运行上面的代码时,我收到控制台错误消息:
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to com.itextpdf.text.pdf.BaseFont
at com.itextpdf.text.pdf.AcroFields.setFieldProperty(AcroFields.java:1033)
at com.eb.anico.web.pdf.manipulatePdf(pdf.java:87)
at com.eb.anico.web.pdf.main(pdf.java:55)
我可以做其他的事情,比如制作一个多行的字段,使字段居中,并改变字体颜色。但改变字体系列仍然无法正常工作。这是我的完整代码:
package com.pathtopackage;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Font.FontFamily;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.AcroFields.Item;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.FontSelector;
import com.itextpdf.text.pdf.GrayColor;
import com.itextpdf.text.pdf.PdfAction;
import com.itextpdf.text.pdf.PdfArray;
import com.itextpdf.text.pdf.PdfDictionary;
import com.itextpdf.text.pdf.PdfFormField;
import com.itextpdf.text.pdf.PdfName;
import com.itextpdf.text.pdf.PdfNumber;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.PushbuttonField;
import com.itextpdf.text.pdf.TextField;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class pdf {
public static final String SRC = "src/resources/ads-horizontal-box-defined-size-single-line.pdf";
public static final String DEST = "src/resources/ads-horizontal-box-defined-size-single-line-STYLED-TXTSIZEAUTOACROBAT-7.pdf";
public static void main(String[] args) throws DocumentException, IOException {
File file = new File(DEST);
file.getParentFile().mkdirs();
new pdf().manipulatePdf(SRC, DEST);
}
public void manipulatePdf(String src, String dest) throws DocumentException, IOException {
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
AcroFields form = stamper.getAcroFields();
Item item = form.getFieldItem("Text Field 1");
form.setFieldProperty("Text Field 1", "fflags", PdfFormField.FF_MULTILINE, null); //convert field to multiline
item.getMerged(0).put(PdfName.Q, new PdfNumber(PdfFormField.Q_CENTER)); //center form field
Font Helvetica = FontFactory.getFont("Helvetica");
form.setFieldProperty("Text Field 1", "textfont", "Helvetica", null);
form.setFieldProperty("Text Field 1", "textcolor", new BaseColor(0, 93, 171), null);
form.setFieldProperty("Text Field 1", "textsize", new Float(16), null); //change field font size to 16
PdfDictionary widget = item.getWidget(0);
PdfArray rect = widget.getAsArray(PdfName.RECT);
rect.set(2, new PdfNumber(rect.getAsNumber(2).floatValue()));
String value = "Kyle Vassella";
form.setField("Text Field 1", value);
stamper.setFormFlattening(true); //flatten pdf
stamper.close();
}
}
所有这些都在“行动中的文字”第8章中得到了很好的解释.https://developers.itextpdf.com/examples/itext-action-second-edition/chapter-8
解决这个问题的一种方法是使用单独的表单对象本身,而不是整个表单。
PushbuttonField button = new PushbuttonField(writer, rect, "Buttons");
button.setBackgroundColor(new GrayColor(0.75f));
button.setBorderColor(GrayColor.GRAYBLACK);
button.setBorderWidth(1);
button.setBorderStyle(PdfBorderDictionary.STYLE_BEVELED);
button.setTextColor(GrayColor.GRAYBLACK);
button.setFontSize(12);
查看iText5的API,以便您清楚了解每种方法的参数。
http://itextsupport.com/apidocs/iText5/5.5.11/
以上是关于如何在iText 5中设置字体系列?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 IE 中的 HTML 选择下拉列表中设置字体系列? [复制]
如何在 Xamarin ActionBar 标题中设置自定义字体系列?
如何解析包含样式、颜色、字体系列、字体大小等 Html 标签的数据,并在 android 的 textview 中设置