我需要使用C#将pdf文件转换为jpeg。解决方案(库)必须是免费的。
我搜索过很多信息,但似乎没有得到任何明确的信息。
我已经尝试了itextsharp和pdfbox(但是,我认为pdf2image仅适用于java)但没有成功。
我试图单独从pdf中提取图像,但是当我尝试提取图像时,我有一个无效参数错误...似乎它们有一个奇怪的编码。
任何人都可以推荐我任何库来将pdf保存到jpeg中吗?例子也将非常受欢迎。
谢谢!
解决方案:如何使用C#
将pdf转换为图像将您的代码添加到您的应用程序中,就像这样(非常简单):
//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");
答案 0 :(得分:19)
图书馆pdfiumviewer可能会对您有所帮助。它也可以作为nuget。
尝试以下代码(更改路径以适合您的设置)。
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.的评论所指出
编辑1:更新解决方案
你试过pdfsharp吗?
<击> 撞击>
答案 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