2

我可以将 pdf 页面转换为图像。如果它少于 50 页,它的工作速度很快……如果任何 pdf 大于 1000 页……它需要大量时间来完成。任何人都可以查看此代码并使其适用于大文件...我在 .NET3.5 中使用了 PdfLibNet dll(在 4.0 中不起作用)这是我的示例代码:

public void ConverIMG(string filename)
    {          
        PDFWrapper wrapper = new PDFWrapper();
        wrapper.RenderDPI = Dpi;
        wrapper.LoadPDF(filename);
        int count = wrapper.PageCount;
        for (int i = 1; i <= wrapper.PageCount; i++)
        {
            string fileName = AppDomain.CurrentDomain.BaseDirectory + @"IMG\" + i.ToString() + ".png";
            wrapper.ExportJpg(fileName, i, i, (double)100, 100);
            while (wrapper.IsJpgBusy)
            {
                Thread.Sleep(50);
            }
        }
        wrapper.Dispose();            
    }

PS:我们需要拆分页面并并行转换为图像,我们需要获得完成状态。 页数和时间消耗

4

1 回答 1

1

如果PDFWrapper大于 50 页的文档性能下降,则表明它写得不是很好。为了克服这个问题,您可以在 50 页批次中进行转换,并PDFWrapper在每批次之后重新创建。假设ExportJpg()随着调用次数的增加而变慢,并且其初始速度不取决于 PDF 的大小。

这只是解决明显问题的一种解决方法,PDFWrapper正确的解决方案是使用固定库。另外,我建议Thread.Sleep(1)您是否真的需要等待屈服。

public void ConverIMG(string filename)
{
    PDFWrapper wrapper = new PDFWrapper();
    wrapper.RenderDPI = Dpi;
    wrapper.LoadPDF(filename);
    int count = wrapper.PageCount;
    for (int i = 1; i <= count; i++)
    {
        string fileName = AppDomain.CurrentDomain.BaseDirectory + @"IMG\" + i.ToString() + ".png";
        wrapper.ExportJpg(fileName, i, i, (double) 100, 100);
        while (wrapper.IsJpgBusy)
        {
            Thread.Sleep(1);
        }

        if (i % 50 == 0)
        {
            wrapper.Dispose();
            wrapper = new PDFWrapper();
            wrapper.RenderDPI = Dpi;
            wrapper.LoadPDF(filename);
        }
    }
    wrapper.Dispose();
}
于 2012-04-30T15:16:54.800 回答