Preciso converter um PDF para JPG em uma aplicação VB.NET / .NET Core. Estou usando a biblioteca PdfiumViewer
e este código:
Function ConvertPDFToJPG(pdfPath As String, outputPath As String) As String
Try
If Not File.Exists(pdfPath) Then
Return "Error: El archivo PDF no existe."
End If
' Cargar el PDF
Dim pdf As PdfDocument = PdfDocument.Load(pdfPath)
Dim image as Bitmap
image = pdf.Render(0,10000,10000, false)
image.RotateFlip(RotateFlipType.Rotate270FlipNone)
Dim encoder As ImageCodecInfo = ImageCodecInfo.GetImageDecoders().First(Function(c) c.FormatID = ImageFormat.Jpeg.Guid)
Dim encoderParams As New EncoderParameters(1)
encoderParams.Param(0) = New EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L)
Dim outputFile as String = outputPath & "_page-" & (1).ToString("D4") & ".jpg"
image.Save(outputFile, encoder, encoderParams)
Return "OK"
Catch ex As Exception
Return "Error: " & ex.Message
End Try
End Function
Funciona, mas a imagem resultante tem apenas 200 KB mais ou menos, e quando insiro um Crystal Reports, ela fica desfocada. Alguma solução?
Vi sua solicitação e verifiquei a biblioteca, ela é um pouco antiga. Mas aqui está o problema:
Em
PdfiumViewer.Render(pageIndex, dpiX, dpiY, forPrinting:=True)
:O DPI afeta a qualidade interna (anti-aliasing), não a resolução de saída.
As dimensões da imagem geralmente são fixadas com base no tamanho interno do PDF em pontos (1pt = 1/72").
Então, reservei um tempo para escrever um exemplo rápido e CLI para você. Confira aqui. Basicamente, você redimensionaria a imagem após a conversão. Não há outra maneira de obter uma imagem de maior qualidade.
https://github.com/The-Running-Dev/ManagePDFs/blob/main/ManagePDFs-Legacy-Lib/PdfJpegConverter.vb