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

时间:2015-09-28 10:57:50

标签: itextsharp itext

我有一些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 个答案:

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

  1. 在添加Image时剪裁形状。
  2. 绘制路径。
  3. 这看起来不对。我不确定每个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);