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

2024-01-12

Summary:如何减少将 tif 转换为 pdf 所需的时间itextsharp?

背景:我正在使用 C# 将一些相当大的 tif 转换为 pdfitextsharp,而且我的表现非常糟糕。每个 tif 文件大约 50kb,某些文档最多有 150 个单独的 tif 文件(每个代表一个页面)。对于一份 132 页文档(约 6500 kb),转换大约需要 13 分钟。在转换过程中,它运行的单个 CPU 服务器以 100% 的速度运行,这让我相信该进程受到 CPU 限制。输出的 pdf 文件大小为 3.5 MB。我对尺寸很满意,但所花费的时间对我来说似乎有点长。

Code:

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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ITextSharp 将 tif 转换为 pdf 的性能不佳 的相关文章

随机推荐

  • Django 模型 = 业务逻辑 + 数据访问?或者数据访问层应该从 django 模型中分离出来?

    在 Django 中 建议的软件架构是将所有业务逻辑和数据访问放在模型中 但是 一些同事建议数据访问层应该与业务逻辑 业务服务层 分开 他们的理由是 如果使用不同的数据源 数据访问层可以隔离更改 他们还表示 业务逻辑可以存在于多个模型中 但
  • add如何使 django post_save 信号仅在创建期间运行

    我在项目中使用 django notifications 并且我想在使用信号创建模型时通知特定用户 但是在更新模型时 post save 也会运行 如何防止这种情况并仅运行 post save 方法当创建模型时 模型 py class Ca
  • 为什么简单的程序会占用这么多的存储空间?

    我用 C 创建了一个简单的 hello world 程序 如下所示 include
  • 我可以从 fsx 文件中安装/引用软件包吗?

    我正在尝试找到一个简单的解决方案 不需要太多手动工作来参考包 在 fsx 文件内 LinqPad 4 lets me simply add nuget packages 没有智能感知或自动完成 下载某些类型的软件包后删除软件包 模板 htt
  • IClientStore 的自定义实现

    我们使用 Entity Framework Core 和 Identityserver4 来存储配置数据 我们是否需要自定义实现 IClientStore 即 FindClientByIdAsync 接口来从数据库获取客户端 public
  • C++ 包含有和没有 .h [重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中使用 include 和 include 有什么区别 https stackoverflow com questions 301586 what is the difference betw
  • ssh server bash -c "cd /tmp && git pull" , cd 不起作用,需要先添加 echo

    我在 ubuntu 15 04 上 我的 ssh 客户端版本是 OpenSSH 6 9p1 Ubuntu 2ubuntu0 2 OpenSSL 1 0 2d 9 Jul 2015 当我尝试运行以下命令时ssh admin server ba
  • FactoryBot - 创建嵌套对象

    我正在学习如何在 Rails 中进行测试 并且正在为我的问题模型编写一个工厂 require factory bot FactoryBot define do factory question do sequence content n q
  • 获取 C 网页源代码的最有效方法是什么?

    In PHP我可以简单地做到这一点 file get contents http stackoverflow com questions ask 执行相同操作的最短代码是什么C UPDATE 当我使用curl编译示例时 出现如下错误 unr
  • 重写谷歌自定义搜索字符串

    我之前的自定义谷歌搜索是这样显示的 第一个链接 http raskim lt controller function 音乐 cx 014092587915392242087 3Agc6l6xlpkmq cof FORID 3A11 q th
  • Azure 云应用程序 ERR_CONNECTION_TIMED_OUT

    我想在 azure 容器服务中部署基于容器的应用程序 并遵循本教程 https learn microsoft com en us azure container service dcos swarm container service m
  • 禁止创建临时对象

    在调试多线程应用程序中的崩溃时 我终于在以下语句中找到了问题 CSingleLock m criticalSection TRUE 请注意 它正在创建 CSingleLock 类的未命名对象 因此临界区对象在此语句之后立即解锁 这显然不是程
  • Delphi GUI 设计规范和指南 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我一直在寻找一种方法来标准化我的应用程序布局以提高我的工作效率 因为我浪费了太多时间在每个表单和对话框
  • PackedArrays 有快速的产品操作吗?

    在 Mathematica 中 包含所有机器大小的整数或浮点数的向量 或矩形数组 可以存储在压缩数组中 这些对象占用的内存较少 并且某些操作对它们的速度要快得多 RandomReal如果可能的话 生成一个压缩数组 压缩数组可以用以下命令解压
  • 猜测C2DM是否已连接的方法

    我正在尝试对是否可以接收 C2DM 消息进行最佳猜测 我创建了一个应用程序 它依赖于在物理上无法访问的情况下将信息推送到手机 我知道 C2DM 不能保证传送 但我至少想知道何时可以传送消息 如果不是 我们就会退回到我们自己的推送服务 并且实
  • 检查 pandas 数据框列的字符串类型

    我有一个相当大的 pandas 数据框 11k 行和 20 列 一列具有混合数据类型 主要是数字 浮点 其中散布着少量字符串 在使用混合列中的数据执行一些统计分析之前 我通过查询其他列来对该数据帧进行子集化 但如果存在字符串 则无法执行此操
  • 如何在自定义错误页面中访问 HTTP StatusDescription

    当操作 asp net mvc 5 在数据库中找不到某些内容时 用户必须看到一个带有简短自定义错误消息的页面 例如 Invoice 5 does not exist 此外 响应必须有一个404HTTP 代码 另一个例子 当操作被不正确地调用
  • 使用 Apache POI 在 java 中读取和写入 xls 和 xlsx excel 文件

    我正在编写一个程序 需要读取和写入 Excel 文件 无论格式如何 xls 或 xlsx 我知道 Apache POI 但它似乎有不同的类来处理 xls 文件 HSSF 和 xlsx XSSF 文件 任何人都知道我如何实现我在这里想做的事情
  • 如何在node.js的客户端包含javascript?

    我是 Node js 和 javascript 的初学者 我想在 html 代码中包含外部 javascript 文件 这是 html 代码 index html 并且 这里是 javascript 代码 simple js documen
  • 使用 ITextSharp 将 tif 转换为 pdf 的性能不佳

    Summary 如何减少将 tif 转换为 pdf 所需的时间itextsharp 背景 我正在使用 C 将一些相当大的 tif 转换为 pdfitextsharp 而且我的表现非常糟糕 每个 tif 文件大约 50kb 某些文档最多有 1