iTextSharp rend l'image de mauvaise qualité en PDF
Je suis en utilisant iTextSharp pour imprimer un document PDF. Tout ce passe bien jusqu'à ce que je imprimer le logo de l'entreprise.
D'abord, j'ai remarqué que le logo de mauvaise qualité, mais après des tests avec plusieurs images, je me rends compte que c'était la iTextSharp rendu mal.
Le test que j'ai fait pour dire que c'est d'imprimer le fichier PDF à l'aide de mon code, puis sur modifier le document avec Acrobat 8.0, et j'ai dessiné une image. Ensuite imprimé les deux documents, et vu la différence notable.
Ma question est que si quelqu'un sait si cela peut être dû à un problème de montée en charge où je ne suis pas pour dire iTextSharp la façon dont il doit rendre l'image ou est un iTextSharp limitation.
Le code pour rendre l'image est la suivante:
Dim para As Paragraph = New Paragraph
para.Alignment = Image.RIGHT_ALIGN
para.Add(text)
Dim imageFile As String = String.Format("{0}{1}", GetAppSetting("UploadDirectory"), myCompany.LogoUrl)
Dim thisImage As Image = Image.GetInstance(imageFile)
thisImage.Alignment = Image.LEFT_ALIGN
para.Add(thisImage)
Les images imprimées sont les suivantes:
le texte d'alt http://img710.imageshack.us/img710/4199/sshot2y.png
Image imprimée directement avec iTextSharp
le texte d'alt http://img231.imageshack.us/img231/3610/sshot1z.png
Image éditée et imprimée avec Acrobat 8
EDIT:
Ces images de logo sont chargées à partir d'une page de Téléchargement où l'utilisateur uploades quel que soit le logo de l'image qu'il veut, et j'ai été mise à l'échelle de l'image en utilisant le code suivant:
Dim graph As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(newImage)
graph.CompositingMode = Drawing.Drawing2D.CompositingMode.SourceOver
graph.CompositingQuality = Drawing.Drawing2D.CompositingQuality.HighQuality
graph.InterpolationMode = Drawing.Drawing2D.InterpolationMode.Bicubic
graph.SmoothingMode = Drawing.Drawing2D.SmoothingMode.HighQuality
graph.PixelOffsetMode = Drawing.Drawing2D.PixelOffsetMode.HighQuality
graph.DrawImage(newImage, 0, 0, newWidth, newHeight)
graph.Dispose()
graph = Nothing
C'était à l'origine de perdre des informations à partir de l'image d'origine, de sorte que lors de l'impression du fichier pdf, que de perdre de l'info a été très sensible parce que, en quelque sorte, iTextSharp était le dessin plus grand qu'il était, peu importe la mise à l'échelle, j'ai mis dans.
J'ai donc essayé de stocker l'image telle qu'elle était à l'origine, la prévention de l'utilisateur à ne pas télécharger des images plus grandes que 200K et le redimensionnement de l'image afin que je puisse mantain le ratio d'aspect, et à l'aide que le redimensionnement avec la iTextSharp Image de l'objet avant qu'il a été imprimé.
Cela a résolu mon problème de l'image imprimée à la mauvaise qualité de ces images plus grandes, mais il a causé le document pdf pour avoir un saut de page ou tout simplement pas de place dans la page, chose bizarre, parce que l'apparence de l'image de bonne taille, mais il se comporte comme s'il était plus grand.
C'est une capture d'écran de la nouvelle image:
le texte d'alt http://img38.imageshack.us/img38/5756/sshot3tc.png
EDIT 2:
Lors de l'inspection du iTextSharp Image qui est renvoyée à être imprimé, il ne montre pas de modifications après la mise à l'échelle à l'aide de ScaleAbsolute, c'est pourquoi les sauts de page. Mais s'affiche correctement, comme l'image a bien été mis à l'échelle, mais l'arrière-plan "papier" ne l'était pas.
Le code utilisé est le suivant:
Dim imageFile As String = String.Format("{0}{1}", GetAppSetting("UploadDirectory"), myCompany.LogoUrl)
Dim thisImage Comme Image = Image.GetInstance(imageFile)
thisImage.L'Alignement = Image.LEFT_ALIGN
Dim newWidth As Integer = myCompany.LogoWidth
Dim newHeight As Integer = myCompany.LogoHeight
ResizeImageToMaxValues(newWidth, newHeight)
thisImage.ScaleAbsolute(newWidth, newHeight)
para.Add(thisImage)
pdf.PdfDocument.Add(para)
La méthode ResizeImage() ne le redimensionnement de la largeur et la hauteur en respectant le ratio d'aspect et de garder un max de largeur et une hauteur max de limites.
S'il vous plaît laissez-moi savoir si j'ai besoin de fournir plus d'informations. Grâce
OriginalL'auteur Sebastian | 2010-03-26
Vous devez vous connecter pour publier un commentaire.
J'ai également une bonne expérience avec iTextSharp le rendu des images claires et nettes. J'ai essayé les deux, l'ajout de l'image directement sur le document et en l'ajoutant à un paragraphe de la première. Les deux donnent très clairement les résultats.
Que j'utilise habituellement .images png, mais j'ai eu le même succès avec les formats jpeg, gif, etc.
Êtes-vous certain que lorsque vous récupérer l'image dans iTextSharp c'est le exacte même image que vous récupérer lorsque vous êtes dans Acrobat? Je demande, car il est difficile de savoir exactement ce que se passe dans votre code:
MODIFIER
Aussi, assurez-vous que l'image est de l'affichage à la taille qui vous attend, sauvegardez vos images à 72 dpi. 72 dpi est ce que iTextSharp utilise pour tout (images, les marges, etc..).
De cette façon, un 100px x 100px image va apparaître comme 100x100 sur votre document pdf. Vous n'aurez pas à vous soucier de mise à l'échelle ou de re-dimensionnement ensuite. Tout le temps que vous mettez à l'échelle d'une image (en haut ou en bas), vous courez le risque d'introduire des artefacts d'aliasing (effet de flou).
OriginalL'auteur Stewbob
En dehors de l'imprimante en question (Voir ci-dessus), le 3 X embout de Votre Ami a été la solution finale.
Donc, pour reformuler, si vous voulez que l'image soit 100 X 100 sur le fichier PDF, puis assurez-vous que votre image est 300px X 300px ou plus.
J'essaie d'utiliser 300 dpi) les images et je n'ai pas testé avec une baisse de la qualité des images.
C'est mon image de l'ajout de code:
OriginalL'auteur Atron Seige
Pour faire le rendu clair, essayez de faire de l'image 3 fois l'image d'origine, vous pouvez ensuite appliquer ScalePercent ou ScaleToFit pour redimensionner à la taille.
Exemple:
OriginalL'auteur Your friend
C'est étrange. Je reçois des super-des images nettes dans mes fichiers pdf. Il y a quelques différences entre ce que je fais et ce que vous avez. Par exemple, j'ai créer l'image comme ceci:
En outre, étant donné que mon image est trop grande pour tenir j'appelle:
Une autre différence est que j'ai ajouté l'image directement à la
Document
et non pas à unParagraph
, bien que je doute que c'est elle.Modifier:
Et enfin, mes images sont en jpeg.
Espère que cela aide.
merci beaucoup! Je suis à la recherche maintenant, je vais vous dire comment ça s'est passé
OriginalL'auteur Klaus Byskov Pedersen
L'astuce est d'utiliser de plus grandes images et la mise à l'échelle vers le bas. Si l'échelle n'est pas définie et l'image a sa taille normale, il peut être de mauvaise qualité. Si la balance est réglée vers le bas et l'image est tirée plus petit que sa taille naturelle, la qualité sera meilleure.
Exemple de mise à l'échelle vers le bas à 7 pour cent de la taille (haute qualité):
OriginalL'auteur Martin Staufcik
De mon côté, il a fini par être un paramètre de l'imprimante!
Changer les graphismes Raster (Vector) fait les images aussi nets qu'ils devraient l'être, mais ralenti le système de descendre énormément.
La deuxième solution (grâce à la FD) a été de changer les graphismes de retour de Vecteur, mais pour définir le "Traitement d'Image" pour le Mieux.
Nous sommes à l'aide d'un RICOH consommation des aficio MP C2050 PCL 6.
OriginalL'auteur Atron Seige
Utilisation plus grande des images png et qu'avec iTextSharp modifier la taille.
OriginalL'auteur DarkoM
Je suis tombé sur le même problème. J'ai été en mesure de le réparer par la désactivation de la compression. Mes fichiers pdf, je suis de la génération ne sont pas très grandes pour la taille du fichier frappé n'était pas trop cher.
OriginalL'auteur Andy Mahaffey