2010-08-10 4 views
2

J'ai créé une image PNG de 200 DPI, parfaitement dimensionnée pour un format de page A4 paysage. J'avais besoin de le convertir en un document PDF, j'ai donc utilisé la bibliothèque iTextSharp avec le code ci-dessous.Contrôle de la résolution de l'image lors de la conversion d'une image PNG en fichier PDF à l'aide de iTextSharp

Tout cela fonctionne, mais la qualité de l'image s'est dégradée. Des suggestions sur la façon dont je pourrais améliorer cela?

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 

Répondre

1

tout cela fonctionne, mais la qualité d'image est dégradée. Des suggestions sur la façon dont je pourrais améliorer cela?

En regardant le code PngImage, il semble que iText ne supporte pas la compression PNG comme un filtre PDF natif, donc il doit être décompressé et recomprimé comme quelque chose d'autre. Est-ce parce que la spécification PDF ne le supporte pas:

Juste vérifié, ça a l'air bien comme ça.

Meilleure solution? JPEG et JPEG2000 sont pris en charge en tant que types de compression "natifs" au format PDF (et ceci est répercuté dans iText [sharp]). Utilisez donc JPEG [2k] à la place, et exécutez vos images à travers votre bibliothèque de conversion d'image de choix si nécessaire.

+0

Merci Mark. Je vais essayer de voir si les résultats sont meilleurs! – darcher

Questions connexes