我正在使用 iTextSharp 加载现有 PDF 并使用 PdfStamper 添加文本。我想要完全控制文本,这意味着我想要能够控制字体(仅限 TrueType)、字体大小和坐标。现在,我使用 ShowTextAligned 将文本添加到某些坐标,并使用 setFontAndSize 设置字体和字体大小。这是我添加文本的代码:
private void AddText(BaseFont font, string text, int x, int y, int size)
{
pdf.BeginText();
pdf.SetFontAndSize(font, size);
pdf.ShowTextAligned(PdfContentByte.ALIGN_LEFT, text, x, y, 0);
pdf.EndText();
}
以下函数用于加载 TrueType 字体:
public BaseFont GetFont(string font, string encoding)
{
if (!(font.EndsWith(".ttf") || font.EndsWith(".TTF")))
font += ".ttf";
BaseFont basefont;
basefont = BaseFont.CreateFont(ConfigurationManager.AppSettings["fontdir"] + font, encoding, BaseFont.NOT_EMBEDDED);
if (basefont == null)
throw new Exception("Could not load font '" + font + "' with encoding '" + encoding + "'");
return basefont;
}
以下代码用于加载现有的 PDF:
Stream outputPdfStream = Response.OutputStream;
PdfReader pdfReader = new PdfReader(new RandomAccessFileOrArray(HttpContext.Current.Request.MapPath("PdfTemplates/" + ConfigurationManager.AppSettings["pdf_template"])), null);
PdfStamper pdfStamper = new PdfStamper(pdfReader, outputPdfStream);
pdf = pdfStamper.GetOverContent(1);
这一切都很完美,除非我尝试使用不同的字体。因此,当使用不同的字体多次调用 AddText 时,PDF 在 openend 时将显示一般错误。我想知道是否可以使用 ShowTextAligned 函数使用不同的字体,如果可以,如何实现?