2016-11-25 61 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定義。如果你想讓它開始更高,請使用更大的值。