【问题标题】:Convert pdf to jpeg using a free c# solution [closed]使用免费的 c# 解决方案将 pdf 转换为 jpeg [关闭]
【发布时间】:2011-10-10 03:25:53
【问题描述】:

我需要使用 C# 将 pdf 文件转换为 jpeg。并且解决方案(库)必须是免费的。

我搜索了很多信息,但似乎没有得到任何明确的信息。

我已经尝试过 itextsharp 和 pdfbox(但我认为 pdf2image 仅适用于 java),但没有成功。

我尝试单独从 pdf 中提取图像,但是当我尝试提取图像时出现参数无效的错误...似乎它们有一个奇怪的编码。

任何人都可以向我推荐任何将 pdf 保存为 jpeg 的库吗?示例也将不胜感激。

【问题讨论】:

标签: c# image pdf jpeg


【解决方案1】:

pdfiumviewer 可能在这里会有所帮助。它也可以作为 nuget 使用。

  1. 创建一个新的 winforms 应用程序。向其中添加 nuget“PdfiumViewer”。
  2. 这还将在文件夹 x86 和 x64 中添加两个名为“pdfium.dll”的本机 dll 到您的项目中。将“复制到输出目录”设置为“始终复制”。
  3. 尝试以下代码(更改路径以适合您的设置)。

        try
        {
            using (var document = PdfiumViewer.PdfDocument.Load(@"input.pdf"))
            {
                var image = document.Render(0, 300, 300, true);
                image.Save(@"output.png", ImageFormat.Png);
            }
        }
        catch (Exception ex)
        {
            // handle exception here;
        }
    

    编辑 2:更改代码以显示页面索引基于以下 S.C. 的评论中指出的 0

编辑 1:更新的解决方案 你试过 pdfsharp 吗?

This link might be helpful

【讨论】:

  • @Vijay Gill 嗨。感谢您的建议,但它不起作用。它提取图像但格式不可读...似乎图像不是 jpeg 格式...我认为导出所有单个图像比将 pdf 的整个页面导出为图像更困难(这两种方法是可以满足我的要求)。
  • 在一些十六进制编辑器中打开图像,查看最初的几个字节/字符,通过查看签名来猜测格式。就像 BPM 有 BM,JPEG 在前几个字节中有 JFIF、PNG 和 PNG。这可能有助于您了解格式。
  • @Vijay Gill 我做到了,但我不明白我得到了什么。前 5 个十六进制数字是:“58 09 ec ed 07”。并且转导是不可压缩的。我认为这不是图像...
  • 我终于用 ghostscript 库搞定了 :)
  • @VijayGill 够公平的。我已经删除了反对票。我只是想防止很多人在根本不可能的情况下花费不必要的时间来尝试让 PDFSharp 工作。
【解决方案2】:

这就是我使用 PDFLibNet 的方式:

public void ConvertPDFtoHojas(string filename, String dirOut)
{
    PDFLibNet.PDFWrapper _pdfDoc = new PDFLibNet.PDFWrapper();
    _pdfDoc.LoadPDF(filename);

    for (int i = 0; i < _pdfDoc.PageCount; i++)
    {

        Image img = RenderPage(_pdfDoc, i);

        img.Save(Path.Combine(dirOut, string.Format("{0}{1}.jpg", i,DateTime.Now.ToString("mmss"))));

    }
    _pdfDoc.Dispose();
    return;
}
public  Image RenderPage(PDFLibNet.PDFWrapper doc, int page)
{
    doc.CurrentPage = page + 1;
    doc.CurrentX = 0;
    doc.CurrentY = 0;

    doc.RenderPage(IntPtr.Zero);

        // create an image to draw the page into
        var buffer = new Bitmap(doc.PageWidth, doc.PageHeight);
        doc.ClientBounds = new Rectangle(0, 0, doc.PageWidth, doc.PageHeight);
        using (var g = Graphics.FromImage(buffer))
        {
            var hdc = g.GetHdc();
            try
            {
                doc.DrawPageHDC(hdc);
            }
            finally
            {
                g.ReleaseHdc();
            }
        }
        return buffer;

}

【讨论】:

  • 看起来它不是所要求的免费库
  • 我能够使用包管理器中的 PDFLibNet 让这段代码工作我修改了这行代码... PDFLibNet64.PDFWrapper _pdfDoc = new PDFLibNet64.PDFWrapper();
猜你喜欢
  • 1970-01-01
  • 2010-12-14
  • 2016-07-03
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多