All,
i created the following method to take in a tiff byte array with multiple tiff page document
i need to convert this to pdf, then return a pdf byte array
This is a basic example:
private byte[] CreatePdf()
{
Document document = new Document();
using (MemoryStream ms = new MemoryStream())
{
PdfWriter.GetInstance(document, ms);
document.Open();
document.Add(new Paragraph("Hello World"));
document.Close();
return ms.ToArray();
}
}
It is similar to a previous answer, but in that answer in isn't made clear that you need to Close()
the document
instance before you get the bytes from the MemoryStream
. In your code snippet, you have:
byte[] bytes = null;
document.Close();
Based on the previous answer, you might change this into:
byte[] bytes = ms.ToArray();
document.Close();
That would be wrong, because the bytes
array wouldn't contain the full PDF. Upon document.Close()
, a lot of essential data is written to the output stream (the info dictionary, the root dictionary, the cross-reference table).
Update:
In C#, it is custom to use using
as indicated in the comments:
private byte[] CreatePdf()
{
using (MemoryStream ms = new MemoryStream())
{
using (Document document = new Document())
{
PdfWriter.GetInstance(document, ms);
document.Open();
document.Add(new Paragraph("Hello World"));
}
return ms.ToArray();
}
}
My argument that the document
needs to be closed to get a complete PDF remains valid: the document
instance is closed implicitly by the }
right before return ms.ToArray()
.