2011-07-21 85 views
30

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

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

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

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

任何人都可以推荐我任何库将pdf保存为jpeg吗?例子也将非常赞赏。

谢谢!


SOLUTION:如何使用C#

  1. 转到PDF转换为图像:http://www.codeproject.com/KB/cs/GhostScriptUseWithCSharp.aspx
  2. 下载去图书馆
  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"); 
    
+1

感谢分享解决方案。 –

+1

完美!工作非常非常好! – Joe

回答

12

图书馆pdfiumviewer可能会对您有所帮助。它也可作为nuget使用。

  1. 创建一个新的winforms应用程序。将nuget“PdfiumViewer”添加到它。
  2. 这还将在文件夹x86和x64中为您的项目添加两个本机dll的名为“pdfium.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如下

编辑1在评论中指出SC:更新的解决方案 你试过pdfsharp ?

This link might be helpful

+0

我喜欢PDFSharp ...似乎处理一切PDF +1 – War

+0

@Vijay Gill嗨。感谢您的建议,但它不起作用。它提取的图像,但格式不可读...似乎图像不是以jpeg格式...我认为导出所有单个图像比将整个pdf页面导出为图像更困难(两种方法对于我想要的都可以)。 – FrioneL

+0

在某个十六进制编辑器中打开图像,并通过查看签名来查看最初的几个字节/字符以猜测格式。像BPM有BM,JPEG的前几个字节中有JFIF,PNG和PNG。这可能有助于你了解格式。 –

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; 

} 
+1

看起来不是免费的图书馆 –