如何在模板裁剪上设置线宽
How to set line width on template clipping
我有一些 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);
问题 #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);
我有一些 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);
问题 #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);