2014-10-28 35 views
4

我創建一個PDF,我一些文本添加到每個頁面,以及正在使用下面的方法繪製的2線的顏色:格背景顏色會影響其他線路

private void DrawLines(Document pdfDoc, PdfContentByte cb) { 
    cb.MoveTo(0, 562); 
    cb.LineTo(pdfDoc.PageSize.Width, 562); 
    cb.MoveTo(0, 561); 
    cb.LineTo(pdfDoc.PageSize.Width, 561); 
} 

在一個特定的頁面,有一個表,我用下面的代碼來改變背景顏色代表一個特定的細胞:

header = new PdfPCell(new Phrase(market_data_list[i], grid_data_heading)); 
header.Colspan = 2; 
header.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER; 
header.BackgroundColor =new BaseColor(238,233,233); 
market_table.AddCell(header); //adds cell to the table 

我現在得到的背景色我指定(灰色)的細胞,但線由黑變灰色......我想用黑色畫這些線條!

回答

2

有兩個問題與您的代碼:

問題1:方法DrawLines()犯規」繪製任意線條。

它創建兩行的路徑,但行不是由該方法繪製的。您需要添加以下行:

cb.Stroke(); 

沒有該行,繪製線條被推遲,直到調用筆畫操作符爲止。這可能永遠不會發生,在這種情況下,線條從未被繪製。在你的情況下,它會在其他內容被繪製時發生。到那時,筆觸顏色可能已經改變,在這種情況下,用於繪製您在DrawLines()方法中構建的路徑的顏色是不可預知的。

問題2:您不使用最佳做法。

用於在代碼中繪製線條和形狀的顏色是不可預知的,因爲您對圖形狀態堆棧不太在意。最佳做法是保存和改變顏色,線寬,等當還原圖形狀態...

我會改變你的DrawLines()方法是這樣的:

private void DrawLines(Document pdfDoc, PdfContentByte cb) { 
    cb.SaveState(); 
    cb.SetColorStroke(GrayColor.GRAYBLACK); 
    cb.MoveTo(0, 562); 
    cb.LineTo(pdfDoc.PageSize.Width, 562); 
    cb.MoveTo(0, 561); 
    cb.LineTo(pdfDoc.PageSize.Width, 561); 
    cb.Stroke(); 
    cb.RestoreState(); 
} 

現在保存圖形狀態(SaveState() ),然後將顏色更改爲黑色(SetRGBColorStroke())。您構建線路徑(使用方法LineTo()MoveTo())並繪製這些線(Stroke())。要確保應用的顏色更改不會影響您可能添加的其他內容,請將圖形狀態堆棧恢復到之前的狀態(RestoreState())。

+2

它的工作原理,線條也開始用灰色和黑色繪製。 thnks 4通過我的概念糾正我保存與圖形狀態。 在我的代碼drawlines我已經改變「畫布」到相同的「cb」,其工作正常......但我可以編輯你我用過的「畫布」? – 2014-10-28 10:56:58

+0

糟糕,'canvas'是一個複製/粘貼錯誤。我糾正了我的答案。接得好!我沒有注意到我的錯誤。 – 2014-10-28 11:01:45