我有一些PdfTemplate
我希望将其形状剪切到某个路径。我知道怎么做,但剪切线总是相同的(可能是1像素),我希望能够改变它。有没有办法做到这一点?像调整大小模板这样的半措施不会起到作用。
一段代码:
PdfTemplate template = contentByte.CreateTemplate(100, 200);
template.MoveTo(0, 0);
template.LineTo(50, 50);
template.LineTo(50, 0);
template.LineTo(0, 50);
template.SetLineWidth(5);
template.Clip();
Image img = Image.getInstance(RESOURCE);
template.Add(img, 0, 0);
SetLineWidth()
显然不起作用。 C#和Java答案都有帮助。
编辑:在这种情况下,我们有三角形img。如果我们想要像这样剪辑这个图像,但不改变坐标(我想在10上设置线宽),该怎么办:
template.LineTo(45, 45);
template.LineTo(45, 0);
template.LineTo(0, 45);
答案 0 :(得分:2)
问题#1:你永远不会划过路径,因此永远不会画出来。首先试试这个:
PdfTemplate template = contentByte.CreateTemplate(100, 200);
template.MoveTo(0, 0);
template.LineTo(50, 50);
template.LineTo(50, 0);
template.LineTo(0, 50);
template.SetLineWidth(5);
template.Clip();
Image img = Image.getInstance(RESOURCE);
template.Add(img, 0, 0);
template.Stroke();
问题#2:您正在将剪切路径用于两个不同的目的。
Image
时剪裁形状。这看起来不对。我不确定每个PDF查看器是否会实际描绘该路径,因为您明确使用该路径剪辑内容。
我会写这样的代码:
PdfTemplate template = contentByte.CreateTemplate(100, 200);
template.MoveTo(0, 0);
template.LineTo(50, 50);
template.LineTo(50, 0);
template.LineTo(0, 50);
template.Clip();
template.NewPath();
Image img = Image.getInstance(RESOURCE);
template.Add(img, 0, 0);
template.MoveTo(0, 0);
template.LineTo(50, 50);
template.LineTo(50, 0);
template.LineTo(0, 50);
template.SetLineWidth(5);
template.Stroke();
第一次使用路径作为剪切路径。为剪切路径定义线宽没有意义:路径定义了需要剪切的形状。
第二次,您使用路径来描边形状的边框。制作这些边框的线条具有宽度。请注意,您只绘制了三行。你可能想关闭这条路!
这也很奇怪:
template.LineTo(45, 45);
template.LineTo(45, 0);
template.LineTo(0, 45);
这不画三角形!
这些行应该像这样纠正:
template.MoveTo(0, 45);
template.LineTo(45, 45);
template.LineTo(45, 0);
template.LineTo(0, 45);