Использование PdfStamper для добавления прямоугольника - PullRequest
2 голосов
/ 30 ноября 2011

Привет, у меня есть PDF, который я создал с помощью itextsharp.

Использование pdfreader Я читаю созданный pdf в pdfstamper.

Теперь я пытаюсь использовать pdfstamper, чтобы добавить черный прямоугольник размером страницы на всех страницах.Как мне это сделать?

Также я не могу использовать документ для добавления прямоугольника, потому что поток закрыт!

    MemoryStream stream = new MemoryStream();

    PdfReader pdfReader = new PdfReader(output.ToArray());
    PdfStamper stamper = new PdfStamper(pdfReader, stream);

    for (int x = 0; x < stamper.Reader.NumberOfPages; x++)
    {
        Rectangle rectangle = document.PageSize;
        rectangle.BackgroundColor = new BaseColor(0, 0, 0);
        //stamper.Writer.AcroForm.
        //document.Add(rectangle);
    }

    output.Close();
    pdfReader.Close();
    stamper.Close();

1 Ответ

5 голосов
/ 30 ноября 2011

Если вы хотите рисовать, используя PdfStamper, вам нужно использовать PdfContentByte, который вы можете получить, позвонив по номеру stamper.GetOverContent(pageNum). Для этого объекта есть специальная команда Rectangle, которая делает именно то, что вы хотите. Также помните, что страницы в PDF начинаются с нуля, а не с нуля.

Ниже представлено полнофункциональное приложение WinForm для C # 2010, предназначенное для iTextSharp 5.1.1.0, которое, я думаю, должно делать то, что вы ищете Вам нужно будет изменить его, чтобы он поддерживал MemoryStream, но это должно быть довольно просто.

using System;
using System.Text;
using System.Windows.Forms;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string inputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "input.pdf");
            string outputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "output.pdf");

            PdfReader pdfReader = new PdfReader(inputFile);
            using (FileStream fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write, FileShare.None))
            {
                using (PdfStamper stamper = new PdfStamper(pdfReader, fs))
                {
                    int PageCount = pdfReader.NumberOfPages;
                    for (int x = 1; x <= PageCount; x++)
                    {
                        PdfContentByte cb = stamper.GetOverContent(x);
                        iTextSharp.text.Rectangle rectangle = pdfReader.GetPageSizeWithRotation(x);
                        rectangle.BackgroundColor = BaseColor.BLACK;
                        cb.Rectangle(rectangle);
                    }
                }
            }

            this.Close();
        }
    }
}
...