我正在尝试使用iTextSharp将图像写入PDF,除了写入图像之外,我还需要向PDF添加文本。似乎最好的方法是将文本作为图像编写并插入到页面上。这一切都很顺利,但当我查看文本时,发现它的质量不如我所希望的高。最终我得到了类似于这样的东西:
您可以看到有很多与周围实体背景不同的“点”。这是我用来绘制文本的代码:
private System.Drawing.Image DrawText(String text, System.Drawing.Font font, Color textColor, Color backColor)
{
Bitmap img = new Bitmap(1, 1);
Graphics drawing = Graphics.FromImage(img);
SizeF textSize = drawing.MeasureString(text, font);
img.Dispose();
drawing.Dispose();
img = new Bitmap((int) textSize.Width, (int) textSize.Height);
//img.SetResolution(200, 200);
drawing = Graphics.FromImage(img);
drawing.Clear(backColor);
Brush textBrush = new SolidBrush(textColor);
drawing.DrawString(text, font, textBrush, 0, 0);
//drawing.TextRenderingHint = TextRenderingHint.AntiAlias;
//drawing.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
//drawing.SmoothingMode = SmoothingMode.HighQuality;
//img.MakeTransparent(Color.MediumAquamarine);
drawing.Save();
textBrush.Dispose();
drawing.Dispose();
return img;
}
和PDF编写器相关的文本:
var name = DrawText(Request.Form["name"], font, Color.Black, Color.White);
...
Image titleImg = Image.GetInstance(title.ToStream(ImageFormat.Jpeg));
titleImg.SetAbsolutePosition(float.Parse(Request.Form["x"]), float.Parse(Request.Form["y"]));
titleImg.ScaleToFit(16, 16);
pdfContentByte.AddImage(titleImg);
我不确定这是iTextSharp的ScaleToFit()
还是绘图方法的问题,但我想稍微清理一下背景颜色。您可以在DrawText()
方法的注释中看到我尝试过的各种方法。
非常感谢您的帮助!