pdf - Calidad de imagen usando Itext
image-quality (2)
Es posible generar un documento PDF utilizando Itext que contiene imágenes con una resolución de 150 ppp.
(Parece ser que Itext está reduciendo la calidad de las imágenes a 72 ppp).
Gracias
Si la calidad de la imagen es pobre en PDF. Puedes hacer lo siguiente:
- Crea imágenes de mayor tamaño con alta resolución.
- Baje la imagen mientras se exporta en un archivo PDF.
Esto solucionó mi problema.
Vea este thread , específicamente esta publicación que explica que los PDF no tienen un concepto de DPI. Este hilo también es una buena lectura.
Esencialmente (y esto no es técnicamente preciso pero lo suficientemente cercano) de manera predeterminada, cuando coloca una imagen con iText, suponga que por cada 72 píxeles se utilizará 1 pulgada de espacio impreso. Si desea cambiar esta regla, entonces necesita cambiar la matrix
la imagen. Puede hacer esto directamente (lo que es difícil) o usar los métodos de escala (mucho más fáciles) como scaleAbsolute()
, scaleAbsoluteWidth()
, scaleAbsoluteHeight()
, scalePercentage()
y scaleToFit()
.
Cambiar la matriz no cambia la imagen de ninguna manera, solo (esencialmente) cambia la definición de cuántos píxeles se abarrotan en una pulgada, que cuando se imprime se denomina DPI. (En realidad, está cambiando la relación entre los píxeles de la imagen y las unidades de usuario del documento, pero realmente no necesita saberlo). Por lo tanto, de manera predeterminada, una imagen de 200x200 píxeles colocada por iText debería imprimirse a aproximadamente 2 3/4 ". Si llama a scaleAbsolute(100,100)
esos 200 píxeles en 100 "unidades de usuario", lo que le otorgará un DPI efectivo de 144 e imprimirá a aproximadamente 1 3/8 ".
Todo esto realmente puede hacer que te duela la cabeza, especialmente si estás acostumbrado a los programas de imágenes, como Adobe Photoshop, que te permiten establecer una "resolución" para algunos tipos de imágenes. Desafortunadamente, esto es más como una "sugerencia de impresión" y realmente no cambia mucho el archivo. Una imagen de 100x100 píxeles a 72DPI es exactamente igual a 100x100 píxeles a 300DPI, excepto cuando se imprime. iText ignora por completo esta sugerencia de impresión, ya sea porque es todo lo que es o porque no todos los formatos de imagen lo admiten. (No relacionado directamente, pero un mito común es que "Guardar para la Web" crea imágenes 72DPI cuando la realidad elimina completamente la información de resolución del archivo).
Ignorando lo que realmente está sucediendo, para hacer que la imagen sea lo que usted piensa como 150 DPI, tome el ancho y la altura de la imagen de origen en píxeles y scaleAbsolute()
por 0.48
(72 dividido por 150) y pase esos nuevos números a scaleAbsolute()
.
Existe un método en la clase de Image
llamado setDPI
pero, por lo que puedo decir, en realidad no tiene ningún efecto en la ubicación de la imagen y es más bien una cosa informativa.