Управление разрешением изображения при покрытии изображения PNG в PDF с помощью iTextSharp - PullRequest
2 голосов
/ 10 августа 2010

Я создал изображение в формате PNG с разрешением 200 DPI и идеальным размером для альбомного формата 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 Ответ

1 голос
/ 06 апреля 2011

Это все работает, однако качество изображения ухудшилось.Какие-нибудь предложения относительно того, как я мог бы улучшить это?

Глядя на код в PngImage, похоже, что iText не поддерживает сжатие PNG как собственный PDF-фильтр, поэтому его нужно распаковать иперекомпрессирован как что-то еще.Это потому, что спецификация PDF не поддерживает это:

Только что проверил, конечно, выглядит так.

Лучшее исправление?JPEG и JPEG2000 поддерживаются как «родные» типы сжатия в PDF (и это отражено в iText [sharp]).Поэтому вместо этого используйте JPEG [2k] и, при необходимости, пропустите изображения через выбранную вами библиотеку преобразования изображений.

...