【问题标题】:Using PdfStamper to add a rectangle使用 PdfStamper 添加一个矩形
【发布时间】:2012-01-09 05:40:41
【问题描述】:

您好,我有一个使用 itextsharp 创建的 pdf。

我正在使用 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();

【问题讨论】:

  • 文档在哪里进入范围?我在您的示例代码中没有看到它。另请查看stackoverflow.com/questions/583629/… 这是关于图像的,但可能会为您提供所需的帮助。
  • 使用 PDFDocument 为 pdf 创建标题并将其放入内存流中,然后使用 PDFWriter 创建 pdf 时,文档可以进入范围。使用 PDFReader 时,您无法拥有该文档,因为在您关闭该文档之前,该文档的创建尚未完成。

标签: c# itextsharp


【解决方案1】:

如果您想使用PdfStamper 进行绘图,则需要使用PdfContentByte,您可以通过调用stamper.GetOverContent(pageNum) 获得。该对象上有一个名为Rectangle 的特定命令,它完全按照您的要求执行。另外,请记住 PDF 中的页面从 1 开始编号,而不是从 0 开始。

下面是一个完整的工作 C# 2010 WinForm 应用程序,目标是 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();
        }
    }
}

【讨论】:

  • 只需要进行一些更改以适应 Web 应用程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-17
  • 2012-08-10
  • 1970-01-01
相关资源
最近更新 更多