Как добавить рамку во все страницы PDF с помощью c # - PullRequest
0 голосов
/ 24 октября 2018

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

Вот мой код:

   if (Document Doc is null   || PDFWriter Writer is null)
        {
            throw new NullReferenceException();
        }

        //Add border to page
        PdfContentByte content = Writer.DirectContent;
        Rectangle rectangle = new Rectangle(Doc.PageSize);
        rectangle.Left += Doc.LeftMargin;
        rectangle.Right -= Doc.RightMargin;
        rectangle.Top -= Doc.TopMargin;
        rectangle.Bottom += Doc.BottomMargin;
        content.SetColorStroke(BaseColor.Black);
        content.Rectangle(rectangle.Left, rectangle.Bottom, rectangle.Width, rectangle.Height);
        content.Stroke();

1 Ответ

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

Вы создаете новый документ, используя пару Document / PdfWriter, и хотите добавить некоторые украшения (будь то граница, как в вашем случае, или тексты верхнего или нижнего колонтитула, или некоторый фоновый рисунок, ...), чтобыкаждая страница.Наиболее распространенный (и обычно единственный надежный) способ сделать это - использовать события страницы, например, в вашем случае вы можете использовать этот прослушиватель событий страницы:

public class Border : PdfPageEventHelper
{
    public override void OnEndPage(PdfWriter Writer, Document Doc)
    {
        PdfContentByte content = Writer.DirectContent;
        Rectangle rectangle = new Rectangle(Doc.PageSize);
        rectangle.Left += Doc.LeftMargin;
        rectangle.Right -= Doc.RightMargin;
        rectangle.Top -= Doc.TopMargin;
        rectangle.Bottom += Doc.BottomMargin;
        content.SetColorStroke(BaseColor.BLACK);
        content.Rectangle(rectangle.Left, rectangle.Bottom, rectangle.Width, rectangle.Height);
        content.Stroke();
    }
}

как этот

using (Document document = new Document())
{
    PdfWriter writer = PdfWriter.GetInstance(document, DESTINATION_STREAM);
    writer.PageEvent = new Border();
    document.Open();

    for (int i = 0; i < 10; i++)
    {
        document.Add(new Paragraph("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."));
    }
}

Результат:

Screen shot


Если в противном случае вы хотите добавить рамку в существующий PDF, вы делаете это, используя PdfReader/ PdfStamper пара, как объяснено в этом ответе .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...