Обработка проблемы Itextsharp применяется к тексту ячейки - PullRequest
0 голосов
/ 22 октября 2018

Итак, я применяю обводку холста к своему PDF, но обводка применяется к тексту ячейки.Но только первая ячейка.

here is image

Вот метод для рисования границы страницы:

protected void DrawPageBorder(PdfWriter writer, Document document, PdfContentByte canvas)
    {
        var pageBorderRect = new Rectangle(document.PageSize);
        var content = writer.DirectContent;

        pageBorderRect.Left += document.LeftMargin - BorderDifference;
        pageBorderRect.Right -= document.RightMargin - BorderDifference;
        pageBorderRect.Top -= document.TopMargin - BorderDifference;
        pageBorderRect.Bottom += document.BottomMargin - BorderDifference;
        content.SetLineDash(3f, 3f);
        content.SetRGBColorStroke(236, 236, 236);
        //canvas.SetLineWidth(FillOpacity);
        //canvas.SetRGBColorStroke(0, 0, 0);
        //canvas.SetRGBColorStroke(236, 236, 236);
        //canvas.SetLineDash(3f, 3f);
        content.Rectangle(pageBorderRect.Left, pageBorderRect.Bottom, pageBorderRect.Width, pageBorderRect.Height);
        content.Stroke();
    }

это код, который добавляет таблицу PDF сграница:

var docTable = new PdfPTable(1);
docTable.WidthPercentage = 100f;

PdfContentByte canvas = new PdfContentByte(pdfWriter);
DrawPageBorder(pdfWriter, doc, canvas);

Это код для добавления первой ячейки таблицы:

titleFont.Size = 24.0f;
var text1 = new PdfPCell(new Phrase("To:", titleFont))
{
HorizontalAlignment = Element.ALIGN_LEFT,
Border = Rectangle.NO_BORDER,
PaddingTop = 20f,
PaddingLeft = 9f,
PaddingRight = 9f
};
docTable.AddCell(text1);

Кто-нибудь знает, где я здесь ошибаюсь?

Спасибо

1 Ответ

0 голосов
/ 22 октября 2018

Всякий раз, когда вы смешиваете создание контента высокого уровня API (как вы делаете с таблицей) и рисования API низкого уровня (как вы делаете в DrawPageBorder), убедитесь, что ваш код низкого уровня не оставляет никаких изменений в параметрах состояния графики.

Ваш код оставляет изменения в LineDash и цвет обводки.

Вы можете сделать это, поместив чертеж кода на content в конверт safe-graphics-state / restore-graphics-state.

В вашем случае:

    content.SaveState();
    content.SetLineDash(3f, 3f);
    content.SetRGBColorStroke(236, 236, 236);
    //canvas.SetLineWidth(FillOpacity);
    //canvas.SetRGBColorStroke(0, 0, 0);
    //canvas.SetRGBColorStroke(236, 236, 236);
    //canvas.SetLineDash(3f, 3f);
    content.Rectangle(pageBorderRect.Left, pageBorderRect.Bottom, pageBorderRect.Width, pageBorderRect.Height);
    content.Stroke();
    content.RestoreState();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...