首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PdfStamper添加矩形

使用PdfStamper添加矩形
EN

Stack Overflow用户
提问于 2011-11-30 05:54:57
回答 1查看 16.5K关注 0票数 2

嗨,我有一个pdf,我用itextsharp创建的。

使用pdfreader,我正在将创建的pdf读入pdfstamper。

现在,我尝试使用pdfstamper在所有页面上添加一个与页面大小相同的黑色矩形。我该怎么做呢?

另外,我不能使用文档来添加矩形,因为流是封闭的!

代码语言:javascript
复制
    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();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-30 07:01:17

如果您想使用PdfStamper进行绘制,那么您需要使用可以通过调用stamper.GetOverContent(pageNum)获得的PdfContentByte。在该对象上有一个名为Rectangle的特定命令,它可以执行您希望它执行的操作。此外,请记住,PDF中的页面从1开始编号,而不是从0开始。

下面是一个完整的C# 2010 WinForm应用程序,目标是iTextSharp 5.1.1.0,我认为它应该能做你想要的事情。您需要修改它以支持MemoryStream,但这应该很容易。

代码语言:javascript
复制
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();
        }
    }
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8318281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档