23

I can generate PDF file in android application using iText , so PDF document is generated but,
image is not included in PDF file.

Johan
  • 74,508
  • 24
  • 191
  • 319
Chirag Patel
  • 2,320
  • 3
  • 24
  • 38

3 Answers3

28
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.util.Date;

import com.itextpdf.text.Anchor;
import com.itextpdf.text.BadElementException;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Chapter;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.List;
import com.itextpdf.text.ListItem;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Section;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfWriter;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.widget.TextView;

public class Main extends Activity {

    private static String FILE = Environment.getExternalStorageDirectory()+File.separator+"firstPdf.pdf";
    private static Font catFont = new Font(Font.FontFamily.TIMES_ROMAN, 18,
            Font.BOLD);
    private static Font redFont = new Font(Font.FontFamily.TIMES_ROMAN, 12,
            Font.NORMAL, BaseColor.RED);
    private static Font subFont = new Font(Font.FontFamily.TIMES_ROMAN, 16,
            Font.BOLD);
    private static Font smallBold = new Font(Font.FontFamily.TIMES_ROMAN, 12,
            Font.BOLD);
    TextView txt1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        txt1=(TextView) findViewById(R.id.textView1);

        try {
            Document document = new Document();
            PdfWriter.getInstance(document, new FileOutputStream(FILE));
            document.open();
            addMetaData(document);
            addTitlePage(document);
            addContent(document);
            //createImage();
            document.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void addMetaData(Document document) {
        document.addTitle("My first PDF");
        document.addSubject("Using iText");
        document.addKeywords("Java, PDF, iText");
        document.addAuthor("Lars Vogel");
        document.addCreator("Lars Vogel");
    }

    private static void addTitlePage(Document document)
            throws DocumentException {
        Paragraph preface = new Paragraph();
        // We add one empty line
        addEmptyLine(preface, 1);
        // Lets write a big header
        preface.add(new Paragraph("Title of the document", catFont));

        addEmptyLine(preface, 1);
        // Will create: Report generated by: _name, _date
        preface.add(new Paragraph(
                "Report generated by: " + System.getProperty("user.name") + ", " + new Date(), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
                smallBold));
        addEmptyLine(preface, 3);
        preface.add(new Paragraph(
                "This document describes something which is very important ",
                smallBold));

        addEmptyLine(preface, 8);

        preface.add(new Paragraph(
                "This document is a preliminary version and not subject to your license agreement or any other agreement with vogella.de ;-).",
                redFont));

        document.add(preface);
        // Start a new page
        document.newPage();
    }

    private static void addContent(Document document) throws DocumentException {
        Anchor anchor = new Anchor("ESTIMATING APP", catFont);
        anchor.setName("ESTIMATING APP");

        // Second parameter is the number of the chapter
        Chapter catPart = new Chapter(new Paragraph(anchor), 1);

        Paragraph subPara = new Paragraph("Subcategory 1", subFont);
        Section subCatPart = catPart.addSection(subPara);
        subCatPart.add(new Paragraph("Hello"));

        subPara = new Paragraph("Subcategory 2", subFont);
        subCatPart = catPart.addSection(subPara);
        subCatPart.add(new Paragraph("Paragraph 1"));
        subCatPart.add(new Paragraph("Paragraph 2"));
        subCatPart.add(new Paragraph("Paragraph 3"));

        // Add a list
        createList(subCatPart);
        Paragraph paragraph = new Paragraph();
        addEmptyLine(paragraph, 5);
        subCatPart.add(paragraph);

        // Add a table
        createTable(subCatPart);

        // Now add all this to the document
        document.add(catPart);

        // Next section
        anchor = new Anchor("Second Chapter", catFont);
        anchor.setName("Second Chapter");

        // Second parameter is the number of the chapter
        catPart = new Chapter(new Paragraph(anchor), 1);

        subPara = new Paragraph("Subcategory", subFont);
        subCatPart = catPart.addSection(subPara);
        subCatPart.add(new Paragraph("This is a very important message"));

        // Now add all this to the document
        document.add(catPart);

    }

    private static void createTable(Section subCatPart)
            throws BadElementException {
        PdfPTable table = new PdfPTable(3);

        // t.setBorderColor(BaseColor.GRAY);
        // t.setPadding(4);
        // t.setSpacing(4);
        // t.setBorderWidth(1);

        PdfPCell c1 = new PdfPCell(new Phrase("Job Name:"));
        c1.setHorizontalAlignment(Element.ALIGN_CENTER);
        table.addCell(c1);

        c1 = new PdfPCell(new Phrase("Test 001"));
        c1.setHorizontalAlignment(Element.ALIGN_CENTER);
        table.addCell(c1);

        c1 = new PdfPCell(new Phrase(""));
        c1.setHorizontalAlignment(Element.ALIGN_CENTER);
        table.addCell(c1);
        table.setHeaderRows(1);

        table.addCell("Date:");
        table.addCell("1.1");
        table.addCell("");
        table.addCell("Labor Rate:");
        table.addCell("2.2");
        table.addCell("");
        table.addCell("Labor Cost:");
        table.addCell("3.2");
        table.addCell("3.3");

        subCatPart.add(table);

    }

    private static void createList(Section subCatPart) {
        List list = new List(true, false, 10);
        list.add(new ListItem("First point"));
        list.add(new ListItem("Second point"));
        list.add(new ListItem("Third point"));
        subCatPart.add(list);
    }

    private static void addEmptyLine(Paragraph paragraph, int number) {
        for (int i = 0; i < number; i++) {
            paragraph.add(new Paragraph(" "));
        }
    }
Chirag Patel
  • 2,320
  • 3
  • 24
  • 38
  • 11
    NOTE: Developer needs to buy commercial license from [iTextPdf](http://itextpdf.com/terms-of-use/) for using iTextPdf library in non open-source applications. – vivek.m Apr 23 '12 at 09:21
  • 4
    @OctavianDamiean Ok, But what to do when I have answer but dont have good explaination..can you please do write it for me, as *you dont have answer*[OW you would have posted I am sure] yes, but as seeing your experience you must got explaination for the same I am sure..So please help me edit the answer, – Chirag Patel Jun 30 '12 at 05:49
  • @RadheMohan what is subCatPart? can you add some details? – RobinHood Sep 19 '12 at 11:10
  • 1
    @Chirag Patel Don't worry dear you are 100% correct and code is well explained, but you will find LOOSERS who are good for nothing and only criticizing at others works. Thanks for taking your time for this code. Really appreciated brother. Voted UP your several questions :-) – AZ_ Feb 07 '13 at 14:53
16

Here is the code: (explained in the log statements)

String path = null  ;

File file=new File("/mnt/sdcard/PDFfiles");

File f = new File(file, "MyPDFFILE.pdf");

Log.v("stage 1","store the pdf in sd card");

Document document = new Document(PageSize.A4, 38, 38, 50, 38);  

Log.v("stage 2","Document Created");

PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(path));  

Log.v("Stage 3", "Pdf writer");

document.open();

Log.v("Stage 4", "Document opened");

document.add(new Paragraph("First Paragraph"));

Log.v("Stage 5", "Creating Paragraph");

Image image = Image.getInstance ("/mnt/sdcard/images/3_5_9_0001.jpg");

Log.v("Stage 6", "Image path adding");

image.setAlignment(Image.MIDDLE| Image.TEXTWRAP);

Log.v("Stage 7", "Image Alignments");

image.setBorder(Image.BOX);

image.setBorderWidth(15); 

document.add(image);

Log.v("Stage 8", "Image adding");

document.close();

Log.v("Stage 7", "Document Closed");
Reno
  • 33,594
  • 11
  • 89
  • 102
0

Pdf is bellow like image

enter image description here

  1. Use bellow MainActivity code to generate pdf

      public class MainActivity extends AppCompatActivity {
    
         Button btnCreatePdf;
    
         TextView tv_title;
         TextView tv_sub_title;
         TextView tv_location;
         TextView tv_city; 
         String file_name_path = "";
         int PERMISSION_ALL = 1;
          String[] PERMISSIONS = {
        android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
        android.Manifest.permission.READ_EXTERNAL_STORAGE,
    
    };
    
    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
    StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
    StrictMode.setVmPolicy(builder.build());
    
    if (!hasPermissions(MainActivity.this, PERMISSIONS)) {
        ActivityCompat.requestPermissions(MainActivity.this, PERMISSIONS, PERMISSION_ALL);
    }
    
    File file = new File(this.getExternalFilesDir(null).getAbsolutePath(), "pdfsdcard_location");
    if (!file.exists()) {
        file.mkdir();
    }
    
    //this.getExternalFilesDir(null)?.getAbsolutePath()
    
    btnCreatePdf = findViewById(R.id.btnCreatePdf);
    tv_title = findViewById(R.id.tv_title);
    tv_sub_title = findViewById(R.id.tv_sub_title);
    tv_location = findViewById(R.id.tv_location);
    tv_city = findViewById(R.id.tv_city);
    
    
    btnCreatePdf.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            createpdf();
         }
        });
    
      }
    
    
     public void createpdf() {
      Rect bounds = new Rect();
     int pageWidth = 300;
     int pageheight = 470;
    int pathHeight = 2;
    
    final String fileName = "mypdf";
    file_name_path = "/pdfsdcard_location/" + fileName + ".pdf";
    PdfDocument myPdfDocument = new PdfDocument();
    Paint paint = new Paint();
    Paint paint2 = new Paint();
    Path path = new Path();
    PdfDocument.PageInfo myPageInfo = new PdfDocument.PageInfo.Builder(pageWidth, pageheight, 1).create();
    PdfDocument.Page documentPage = myPdfDocument.startPage(myPageInfo);
    Canvas canvas = documentPage.getCanvas();
    int y = 25; // x = 10,
    //int x = (canvas.getWidth() / 2);
    int x = 10;
    
    paint.getTextBounds(tv_title.getText().toString(), 0, tv_title.getText().toString().length(), bounds);
    x = (canvas.getWidth() / 2) - (bounds.width() / 2);
    canvas.drawText(tv_title.getText().toString(), x, y, paint);
    
    paint.getTextBounds(tv_sub_title.getText().toString(), 0, tv_sub_title.getText().toString().length(), bounds);
    x = (canvas.getWidth() / 2) - (bounds.width() / 2);
    y += paint.descent() - paint.ascent();
    canvas.drawText(tv_sub_title.getText().toString(), x, y, paint);
    
    y += paint.descent() - paint.ascent();
    canvas.drawText("", x, y, paint);
    
    //horizontal line
    path.lineTo(pageWidth, pathHeight);
    paint2.setColor(Color.GRAY);
    paint2.setStyle(Paint.Style.STROKE);
    path.moveTo(x, y);
    
    canvas.drawLine(0, y, pageWidth, y, paint2);
    
    //blank space
    y += paint.descent() - paint.ascent();
    canvas.drawText("", x, y, paint);
    
    y += paint.descent() - paint.ascent();
    x = 10;
    canvas.drawText(tv_location.getText().toString(), x, y, paint);
    
    y += paint.descent() - paint.ascent();
    x = 10;
    canvas.drawText(tv_city.getText().toString(), x, y, paint);
    
    //blank space
    y += paint.descent() - paint.ascent();
    canvas.drawText("", x, y, paint);
    
    //horizontal line
    path.lineTo(pageWidth, pathHeight);
    paint2.setColor(Color.GRAY);
    paint2.setStyle(Paint.Style.STROKE);
    path.moveTo(x, y);
    canvas.drawLine(0, y, pageWidth, y, paint2);
    
    //blank space
    y += paint.descent() - paint.ascent();
    canvas.drawText("", x, y, paint);
    
    Resources res = getResources();
    Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.logo);
    Bitmap b = (Bitmap.createScaledBitmap(bitmap, 100, 50, false));
    canvas.drawBitmap(b, x, y, paint);
    y += 25;
    canvas.drawText(getString(R.string.app_name), 120, y, paint);
    
    
    myPdfDocument.finishPage(documentPage);
    
    File file = new File(this.getExternalFilesDir(null).getAbsolutePath() + file_name_path);
    try {
        myPdfDocument.writeTo(new FileOutputStream(file));
    } catch (IOException e) {
        e.printStackTrace();
    }
    
      myPdfDocument.close();
      viewPdfFile();
         }
    
     public void viewPdfFile() {
    
      File file = new File(this.getExternalFilesDir(null).getAbsolutePath() + file_name_path);
      Intent intent = new Intent(Intent.ACTION_VIEW);
      intent.setDataAndType(Uri.fromFile(file), "application/pdf");
      intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
      startActivity(intent);
      }
    
    
      public static boolean hasPermissions(Context context, String... permissions) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
        for (String permission : permissions) {
            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
          }
         }
         return true;
       }
     }
    
  2. Full source Download from GitHub : https://github.com/enamul95/CreatePdf.git

Enamul Haque
  • 4,789
  • 1
  • 37
  • 50