嗨,我有一个使用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();
Run Code Online (Sandbox Code Playgroud)
如果要使用绘制,PdfStamper则需要使用PdfContentByte,您可以通过调用进行绘制stamper.GetOverContent(pageNum)。该对象上有一个特定的命令,该命令Rectangle确实可以执行您想要的操作。另外,请记住,PDF中的页面从1开始而不是从0开始编号。
下面是一个针对iTextSharp 5.1.1.0的功能全面的C#2010 WinForm应用程序,我认为它应该可以满足您的需求。您需要对其进行修改以支持,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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15341 次 |
| 最近记录: |