2014-10-28 1 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 исправляет меня над моей концепцией, сохраняя состояния с графикой. в ur код для drawlines Я изменил «холст» на тот же «cb», его рабочий тон ... но могу ли я использовать «холст»? –

+0

К сожалению, 'холст 'был пришитой и копирующей. Я исправил свой ответ. Хороший улов! Я не заметил своей ошибки. –