我希望标题看起来像这些红色矩形,但我的代码显示它重叠,如下图所示。 是安排标题的任何其他解决方案
我的代码是
for (int i = 1; i <= pages; i++)
{
string header = Convert.ToString(Session["Header"]);
float marginLR = 36;
float marginB = 2;
float footerHeight = 10;
Rectangle pagesize = reader.GetCropBox(i);
if (pagesize == null)
{
pagesize = reader.GetPageSize(i);
}
Rectangle rect = new Rectangle(
pagesize.Left + marginLR, pagesize.Top + marginB,
pagesize.Right - marginLR, pagesize.Top + marginB + footerHeight
);
// Phrase ft = new Phrase(footer, blackFont);
float marginLR2 = 36;
float marginB2 = 2;
float footerHeight2 = 10;
Rectangle rect2 = new Rectangle(60, 60, 810, 810);
image.SetAbsolutePosition(rect.Left, rect.Top - image.ScaledHeight);
var pdfContentByte = stamper.GetOverContent(i);
image.ScaleAbsoluteHeight(54f);
image.ScaleAbsoluteWidth(84f);
pdfContentByte.AddImage(image);
inputImageStream.Seek(0L, SeekOrigin.Begin);
ColumnText ct = new ColumnText(stamper.GetUnderContent(i));
ct.SetSimpleColumn(rect2);
ct.AddElement(new Paragraph(header));
ct.Go();
答案 0 :(得分:1)
我希望标题看起来像这些红色矩形,但我的代码显示它重叠
您的代码显示重叠,因为您使用的坐标范围似乎已选择重叠。
您可以在此处设置图像最左侧的 x 坐标
image.SetAbsolutePosition(rect.Left, rect.Top - image.ScaledHeight);
根据,到rect.Left
Rectangle rect = new Rectangle(
pagesize.Left + marginLR, pagesize.Top + marginB,
pagesize.Right - marginLR, pagesize.Top + marginB + footerHeight
);
是pagesize.Left + marginLR
。您的问题没有说明pagesize.Left
是什么,所以让我们为它假设非常常见的值0
。然后由于
float marginLR = 36;
图像最左边的 x 坐标为36。
您可以在此处缩放图像
image.ScaleAbsoluteWidth(84f);
宽度为84.因此,图像最右边的 x 坐标为36 + 84 = 120。
文本的最左侧 x 坐标设置在此处
ct.SetSimpleColumn(rect2);
到该矩形的最左侧 x 坐标,该矩形定义为
Rectangle rect2 = new Rectangle(60, 60, 810, 810);
因此,文本最左边的 x 坐标是60。
因此,您选择的图像跨越 x 坐标(从36到120),文本跨越 x 坐标从60开始。根据您的代码,因此,您希望图像和文本重叠!
作为旁注,您将图片添加到OverContent
,文字添加到UnderContent
,因此您特别希望图片覆盖文字。
如果您实际上不希望这种重叠,那么您选择了不合适的坐标。
由于图像的宽度似乎与那些红色矩形的宽度相匹配,因此其 x 坐标似乎是正确的。因此,您应该将rect2
定义更正为最左边的 x 坐标,该坐标比最右边的图像x坐标120稍大,例如, 136:
Rectangle rect2 = new Rectangle(136, 60, 810, 810);
顺便说一下,文本最右边的 x 坐标在这里被选为810.这看起来非常错误,特别是与你的红色矩形不匹配......
您的 y 坐标也会被不恰当地选择。例如。设置图像位置时,请使用其ScaledHeight
:
image.SetAbsolutePosition(rect.Left, rect.Top - image.ScaledHeight);
但不久之后你重新缩放图像的高度
image.ScaleAbsoluteHeight(54f);
所以前者的计算是基于错误的高度。 *仅在完成缩放图像高度后才使用图像的ScaledHeight
。*
关于文本的上 y 坐标,您在rect2
定义中明确选择它为810。如果您希望它开始更高,请使用更大的值。