C. *_*oss 6 c# performance itextsharp
简介:如何减少使用tifs转换为pdf所需的时间itextsharp?
背景:我正在使用C#将一些相当大的tif转换为pdf itextsharp,并且我的性能非常糟糕.tif文件大约是50kb,有些文件最多有150个单独的tif文件(每个文件代表一个页面).对于一个132页的文档(~6500 kb),转换大约需要13分钟.在转换过程中,它运行的单CPU服务器运行在100%,这让我相信该进程是CPU绑定的.输出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();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 11
将GetInstance方法参数修改为
GetInstance(bm, ImageFormat.Tiff)
Run Code Online (Sandbox Code Playgroud)
这可能会提高性能
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(bm, ImageFormat.Tiff);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12280 次 |
| 最近记录: |