我正在使用SkiaSharp将标签打印到PDF(和其他东西)。 PDF的每个页面都可以有多个行和列。我需要将每个标签剪裁成正确的尺寸,这样它就不会丢弃相邻的标签。
为了进行测试,每个标签都有一个延伸得太远的矩形加上7行文字和一个靠近垂直中间的圆圈。
我的代码就像:
using (var region = new SKRegion())
{
region.SetRect(_labelClipRect);
_currentCanvas.ClipRegion(region, SKClipOperation.Intersect);
_labelView.Draw(_currentCanvas, _printRequest.Device.DPI, xOffsetPX, yOffsetPX);
}
结果是: 每页上的第一个标签看起来都是正确的,但其余的都很时髦。缺少矩形和圆形,文本根本没有剪裁。
有人见过这样的样品吗?
由于
答案 0 :(得分:0)
每次调用 _currentCanvas.ClipRegion
都会将传递的区域与当前的区域相交,它不会将剪辑设置到该区域。
尝试保存画布状态并在标签绘制后恢复:
using (var region = new SKRegion())
{
region.SetRect(_labelClipRect);
_currentCanvas.Save();
_currentCanvas.ClipRegion(region, SKClipOperation.Intersect);
_labelView.Draw(_currentCanvas, _printRequest.Device.DPI, xOffsetPX, yOffsetPX);
_currentCanvas.Restore();
}