gpt4 book ai didi

c# - iTextSharp - 绘制矩形 - 边框宽度问题

转载 作者:行者123 更新时间:2023-12-04 12:51:34 27 4
gpt4 key购买 nike

这是一个简单的代码:

var w = Utilities.MillimetersToPoints(420);
var h = Utilities.MillimetersToPoints(210);

var doc1 = new Document(new Rectangle(w, h));

PdfWriter writer = PdfWriter.GetInstance(doc1, new FileStream("Doc1.pdf", FileMode.Create));

doc1.Open();

PdfContentByte cb = writer.DirectContent;

var rect = new Rectangle(200, 200, 100, 100);

现在,如果我执行以下操作:

cb.Rectangle(200, 200, 100, 100);
cb.Stroke();

然后我看到了矩形。但是我需要设置它的边框宽度,所以我这样做了

 rect.BorderWidth = 5;
rect.BorderColor = new BaseColor(0,0,0);

cb.Rectangle(rect);
cb.Stroke();

现在矩形不可见了。为什么?

最佳答案

PdfContentByte 上的 Rectangle() 方法有几个重载,它们的行为完全不同,具体取决于您传入的内容。

您的第一个示例是使用仅需要 4 个 float 的非常简单的重载。如果您查看 source for that您会发现,除了一些合理性检查之外,它只是将这些坐标直接写入 PDF 流,并且在此过程中没有创建实际的 Rectangle 对象。稍后当您调用 Stroke() 时,iText 会将笔划命令写入流,仅此而已。当 PDF 渲染器(如 Adob​​e 的)实际解析描边命令时,它会在缓冲区中向后查看并查看它需要描边的坐标并执行操作。

您的第二个示例使用了更复杂的重载,您可以see here它需要一个实际的 Rectangle 对象。 Rectangle 除了代表空间中的四个点外,还有背景颜色和边框等概念,对您来说最重要的是,这些边框可以每边绘制,您需要告诉它在哪一边画画

例如,对于左和右你会做:

var rect = new iTextSharp.text.Rectangle(200, 200, 100, 100);
rect.Border = iTextSharp.text.Rectangle.LEFT_BORDER | iTextSharp.text.Rectangle.RIGHT_BORDER;
rect.BorderWidth = 5;
rect.BorderColor = new BaseColor(0, 0, 0);
cb.Rectangle(rect);

对于所有边框,您可以将其更改为:

rect.Border = iTextSharp.text.Rectangle.BOX;

此外,在调用此重载时,在之后立即调用 Stroke() 实际上是不正确的,因为此重载会为您处理该重载(实际上可能已经完成了不止一次。)

关于c# - iTextSharp - 绘制矩形 - 边框宽度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36177432/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com