c# - 使用 ITextSharp 将 tif 转换为 pdf 的性能不佳

标签 c# performance itextsharp

总结:如何减少使用 itextsharp 将 tif 文件转换为 pdf 文件所需的时间?

背景:我正在使用 C# 和 itextsharp 将一些相当大的 tif 转换为 pdf,但我的性能非常差。每个 tif 文件大约 50kb,有些文档有多达 150 个单独的 tif 文件(每个代表一页)。对于一份 132 页的文档 (~6500 kb),转换大约需要 13 分钟。在转换期间,它运行的单 CPU 服务器以 100% 的速度运行,这让我相信该进程是 CPU 绑定(bind)的。输出的 pdf 文件为 3.5 MB。我对大小没问题,但对我来说花费的时间似乎有点长。

代码:

private void CombineAndConvertTif(IList<FileInfo> inputFiles, FileInfo outputFile)
{
    using (FileStream fs = new FileStream(outputFile.FullName, FileMode.Create, FileAccess.ReadWrite, FileShare.None))
    {
        Document document = new Document(PageSize.A4, 50, 50, 50, 50);
        PdfWriter writer = PdfWriter.GetInstance(document, fs);
        document.Open();
        PdfContentByte cb = writer.DirectContent;

        foreach (FileInfo inputFile in inputFiles)
        {
            using (Bitmap bm = new Bitmap(inputFile.FullName))
            {
                int total = bm.GetFrameCount(FrameDimension.Page);

                for (int k = 0; k < total; ++k)
                {
                    bm.SelectActiveFrame(FrameDimension.Page, k);
                    //Testing shows that this line takes the lion's share (80%) of the time involved.
                    iTextSharp.text.Image img =
                        iTextSharp.text.Image.GetInstance(bm, null, true);
                    img.ScalePercent(72f / 200f * 100);
                    img.SetAbsolutePosition(0, 0);

                    cb.AddImage(img);
                    document.NewPage();
                }
            }
        }

        document.Close();
        writer.Close();
    }

}

最佳答案

修改GetInstance方法参数为

GetInstance(bm, ImageFormat.Tiff) 

这可能会提高性能

iTextSharp.text.Image img =  iTextSharp.text.Image.GetInstance(bm, ImageFormat.Tiff);

关于c# - 使用 ITextSharp 将 tif 转换为 pdf 的性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1982028/

相关文章:

c# - ItextSharp (Itext) - 为段落设置自定义字体

sql - 如何在重负载下强制停止长 postgres 查询?

android - android中的通用缩放 subview

c# - iTextSharp 从现有的 PDF 模板生成 PDF

c# - DbContext 尝试将非空字段保存为空

javascript - IE 挂起故障排除

image - 使用/CCITTFaxDecode过滤器从PDF中提取图像

c# - Xamarin Forms 导航和处理登录页面

c# - 如何获取最大http请求长度时间?

C# SQlite - 使用 Query 计算字符串重复的次数(并发症)