如何使用iText7设置文本的描边宽度与描边颜色?
在iText 7中实现文本描边效果
要实现类似CSS -webkit-text-stroke的文本描边效果,你可以通过iText 7的PdfCanvas设置文本渲染模式、描边颜色和线条宽度,结合Layout模块的文本组件完成。以下是针对你现有代码的修改方案:
修改后的完整代码
using var doc = new PdfDocument(new PdfWriter("a4.pdf")); var pageSize = PageSize.A4; var page = doc.AddNewPage(pageSize); PdfCanvas pdfCanvas = new PdfCanvas(page); var canvas = new Canvas(pdfCanvas, pageSize); // 设置文本渲染模式为填充+描边,同时指定描边颜色和宽度 pdfCanvas.SetTextRenderingMode(PdfCanvasConstants.TextRenderingMode.FILL_STROKE); pdfCanvas.SetStrokeColor(new DeviceRgb(250, 190, 255)); pdfCanvas.SetLineWidth(1); Paragraph p = new Paragraph("This is a Stroked Paragraph"); p.SetFontSize(20f); p.SetFontColor(ColorConstants.WHITE); // 设置文本填充色为白色,对应HTML中的color:white canvas.ShowTextAligned(p, pageSize.GetLeft()+100, pageSize.GetTop() - 100, 1, iText.Layout.Properties.TextAlignment.LEFT, iText.Layout.Properties.VerticalAlignment.TOP, 0f); doc.Close(); using (System.Diagnostics.Process process = new System.Diagnostics.Process()) { process.StartInfo = new System.Diagnostics.ProcessStartInfo() { CreateNoWindow = true, UseShellExecute = true, FileName = "a4.pdf" }; process.Start(); }
关键说明
- 文本渲染模式:使用
SetTextRenderingMode设置为FILL_STROKE,表示先填充文本内部颜色,再描边文本轮廓,对应HTML中同时设置填充色和描边的效果;若仅需描边无填充,可改用STROKE模式。 - 描边颜色:通过
SetStrokeColor指定描边的RGB颜色,对应你HTML中的rgb(250, 190, 255)。 - 描边宽度:用
SetLineWidth设置描边线条宽度,对应HTML中的1px。 - 填充色:给Paragraph设置
SetFontColor(ColorConstants.WHITE),实现文字内部为白色的效果。
针对特定文本单独设置描边(可选)
如果仅需对段落中的部分文本设置描边,而非整个Canvas的文本,可自定义TextRenderer实现:
public class StrokedTextRenderer : TextRenderer { public StrokedTextRenderer(Text textElement) : base(textElement) { } public override IRenderer GetNextRenderer() { return new StrokedTextRenderer((Text)GetModelElement()); } protected override void DrawText(DrawContext drawContext) { var canvas = drawContext.GetCanvas(); // 保存当前状态,避免影响其他文本 canvas.SaveState(); canvas.SetTextRenderingMode(PdfCanvasConstants.TextRenderingMode.FILL_STROKE); canvas.SetStrokeColor(new DeviceRgb(250, 190, 255)); canvas.SetLineWidth(1); base.DrawText(drawContext); // 恢复状态 canvas.RestoreState(); } }
使用方式:
Paragraph p = new Paragraph() .Add(new Text("普通文本 ")) .Add(new Text("带描边的文本").SetNextRenderer(new StrokedTextRenderer(new Text("带描边的文本")))) .SetFontSize(20f) .SetFontColor(ColorConstants.WHITE);
内容的提问来源于stack exchange,提问作者zhusp
相关产品推荐
相关产品推荐

