使用c#将pdf保存到jpg

时间:2011-07-21 11:06:40

标签: c# image pdf jpeg

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

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

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

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

任何人都可以推荐我任何库来将pdf保存到jpeg中吗?例子也将非常受欢迎。

谢谢!


解决方案:如何使用C#

将pdf转换为图像
  1. 转到:http://www.codeproject.com/KB/cs/GhostScriptUseWithCSharp.aspx
  2. 下载de library
  3. 按照网络中的步骤进行操作
  4. 将您的代码添加到您的应用程序中,就像这样(非常简单):

        //Transform pdf to jpg
        PdfToImage.PDFConvert pp = new PDFConvert();
        pp.OutputFormat = "jpeg"; //format
        pp.JPEGQuality = 100; //100% quality
        pp.ResolutionX = 300; //dpi
        pp.ResolutionY = 300;
        pp.FirstPageToConvert = 1; //pages you want
        pp.LastPageToConvert = 1;
        pp.Convert(PATH_PDF+ "report.pdf", PATH_IMAGE + "name.jpg");  
    

3 个答案:

答案 0 :(得分:19)

图书馆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:更改代码以显示页面索引为0,如下面S.C.的评论所指出

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

    This link might be helpful

    <击>

答案 1 :(得分:0)

这就是我使用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;

}

答案 2 :(得分:0)

2020年答案新版本的that duplicate answer支持将生成的PDF转换回.NET Bitmap数组(适用于每个页面),因此您可以执行任何操作。前提是您已经购买了许可证,但是该许可证用于转换EVERTHING 2 PDF,而不是PDF 2 BITMAP,因此值得一试。

using IronPdf;
using System.Drawing;
var pdf = PdfDocument.FromFile("Example.pdf");
Bitmap[] pageImages = pdf.ToBitmap();
// do whatever that suits your needs here with the array