【发布时间】:2022-01-24 08:30:52
【问题描述】:
我有下面的方法将数据填充到pdf中:
public Stream FillDataIntoPDF(){
var pdfTemplate = _fileService.GetFileInfo(pdfFilePath);
Stream outStream = new MemoryStream();
using Stream inputStream = pdfTemplate.CreateReadStream();
PdfReader? pdfReader = new PdfReader(inputStream);
PdfStamper? pdfStamper = new PdfStamper(pdfReader, outStream);
AcroFields fields = pdfStamper.AcroFields;
foreach (var f in fields.Fields.Keys)
{
form.SetField(f.ToString(), "testValue");
}
pdfStamper.Close();
pdfReader.Close();
return outStream;
}
以上工作正常。
然后我有下面的方法调用方法 FillDataIntoPDF,创建一个 pdf,然后将其转换为一个字节数组。
public byte[] CreatePDF()
{
using MemoryStream outputStream = new MemoryStream();
using Stream pdfStreamResult = FillDataIntoPDF();
pdfStreamResult.Position = 0;
pdfStreamResult.CopyTo(outputStream);
var pdfArray = outputStream.ToArray();
// I cannot find any fields
PdfReader pdfReader = new PdfReader(pdfArray);
PdfStamper stamper = new PdfStamper(pdfReader, outputStream);
AcroFields fields = stamper.AcroFields;
foreach (var f in fields.Fields.Keys)
{
fields.GetField(f!.ToString());
}
return pdfArray;
}
出于测试目的,我需要读取 PDFArray。当我将字节数组传递到 PDFReader 时,Acrofield/fields 计数为 0,但这与使用 FillDataIntoPDF 方法填充的字节数组相同。
知道如何从字节数组中读取 PDF 字段值吗?
【问题讨论】:
-
嗯,乍一看
PdfReader应该可以找到没有问题的字段。你能分享一个你遇到这个问题的PDF吗? (有点奇怪的是您在CreatePDF()中使用PdfStamper而不使用它,它写入已经包含 PDF 的流......)
标签: c# pdf itext memorystream pdf-reader