15

I need to send an image as in form of PDF file in my Android application but I dont have idea how to convert bitmap to PDF.

I am able to write pdf with text only.

Is there any solution?

1

3 Answers 3

33

I think you are using iText Library to convert the text to pdf. Use this to convert image to 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(); } } 
Sign up to request clarification or add additional context in comments.

11 Comments

Hi Ashok , import com.lowagie.text.pdf.* is not available in android. Can we add externally this library in Android ?? where can i get this library from ???
Yes, you have to add a the Lowagie iText Library to Android. You can download the latest version of iText from sourceforge.net/projects/itext/files . Just include this in your project's lib, add it to your build path and it's all set for you to crack it down.
Hey @KK_07k11A0585, what is the exception that you received? It should work if you place the itext library in your project and classpath.
@AshokFelix It is working now i tried thank u for reply But i want to convert a page of a pdf file into image or atleast i want to view pdf files. Is it possible using itext ????
@KK_07k11A0585, Unfortunately, iText doesn't convert PDF to image formats. It is not meant for that. 'View PDF' on which platform specifically? Desktop, Web, Mobile (Android, iPhone)? If it's Android, then there are a lot of Open Source PDF Viewers that you may want to go through to get an idea. Or even better, reuse them (mind the licences) in your apps.
|
5

Download source code from here(Convert Image to pdf in android programattically)

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(); } } } } 

Thanks!

Comments

0

A much simpler way.

Just pass context and list of file It will create a PDF file in cache dir Add your own logic to share/open PDF Works fast and reliable method

  • No library needed (Uses android internal android.graphics.pdf.PdfDocument classes)
  • Works in background, Doesn''t freeze UI
  • No need to declare and grant storage permission :)
private static void createPdf(Context context,ArrayList<File> data){ File pdfFile = new File(context.getExternalCacheDir().getAbsolutePath() + File.separator + "TemperoryPDF_"+System.currentTimeMillis()+".pdf"); Toast.makeText(context, "Creating PDF,Please wait..", Toast.LENGTH_SHORT).show(); new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... voids) { PdfDocument document = new PdfDocument(); try { for(File item:data) { Bitmap bitmap = BitmapFactory.decodeFile(item.getAbsolutePath()); 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); canvas.drawBitmap(bitmap, 0, 0, null); document.finishPage(page); } document.writeTo(new FileOutputStream(pdfFile)); } catch (IOException e) { e.printStackTrace(); }finally { document.close(); } return null; } @Override protected void onPostExecute(Void unused) { super.onPostExecute(unused); if(pdfFile.exists() && pdfFile.length()>0) { FileUtil.openFile(context, pdfFile.getAbsolutePath()); // See: https://gist.github.com/omkar-tenkale/34d3aa1966653e6949d1ddaee1ba3355 }else { Toast.makeText(context, "Something went wrong creating the PDF :(", Toast.LENGTH_SHORT).show(); } } }.execute(); } 

3 Comments

The geActionTypeToView(type) is not defined in the gist link you provided
Thats great but how to reduce size of created pdf file?
There aint much control over that..

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.