Salve a tutti, vorrei creare un metodo che prende in input un pdf come array di byte e mi restituisce ancora un array di byte, effettuando delle opportune modifiche sulla formattazione delle varie pagine del PDF, per questo ho utilizzato la libreria iTextSharp.
Il problema è che non riesco a ricavare correttamente l'output generato, in basso il codice, dov'è che sbaglio?
Grazie.
codice:
public static byte[] RotateResizeFile(byte[] inputFile)
{
iTextSharp.text.pdf.PdfReader pdfRdr = new iTextSharp.text.pdf.PdfReader(inputFile);
MemoryStream ms = new MemoryStream();
byte[] output = null;
for (int i = 1; i <= pdfRdr.NumberOfPages; i++)
{
iTextSharp.text.Document doc =
new iTextSharp.text.Document(pdfRdr.GetPageSizeWithRotation(i));
iTextSharp.text.pdf.PdfWriter outputWriter =
iTextSharp.text.pdf.PdfWriter.GetInstance(doc, ms);
doc.Open();
doc.SetPageSize(iTextSharp.text.PageSize.A4);
iTextSharp.text.pdf.PdfContentByte cb = outputWriter.DirectContent;
iTextSharp.text.pdf.PdfImportedPage page =
outputWriter.GetImportedPage(pdfRdr, i);
int rotation = pdfRdr.GetPageRotation(i);
if (rotation == 90 || rotation == 270)
{
if (rotation == 90)
{
cb.AddTemplate(page, 0, -1f, 1f, 0, 0,
pdfRdr.GetPageSizeWithRotation(i).Height);
}
if (rotation == 270)
{
cb.AddTemplate(page, 0, 1.0F, -1.0F, 0,
pdfRdr.GetPageSizeWithRotation(i).Width, 0);
}
}
else { cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); }
if (i > 1) {
output = Combine(output,cb.ToPdf(outputWriter));
}
else
{
output = cb.ToPdf(outputWriter);
}
doc.Close();
}
return output;
}