使用iTextSharp将PNG图像转换为PDF时控制图像分辨率

时间:2010-08-10 03:38:13

标签: vb.net pdf itextsharp

我创建了一个200 DPI的PNG图像,并且尺寸适合横向A4页面尺寸。我需要将其转换为PDF文档,因此我将iTextSharp库与下面的代码一起使用。

这一切都有效,但图像质量下降了。关于如何改进这个的任何建议?

Public Sub ConvertPNGtoPDF(ByVal inputFile As String, ByVal outputFile As String)
        Using fs As New FileStream(outputFile, FileMode.Create, FileAccess.ReadWrite, FileShare.None)
            Dim document As New Document(PageSize.A4.Rotate, 0, 0, 0, 0)

            Dim writer As PdfWriter = PdfWriter.GetInstance(document, fs)

            document.Open()

            Dim cb As PdfContentByte = writer.DirectContent

            Using bm As New Bitmap(inputFile)
                Dim total As Integer = bm.GetFrameCount(FrameDimension.Page)

                For k As Integer = 0 To total - 1
                    bm.SelectActiveFrame(FrameDimension.Page, k)
                    Dim img As iTextSharp.text.Image = iTextSharp.text.Image.GetInstance(bm, Nothing, False)

                    img.SetDpi(200, 200)
                    img.ScalePercent(72.0F / 200.0F * 100)
                    img.SetAbsolutePosition(0, 0)

                    cb.AddImage(img)
                    document.NewPage()
                Next
            End Using

            document.Close()
            writer.Close()
        End Using

    End Sub

1 个答案:

答案 0 :(得分:1)

  

这一切都有效,但图像质量下降了。关于如何改进这个的任何建议?

查看PngImage中的代码,看起来iText不支持将PNG压缩作为PDF原生过滤器,因此必须将其解压缩并重新压缩为Something Else。这是因为PDF规范不支持它:

刚检查过,确实看起来那样。

最好的修复?支持JPEG和JPEG2000作为PDF中的“本机”压缩类型(这在iText [sharp]中得到了回应)。因此,请使用JPEG [2k],并根据需要通过您选择的图像转换库运行图像。