Blog purpose for android basic example for android app developer. any query please my contact

Wednesday, 16 June 2021

how to create pdf file in android programmatically

 how to create pdf file in android programmatically


In this article, today learn how to create a pdf file in android programmatically. pdf file using iText 

generate a pdf-specific folder. follow how to create a pdf file in android programmatically.



1.Build.gradle:

 implementation 'com.itextpdf:itextpdf:5.5.13.2'


2. PdfView.Java:

package com.insta.story.fragment.dailyexpensive;


import androidx.annotation.NonNull;

import androidx.appcompat.app.AppCompatActivity;


import android.content.Intent;

import android.net.Uri;

import android.os.Bundle;

import android.os.Environment;


import android.view.View;

import android.widget.Button;

import java.io.IOException;

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.List;

import com.itextpdf.text.ListItem;

import com.itextpdf.text.PageSize;

import com.itextpdf.text.Paragraph;

import com.itextpdf.text.Phrase;

import com.itextpdf.text.Section;

import com.itextpdf.text.pdf.PdfPCell;

import com.itextpdf.text.pdf.PdfPTable;

import com.itextpdf.text.pdf.PdfWriter;


import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.Date;


public class Pdfview extends AppCompatActivity {


Button btnsubmitaa;

    private static Font catFont = new Font(Font.FontFamily.TIMES_ROMAN, 18,

            Font.BOLD); // Set of font family alrady present with itextPdf library.

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


    public static final String DEST = "/quick_brown_fox_PDFUA.pdf";

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_pdfview);



    }


    public void PrintDocument(String dest) throws IOException, java.io.IOException {

        try {


//            Document document = new Document();

            Document document = new Document(PageSize.PENGUIN_SMALL_PAPERBACK, 10f, 10f, 100f, 0f);//PENGUIN_SMALL_PAPERBACK used to set the paper size

            PdfWriter.getInstance(document, new FileOutputStream(dest));

            document.open();

            addMetaData(document);

            addTitlePage(document);

            addContent(document);

            document.close();


            File file = new File(dest);

            Intent intent = new Intent(Intent.ACTION_VIEW);

            intent.setDataAndType(Uri.fromFile(file), "application/pdf");

            intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

            startActivity(intent);

        } 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.com ;-).",

                redFont));


        document.add(preface);

        // Start a new page

        document.newPage();

    }


    private static void addContent(Document document) throws DocumentException {

        Anchor anchor = new Anchor("First Chapter", catFont);

        anchor.setName("First Chapter");


        // 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("Table Header 1"));

        c1.setHorizontalAlignment(Element.ALIGN_CENTER);

        table.addCell(c1);


        c1 = new PdfPCell(new Phrase("Table Header 2"));

        c1.setHorizontalAlignment(Element.ALIGN_CENTER);

        table.addCell(c1);


        c1 = new PdfPCell(new Phrase("Table Header 3"));

        c1.setHorizontalAlignment(Element.ALIGN_CENTER);

        table.addCell(c1);

        table.setHeaderRows(1);


        table.addCell("1.0");

        table.addCell("1.1");

        table.addCell("1.2");

        table.addCell("2.1");

        table.addCell("2.2");

        table.addCell("2.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(" "));

        }

    }

    public void createPdf(View view) {

        String root = Environment.getExternalStorageDirectory().toString()+"/MyPDFDoc";

        final File dir = new File(root);

        if (!dir.exists())

            dir.mkdirs();

        try {

            PrintDocument(dir.getPath()+DEST);

        } catch (java.io.IOException e) {

            e.printStackTrace();

        }

    }

}



3.activity_pdfview.xml:


<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:id="@+id/activity_main"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin">


    <Button

        android:onClick="createPdf"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Create Pdf!" />

</RelativeLayout>



4.AndroidManifest.xml:


<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.insta.story.fragment.dailyexpensive">


    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>  <!--For Android 11-->

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    <application

        android:allowBackup="true"

        android:icon="@mipmap/ic_launcher"

        android:label="@string/app_name"

        android:roundIcon="@mipmap/ic_launcher_round"

        android:supportsRtl="true"

android:requestLegacyExternalStorage="true"

        android:theme="@style/Theme.DailyExpensive">

   

        <activity android:name=".Pdfview">

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />


                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>


</manifest>




5.strings.xml:

<resources>

    <string name="app_name">Daily Expensive</string>

    <string name="action_settings">Settings</string>

    <!-- Strings used for fragments for navigation -->

    <string name="first_fragment_label">First Fragment</string>

    <string name="second_fragment_label">Second Fragment</string>

    <string name="next">Next</string>

    <string name="previous">Previous</string>


    <string name="hello_first_fragment">Hello first fragment</string>

    <string name="hello_second_fragment">Hello second fragment. Arg: %1$s</string>

 

</resources>



6.dimens.xml:


<resources>


    <!-- Default screen margins, per the Android Design guidelines. -->

    <dimen name="activity_horizontal_margin">16dp</dimen>

    <dimen name="activity_vertical_margin">16dp</dimen>


</resources>



No comments:

Post a Comment