这是一个简单的代码:
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);
Run Code Online (Sandbox Code Playgroud)
现在,如果我执行以下操作:
cb.Rectangle(200, 200, 100, 100);
cb.Stroke();
Run Code Online (Sandbox Code Playgroud)
然后我看到了矩形。但我需要设置它的边框宽度,所以我做
rect.BorderWidth = 5;
rect.BorderColor = new BaseColor(0,0,0);
cb.Rectangle(rect);
cb.Stroke();
Run Code Online (Sandbox Code Playgroud)
现在矩形不可见。为什么 ?
Rectangle()on的方法PdfContentByte有几个重载,它们的行为完全不同,具体取决于您传入的内容。
您的第一个示例是使用仅需要 4 个浮点数的非常简单的重载。如果您查看源代码,您会发现除了一些完整性检查之外,它只是将这些坐标直接写入 PDF 流,并且Rectangle在此过程中没有创建实际对象。稍后当你打电话时Stroke()iText 时,会将笔划命令写入流,仅此而已。当 PDF 渲染器(如 Adobe 的)实际解析笔画命令时,它会在缓冲区中向后查看,并查看需要笔画和执行动作的坐标。
您的第二个示例使用了更复杂的重载,您可以在此处看到它采用实际Rectangle对象。除了表示空间中的四个点之外,aRectangle还具有背景颜色和边界等概念,对您来说最重要的是,这些边界可以每边绘制,您需要告诉它要在哪一边绘制。
例如,对于左右,你会这样做:
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);
Run Code Online (Sandbox Code Playgroud)
对于所有边框,您可以将其更改为:
rect.Border = iTextSharp.text.Rectangle.BOX;
Run Code Online (Sandbox Code Playgroud)
此外,在调用此重载时,在Stroke()之后立即调用实际上是不正确的,因为此重载会为您处理此问题(并且实际上可能已经不止一次这样做了。)
| 归档时间: |
|
| 查看次数: |
20829 次 |
| 最近记录: |