如何在模板裁剪上设置线宽

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:您将剪切路径用于两个不同的目的。

  1. 在添加 Image 时剪出一个形状。
  2. 绘制路径。

这看起来不对。我不确定每个 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);