QuestPDF 元素
有时候,根据条件改变文档内容会很有用。Element
组件可以提供这种语法糖,而不会中断流畅的 API 链,如下所示:
// 以前
public static IContainer TableCell(this IContainer container, bool applyBackground = false)
{
var container = container.Border(0.5f).BorderColor("#222");
if (applyBackground)
container = container.Background("#DEE");
return container.Padding(5);
}
// 之后
public static IContainer TableCell(this IContainer container, bool applyBackground = false)
{
return container
.Border(0.5f)
.BorderColor("#222")
.Element(x => applyBackground ? x.Background("#DEE") : x) // 使用三元表达式,根据 applyBackground 的值决定是否添加背景色
.Padding(5);
}
你不必遵循方法链。使用这种方法,也可以在链的末尾结束,如下所示:
public static IContainer TextOrBackground(this IContainer container, string text)
{
return container
.Padding(10)
.Element(x =>
{
if (string.IsNullOrWhiteSpace(text)) // 如果 text 为空或者只包含空格,设置元素高度、宽度和背景色
x.Height(10).Width(50).Background("#DDD");
else // 否则,设置文本内容
x.Text(text);
});
}