You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:43:27