Necesitamos tu apoyo para difundir nuestras crónicas acerca de las ciencias de la computación.
Solución:
Modifique el argumento del método GetInstance para
GetInstance(bm, ImageFormat.Tiff)
esto podría aumentar el rendimiento
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(bm, ImageFormat.Tiff);
No estoy seguro de lo que estaba disponible cuando se publicó originalmente esta pregunta, pero parece que iText 5.x tiene más que ofrecer al convertir TIFF a PDF. También hay un ejemplo de código básico en iText in Action 2nd Edition “part3.chapter10.PagedImages” y no he notado ningún problema de rendimiento. Sin embargo, la muestra no maneja bien el escalado, así que lo cambié así:
public static void AddTiff(Document pdfDocument, Rectangle pdfPageSize, String tiffPath)
RandomAccessFileOrArray ra = new RandomAccessFileOrArray(tiffPath);
int pageCount = TiffImage.GetNumberOfPages(ra);
for (int i = 1; i <= pageCount; i++)
Image img = TiffImage.GetTiffImage(ra, i);
if (img.ScaledWidth > pdfPageSize.Width
El problema es el tiempo que tarda iTextSharp en terminar de jugar con su objeto System.Drawing.Image.
Para acelerar esto literalmente a una décima de segundo en algunas pruebas que he ejecutado, debe guardar el cuadro seleccionado en un flujo de memoria y luego pasar el byte array de datos directamente al método GetInstance en iTextSharp, vea a continuación…
bm.SelectActiveFrame(FrameDimension.Page, k);
iTextSharp.text.Image img;
using(System.IO.MemoryStream mem = new System.IO.MemoryStream())
// This jumps all the inbuilt processing iTextSharp will perform
// This will create a larger pdf though
bm.Save(mem, System.Drawing.Imaging.ImageFormat.Png);
img = iTextSharp.text.Image.GetInstance(mem.ToArray());
img.ScalePercent(72f / 200f * 100);