【发布时间】:2014-09-10 17:52:48
【问题描述】:
帮助,我需要使用 iTextSharp 创建一个 PDF 1) 整个文档的绿色背景 2) 文本(标题、表格、段落)出现在白色背景上。 3)特殊部分以粉红色(或其他颜色)出现 4) 蓝底白字标题。
我可以构建一个简单的文档,但是背景颜色真的让我很反感。
我使用段落添加内容,但我不确定如何设置段落的背景颜色,或将它们组合在一起。
【问题讨论】:
标签: itextsharp
帮助,我需要使用 iTextSharp 创建一个 PDF 1) 整个文档的绿色背景 2) 文本(标题、表格、段落)出现在白色背景上。 3)特殊部分以粉红色(或其他颜色)出现 4) 蓝底白字标题。
我可以构建一个简单的文档,但是背景颜色真的让我很反感。
我使用段落添加内容,但我不确定如何设置段落的背景颜色,或将它们组合在一起。
【问题讨论】:
标签: itextsharp
您使用Paragraphs、PdfPTables 等对象创建文档。您使用PdfContentByte 方法绘制矩形。您可以像这样从PdfWriter 获得PdfContentByte 实例:
writer.getDirectContentUnder(); // Java
或
writer.DirectContentUnder; // C#
通过使用getDirectContentUnder()而不是getDirectContent(),在Paragraphs、PdfPTables等下绘制矩形。
您的主要问题是跟踪坐标:您需要知道左下角和右上角的坐标。
为整页绘制背景是不费吹灰之力的。我昨天已经回答了这个问题:How to draw border for whole pdf pages using iText library 5.5.2
当然,在那个答案中,我为矩形定义了边框颜色,因为 OP 只需要每个页面上的红色边框。您需要定义矩形而不是边框的填充颜色。
通过检查昨天问题的答案,您会发现页面事件的概念。您还将发现其他页面事件方法,例如onParagraph() 和onParagraphEnd()。这些方法接收每个段落开头和结尾的 Y 坐标。您可以使用这些坐标在页面事件中绘制矩形。
要解决您的问题,您可以添加一个BaseColor 成员变量、一个跟踪初始 Y 值的变量,等等。这将需要一些编程,但是通过我的回答中解释的所有机制,您应该能够满足您的要求。
【讨论】:
我是这样完成的:
在单元格中放置内容解决了跟踪坐标的问题。由于内容可能包含多个段落、子表等。我不确定 onParagraphEnd 是否总是会触发。
将内容放在单元格中还可以控制颜色。
【讨论】: