Convert pdf to jpeg using a free c# solution [closed]
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 1 year ago.
Improve this questionI need to convert a pdf file into a jpeg using C#. And the solution (library) has to be free.
I have searched a lot of information but seems that I don't get anything clear.
I already tried itexts开发者_StackOverflowharp and pdfbox (but this, the pdf2image is only for java, I think) with no success.
I tried to extract the images from the pdf individually, but I have an error of invalid parameters when I try to extract the images... Seems that they have a strange encoding.
Anyone can recommend me any library to save a pdf into a jpeg? Examples will be very appreciated too.
The library pdfiumviewer might be helpful here. It is also available as nuget.
- Create a new winforms app. Add nuget "PdfiumViewer" to it.
- This will also add two native dll's named "pdfium.dll" in folders x86 and x64 to your project. Set "Copy to Output Directory" to "Copy Always".
Try out the following code (change paths to suit your setup).
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; }
Edit 2: Changed code to show that page index is 0 based as pointed out in comment by S.C. below
Edit 1: Updated solution
Have you tried pdfsharp?
This link might be helpful
This is how I did it with 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;
}
精彩评论