¿Por qué las imágenes se recortan al convertir imágenes a PDF utilizando la biblioteca iText en android

En mi aplicación quiero convertir las imágenes seleccionadas por el usuario en un solo archivo PDF. Estoy usando la biblioteca iText como lo sugieren muchas personas. El usuario selecciona múltiples imágenes y se crea un pdf con él donde cada imagen es 1 página pdf.

El código que estoy usando es el siguiente

Document document = new Document(PageSize.A4); try { String path = Environment.getExternalStorageDirectory()+"/PDFile.pdf"; File file= new File(path); if(file.exists()) { } else { file.createNewFile(); } PdfWriter.getInstance(document,new FileOutputStream(path)); document.open(); for(int i =0; i<pdfImage.size();i++) { Image image = Image.getInstance(pdfImage.get(i)); image.scaleAbsolute(PageSize.A4); image.setAbsolutePosition(0, 0); document.add(image); } document.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } 

El pdf se está generando, pero la imagen se recorta. Sólo la mitad de la imagen es visible, el resto se recorta.

¿Tengo que fijar cualquier cosa para que el pdf adopte al tamaño de la imagen ??

¿O tengo que cambiar o cambiar el tamaño de la imagen para adoptar a pdf tamaño de página?

¡¡Por favor ayuda!! No tengo ni idea de cómo resolver esto ???

Cuando usted hace esto:

 Document document = new Document(); 

A continuación, crea implícitamente un documento del cual las páginas tienen un tamaño de página conocido como A4. Es decir: una anchura de 595 y una altura de 842 unidades de usuario.

Si agrega imágenes que son más pequeñas, no se recortarán. Si agrega imágenes que son más grandes. Las imágenes serán recortadas …

Si desea que una imagen se ajuste exactamente a una página, tiene dos opciones:

  1. Adaptar el tamaño de las páginas, o
  2. Adapte el tamaño de la imagen.

Ambas opciones son equivalentes, ya que iText no cambiará la resolución de las imágenes: todos los píxeles se conservarán.

Opción 1:

Vea mi respuesta a la pregunta: Añadir mapas en iText Java

En esta pregunta, hago esto:

 Image img = Image.getInstance(IMG); Document document = new Document(img); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest)); document.open(); img.setAbsolutePosition(0, 0); document.add(img); document.close(); 

El objeto Document acepta un Rectangle como parámetro. Este Rectangle define el tamaño de página en unidades de usuario. Como la clase Image es una subclase de la clase Rectangle , puedo usar la instancia de Image como parámetro para crear la instancia de Document .

Otra opción sería hacer esto:

 Rectangle pagesize = new Rectangle(img.getScaledWidth(), img.getScaledHeight()); Document document = new Document(pagesize); 

Si el documento tiene páginas diferentes, debe utilizar el método setPageSize() antes de activar una nueva página.

Opcion 2:

Ver mi respuesta a la pregunta: Backgroundimage en el paisaje y cubrir todo pdf con iTextSharp

El código se ve así (bueno, el código actual es un poco diferente, pero esto también funcionará):

 Document document = new Document(PageSize.A4.rotate()); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest)); document.open(); Image image = Image.getInstance(IMAGE); image.scaleAbsolute(PageSize.A4.rotate()); image.setAbsolutePosition(0, 0); document.add(image); document.close(); 

Aquí tengo páginas con el tamaño A4 en el paisaje, y la escala de la imagen para que se ajuste a la página por completo. Eso es peligroso porque cambia la relación de aspecto de la imagen. Esto puede resultar en imágenes distorsionadas. El reemplazo de scaleAbsolute() por scaleToFit() evitará ese problema, pero tendrá algunos márgenes blancos si la relación de aspecto de la imagen es diferente de la relación de aspecto de la página.

Importante: Tenga en cuenta que he utilizado setAbsolutePosition(0, 0); en ambos casos. Estoy introduciendo esta línea para que la esquina inferior izquierda de la imagen coincida con la esquina inferior izquierda de la página. Si no lo hace, verá un margen hacia abajo y hacia la izquierda, y su imagen será recortada a la parte superior ya la derecha.

  • ¿Cómo abrir / mostrar documentos (.pdf, .doc) sin aplicación externa?
  • APV lector pdf. Problemas de instalación, descompresión y biblioteca nativa
  • Problema de navegación de páginas PDF
  • Pdf visor api / biblioteca para la aplicación de Android?
  • Almacenar cadena codificada en base64 como archivo
  • Una manera de guardar los resultados HTML a través de JS
  • Incrustado google docs visor iframe en el navegador android
  • PDF para bitmap imagen converso usando mupdf n android
  • ¿Qué le pasó a DroidText?
  • Error sobre el contexto FLAG_ACTIVITY_NEW_TASK
  • Cómo obtener la actividad de vista Web para desaparecer con PDF Link Action_view
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.