总结:如何减少使用 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/