免费的C# PDF转Bmp

4
我正在编写一个程序,使用OCR(tessnet2)扫描图像文件并提取特定信息。在我发现我将要扫描来自Exchange服务器的PDF附件之前,这是很容易的。
我正在处理的第一个问题是如何将我的PDF转换为BMP文件。到目前为止,从TessNet2可以看出它只能读取图像文件-具体而言是BMP文件。因此,我现在的任务是将大小不确定(2-15页)的PDF转换为BMP图像。完成后,我可以使用已经构建的TessNet2代码轻松扫描每个图像。
我曾经看到使用Ghostscript来执行此任务的方法-我只想知道是否有另一个免费的解决方案或者你们中的某个好心人可以给我一个快速入门,以便利用Ghostscript进行此任务。

为什么不直接使用Ghostscript,iTextSharp, SharpPdf或其他免费的PDF库来打开PDF并直接获取文本呢? - Chris Dunaway
因为PDF是由我们的传真机接收的图像,作为TIFF文件扫描到我们的系统中,然后打包成PDF。所以我必须使用OCR来读取信息...有时非常不可靠。 - MaylorTaylor
我相信它们都不适用于商业目的。我是Ghostscript的新手,它适用于商业应用吗?这个链接有很多条款,我觉得大部分都说明它不适用于商业应用- http://www.artifex.com/page/licensing-information.html 你有什么想法? - Hemant Tank
3个回答

2
你也可以使用ImageMagick。而且它是完全免费的!无需试用或付款。
只需从此处下载ImageMagick .exe文件。安装它并在此处下载NuGet文件。
这就是代码!希望我能帮到你!(尽管问题是6年前提出的...)
步骤:
     using ImageMagick;
     public void PDFToBMP(string output)
     {
        MagickReadSettings settings = new MagickReadSettings();
        // Settings the density to 500 dpi will create an image with a better quality
        settings.Density = new Density(500);

        string[] files= GetFiles();
        foreach (string file in files)
        {
            string fichwithout = Path.GetFileNameWithoutExtension(file);
            string path = Path.Combine(output, fichwithout);
            using (MagickImageCollection images = new MagickImageCollection())
            {
                images.Read(fich);
                foreach (MagickImage image in images)
                {
                    settings.Height = image.Height;
                    settings.Width = image.Width;
                    image.Format = MagickFormat.Bmp; //if you want to do other formats of image, just change the extension here! 
                    image.Write(path + ".bmp"); //and here!
                }
            }
        }
    }

功能 GetFiles()
    public string[] GetFiles()
    {
        if (!Directory.Exists(@"your\path"))
        {
            Directory.CreateDirectory(@"your\path");
        }

        DirectoryInfo dirInfo = new DirectoryInfo(@"your\path");
        FileInfo[] fileInfos = dirInfo.GetFiles();
        ArrayList list = new ArrayList();
        foreach (FileInfo info in fileInfos)
        {
            if(info.Name != file)
            {
                // HACK: Just skip the protected samples file...
                if (info.Name.IndexOf("protected") == -1)
                    list.Add(info.FullName);
            }

        }
        return (string[])list.ToArray(typeof(string));
    }

1
我相信,要打开PDF文件仍然需要在计算机上安装GhostScript:https://www.imagemagick.org/script/formats.php - VDN
1
那段代码适用于我的PDF文件,我不需要GhostScript...但这是一种对这种工作有用的软件。 - Sofia Rodrigues
谢谢Sofia!只有两件事,你可能错过了,第二个函数中的文件是什么,以及fich是什么?再次感谢! - Federico Navarrete
@VDN,是的,GhostScript是必需的,因为我已经测试过了。 - Federico Navarrete

0

1
Adobe Reader XI的最终用户许可协议中指出:“3.2 服务器使用。本协议不允许您在计算机文件服务器上安装或使用该软件。” - OnceUponATimeInTheWest
根据作者在那个教程中的评论,显然他使用的是Acrobat。 - Curtis Rutland
这不是免费的。它需要安装Acrobat专业版。而Acrobat专业版是收费的。 - Jayanga Kaushalya
根据文章本身所述:“您必须在系统上安装“Adobe Acrobat Reader””。Reader是免费版本。如果作者对所需内容有误,您应该在该文章下发表评论。 - Curtis Rutland

0

我知道这是一个非常老的问题,但它仍然是一个持续存在的问题。如果你的目标是 .NET 6 或更高版本,我希望你能看一下我的库 Melville.PDF

Melville.Pdf 是一个 MIT 许可的 C# 实现的 PDF 渲染器。我希望它能满足我长期以来一直感到需要的需求。

如果你想从 PDF 文档中获取文本,渲染 + OCR 可能是一种困难的方式。有些 PDF 文件只是图像对象的薄包装,但许多文件实际上包含文本。Melville.PDF 目前还不支持文本提取,但它可能是从某些文件中获取文本的更简单的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接