I have the method below that fills in data into a 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;
}
The above works fine.
Then I have the method below that calls the method FillDataIntoPDF, creates a pdf and then converts it to a byte Array.
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;
}
I need to read from the PDFArray for testing purposes. When I pass the byte array into the PDFReader, the Acrofield/fields count is 0 but this is the same byte array that was filled in using the FillDataIntoPDF method.
Any idea on how to read PDF Field values from a byte array?