2016-11-25 68 views
0

我希望标题看起来像这些红色矩形,但是我的代码显示它重叠,如下图所示。 是任何其他解决方案,安排头pdf中的标题设计问题

enter image description here

和我的代码是

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(); 

回答

1

祝头的样子,这些红色矩形,但我的代码显示它重叠

您的代码显示它重叠,因为您使用的坐标范围似乎已被选择重叠

您设置的最左边X的图像,其根据

Rectangle rect = new Rectangle(
    pagesize.Left + marginLR, pagesize.Top + marginB, 
    pagesize.Right - marginLR, pagesize.Top + marginB + footerHeight 
); 

pagesize.Left + marginLR这里

image.SetAbsolutePosition(rect.Left, rect.Top - image.ScaledHeight); 

协调rect.Left。你的问题没有说明什么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坐标120大一点的坐标,例如最左边的坐标为x。 136:

Rectangle rect2 = new Rectangle(136, 60, 810, 810); 

BTW,最右边的X坐标在这里选择的是810这看起来非常错误的,特别是不符合您的红色矩形的文字...


您的和坐标也选择不当。例如。在设置图像位置,你使用它的ScaledHeight

image.SetAbsolutePosition(rect.Left, rect.Top - image.ScaledHeight); 

但此后不久,你要改变图像

image.ScaleAbsoluteHeight(54f); 

的高度,所以前者的计算是基于错误的高度。 *仅使用图像ScaledHeight后,你已经完成标定图像高度。*

关于上y中的文本坐标,您明确选择它是810在您的rect2定义。如果你想让它开始更高,请使用更大的值。