PdfDocument filledDoc = new PdfDocument(new PdfReader(new ByteArrayInputStream(filledTemplate.getBytes())));解释
时间: 2024-04-23 10:25:35 浏览: 191
这段代码的作用是创建一个新的PDF文档,并将一个已经填充好数据的PDF模板文件作为输入,解析该文件并生成一个PDF文档对象。具体来说,它首先将填充好数据的PDF模板文件转换为字节数组,然后使用字节数组创建一个 ByteArrayInputStream 对象,将其作为参数传递给 PdfReader 构造函数,最后将 PdfReader 对象传递给 PdfDocument 构造函数来创建一个新的PDF文档对象 filledDoc。
相关问题
在下边的代码中如何释放pdfViewer1.Document using (PdfReader reader = new PdfReader(filepath+ filetype_pdf)) { int pageCount = reader.NumberOfPages; // 添加水印 using (PdfStamper stamper = new PdfStamper(reader, new FileStream("temp.pdf", FileMode.Create))) { for (int i = 1; i <= pageCount; i++) { // 水印文本 //string watermarkText = "鲁达LUDA 鲁达LUDA 鲁达LUDA 鲁达LUDA 鲁达LUDA"; // 水印字体 BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); Font font = new Font("Black", 75, FontStyle.Bold); //Brush brush = new SolidBrush(Color.FromArgb(128, Color.LightGray)); // 水印位置 iTextSharp.text.Rectangle rect = reader.GetPageSize(i); float x = rect.Width / 2; float y = rect.Height / 2; // 添加水印 PdfContentByte over = stamper.GetOverContent(i); over.SaveState(); over.SetGState(new PdfGState() { FillOpacity = 0.5f, StrokeOpacity = 0.5f }); over.BeginText(); over.SetFontAndSize(bf, font.Size); over.SetColorFill(BaseColor.LIGHT_GRAY); over.ShowTextAligned(Element.ALIGN_CENTER, "鲁达LUDA 鲁达LUDA 鲁达LUDA 鲁达LUDA 鲁达LUDA", x, y, 45); over.EndText(); over.RestoreState(); } stamper.Close(); pdfViewer1.Document = PdfiumViewer.PdfDocument.Load("temp.pdf"); } }
可以使用以下代码释放pdfViewer1.Document:
```csharp
if (pdfViewer1.Document != null)
{
pdfViewer1.Document.Dispose();
pdfViewer1.Document = null;
}
```
将其放在 `using` 块的外面即可,如下所示:
```csharp
using (PdfReader reader = new PdfReader(filepath+ filetype_pdf))
{
int pageCount = reader.NumberOfPages;
using (PdfStamper stamper = new PdfStamper(reader, new FileStream("temp.pdf", FileMode.Create)))
{
for (int i = 1; i <= pageCount; i++)
{
// 添加水印
// ...
}
stamper.Close();
if (pdfViewer1.Document != null)
{
pdfViewer1.Document.Dispose();
pdfViewer1.Document = null;
}
pdfViewer1.Document = PdfiumViewer.PdfDocument.Load("temp.pdf");
}
}
```
为什么使用下列代码给pdf添加的水印 就算修改了watermarktext变量的文本 打开pdf文件后里边的水印还是第一次生成代码时的水印 using (PdfReader reader = new PdfReader(path)) { int pageCount = reader.NumberOfPages; // 添加水印 PdfStamper stamper = new PdfStamper(reader, new FileStream("temp.pdf", FileMode.Create)); for (int i = 1; i <= pageCount; i++) { // 水印文本 string watermarkText = "鲁达LUDA 鲁达LUDA 鲁达LUDA 鲁达LUDA 鲁达LUDA"; // 水印字体 BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); Font font = new Font("Black", 75, FontStyle.Bold); //Brush brush = new SolidBrush(Color.FromArgb(128, Color.LightGray)); // 水印位置 iTextSharp.text.Rectangle rect = reader.GetPageSize(i); float x = rect.Width / 2; float y = rect.Height / 2; // 添加水印 PdfContentByte over = stamper.GetOverContent(i); over.SaveState(); over.SetGState(new PdfGState() { FillOpacity = 0.5f, StrokeOpacity = 0.5f }); over.BeginText(); over.SetFontAndSize(bf, font.Size); over.SetColorFill(BaseColor.LIGHT_GRAY); over.ShowTextAligned(Element.ALIGN_CENTER, watermarkText, x, y, 45); over.EndText(); over.RestoreState(); } stamper.Close(); pdfViewer1.Document = PdfiumViewer.PdfDocument.Load("temp.pdf"); }
这是因为你每次都是将PDF文件读取到内存中,然后对内存中的文件进行水印处理,而不是直接对原始文件进行处理。因此,即使你修改了水印文本,生成的PDF文件也是基于原始文件的副本进行水印处理的。
如果你想在原始文件上添加水印并保存,可以直接对原始文件进行操作,而不是生成一个副本。你可以尝试以下代码:
```csharp
using (PdfReader reader = new PdfReader(path))
{
int pageCount = reader.NumberOfPages;
using (FileStream output = new FileStream("output.pdf", FileMode.Create, FileAccess.Write))
{
using (PdfStamper stamper = new PdfStamper(reader, output))
{
for (int i = 1; i <= pageCount; i++)
{
string watermarkText = "鲁达LUDA 鲁达LUDA 鲁达LUDA 鲁达LUDA 鲁达LUDA";
BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
Font font = new Font("Black", 75, FontStyle.Bold);
iTextSharp.text.Rectangle rect = reader.GetPageSize(i);
float x = rect.Width / 2;
float y = rect.Height / 2;
PdfContentByte over = stamper.GetOverContent(i);
over.SaveState();
over.SetGState(new PdfGState() { FillOpacity = 0.5f, StrokeOpacity = 0.5f });
over.BeginText();
over.SetFontAndSize(bf, font.Size);
over.SetColorFill(BaseColor.LIGHT_GRAY);
over.ShowTextAligned(Element.ALIGN_CENTER, watermarkText, x, y, 45);
over.EndText();
over.RestoreState();
}
}
}
pdfViewer1.Document = PdfiumViewer.PdfDocument.Load("output.pdf");
}
```
这样,你每次修改水印文本后,生成的PDF文件都是直接基于原始文件进行水印处理的。
阅读全文