Saltar al contenido

Mal rendimiento convertir tif a pdf usando ITextSharp

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);

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *