Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo convertir la imagen en PDF?

Estoy desarrollando una aplicación donde necesito convertir una imagen en PDF. He intentado algo, pero el problema es que el tamaño de la imagen en ese PDF es muy pequeño. Necesito una solución para arreglar esto. También estoy buscando la conversión de varias imágenes en un único documento PDF. Voy a publicar el código que he intentado.

public void convertPDF(byte[] path) { String FILE = "mnt/sdcard/FirstPdf.pdf"; Document document=new Document(); try { PdfWriter.getInstance(document, new FileOutputStream(FILE)); document.open(); try { image=Image.getInstance(path); document.add(new Paragraph("My Heading")); document.add(image); document.close(); } catch (IOException e) { e.printStackTrace(); } } catch (DocumentException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } } 

Cuando convierto Bitmap a Byte matriz, estoy comprimiendo la imagen y supongo, esa es la razón. Sin comprimir la imagen, no puedo convertir Bitmap a Byte Array.

  • La vista de Recycler no se desplaza correctamente después de implementar el desplazamiento para actualizar el diseño.
  • ExpandableListView Animación de diapositivas en el grupo expand / collapse
  • Android cómo poner un cuadro de diálogo después de presionar un botón de nuevo
  • Android: obtener un identificador único de notificación
  • Uso de animaciones de Android L para cambiar entre actividades
  • Cómo establecer la altura de filas ListView
  •   ByteArrayOutputStream stream = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.PNG,100,stream); byte[] byteArray=stream.toByteArray(); convertPDF(byteArray); 

    ¿Hay alguna solución para esto?

    ACTUALIZADO

    Aquí he implementado la respuesta sugerida por @Burak Cakir en la respuesta. Pero ahora estoy obteniendo una imagen más grande en PDF. Para una mejor comprensión, por favor, busque las imágenes a continuación. Introduzca aquí la descripción de la imagen

    La imagen en realidad es Introduzca aquí la descripción de la imagen

  • Cómo borrar las viejas preferencias al actualizar la aplicación de Android?
  • Android obtiene el valor del botón de radio seleccionado
  • Cómo cambiar el color de etiqueta flotante de TextInputLayout
  • Cómo mostrar el progreso al cargar una url a webview en android?
  • Mostrar AlertDialog en cualquier posición de la pantalla
  • ¿Cómo abrir / mostrar documentos (.pdf, .doc) sin aplicación externa?
  • 3 Solutions collect form web for “¿Cómo convertir la imagen en PDF?”

    Le sugiero que utilice la biblioteca pdf de itext. Aquí está el gradle: 'com.itextpdf: itextpdf: 5.1.1'

      Document document=new Document(); String dirpath=android.os.Environment.getExternalStorageDirectory().toString(); PdfWriter.getInstance(document,new FileOutputStream(dirpath+"/example.pdf")); // Change pdf's name. document.open(); Image img =Image.getInstance(dirpath+"/"+"example.jpg"); // Change image's name and extension. float scaler = ((document.getPageSize().getWidth() - document.leftMargin() - document.rightMargin() - 0) / img.getWidth()) * 100; // 0 means you have no indentation. If you have any, change it. img.scalePercent(scaler); img.setAlignment(Image.ALIGN_CENTER | Image.ALIGN_TOP); //img.setAlignment(Image.LEFT| Image.TEXTWRAP); /* float width = document.getPageSize().width() - document.leftMargin() - document.rightMargin(); float height = document.getPageSize().height() - document.topMargin() - document.bottomMargin(); img.scaleToFit(width, height)*/ Or try this. document.add(img); document.close(); 

    Mediante el uso de este código puede convertir imagen en archivo pdf.

     import java.io.*; import com.lowagie.text.*; import com.lowagie.text.pdf.*; public class imagesPDF { public static void main(String arg[])throws Exception { Document document=new Document(); PdfWriter.getInstance(document,new FileOutputStream("YourPDFHere.pdf")); document.open(); Image image = Image.getInstance ("yourImageHere.jpg"); document.add(new Paragraph("Your Heading for the Image Goes Here")); document.add(image); document.close(); } } 

    Para la imagen a PDF hay bibliotecas disponibles como iText, droidtext para que pueda utilizarlo.

    Descargar código fuente de aquí ( Convertir imagen a pdf en android programaticamente )

    MainActivity.java:

     package com.deepshikha.convertbitmap; import android.Manifest; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.pdf.PdfDocument; import android.net.Uri; import android.provider.MediaStore; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.DisplayMetrics; import android.util.Log; import android.view.Display; import android.view.View; import android.view.WindowManager; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; public class MainActivity extends AppCompatActivity implements View.OnClickListener { public static final int GALLERY_PICTURE = 1; Button btn_select, btn_convert; ImageView iv_image; boolean boolean_permission; boolean boolean_save; Bitmap bitmap; public static final int REQUEST_PERMISSIONS = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); listener(); fn_permission(); } private void init() { btn_select = (Button) findViewById(R.id.btn_select); btn_convert = (Button) findViewById(R.id.btn_convert); iv_image = (ImageView) findViewById(R.id.iv_image); } private void listener() { btn_select.setOnClickListener(this); btn_convert.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.btn_select: Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, GALLERY_PICTURE); break; case R.id.btn_convert: if (boolean_save){ Intent intent1=new Intent(getApplicationContext(),PDFViewActivity.class); startActivity(intent1); }else { createPdf(); } break; } } private void createPdf(){ WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); DisplayMetrics displaymetrics = new DisplayMetrics(); this.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); float hight = displaymetrics.heightPixels ; float width = displaymetrics.widthPixels ; int convertHighet = (int) hight, convertWidth = (int) width; // Resources mResources = getResources(); // Bitmap bitmap = BitmapFactory.decodeResource(mResources, R.drawable.screenshot); PdfDocument document = new PdfDocument(); PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(bitmap.getWidth(), bitmap.getHeight(), 1).create(); PdfDocument.Page page = document.startPage(pageInfo); Canvas canvas = page.getCanvas(); Paint paint = new Paint(); paint.setColor(Color.parseColor("#ffffff")); canvas.drawPaint(paint); bitmap = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight(), true); paint.setColor(Color.BLUE); canvas.drawBitmap(bitmap, 0, 0 , null); document.finishPage(page); // write the document content String targetPdf = "/sdcard/test.pdf"; File filePath = new File(targetPdf); try { document.writeTo(new FileOutputStream(filePath)); btn_convert.setText("Check PDF"); boolean_save=true; } catch (IOException e) { e.printStackTrace(); Toast.makeText(this, "Something wrong: " + e.toString(), Toast.LENGTH_LONG).show(); } // close the document document.close(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == GALLERY_PICTURE && resultCode == RESULT_OK) { if (resultCode == RESULT_OK) { Uri selectedImage = data.getData(); String[] filePathColumn = {MediaStore.Images.Media.DATA}; Cursor cursor = getContentResolver().query( selectedImage, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String filePath = cursor.getString(columnIndex); cursor.close(); bitmap = BitmapFactory.decodeFile(filePath); iv_image.setImageBitmap(bitmap); btn_convert.setClickable(true); } } } private void fn_permission() { if ((ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)|| (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)) { if ((ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE))) { } else { ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_PERMISSIONS); } if ((ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE))) { } else { ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSIONS); } } else { boolean_permission = true; } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_PERMISSIONS) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { boolean_permission = true; } else { Toast.makeText(getApplicationContext(), "Please allow the permission", Toast.LENGTH_LONG).show(); } } } } 

    ¡Gracias!

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.