package com.example.philippe.android_generationpdf;
import android.content.res.AssetManager;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.graphics.pdf.PdfDocument;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
public class MainActivity extends AppCompatActivity
{
Button btnGenPDF;
// declaration largeur et hauteur du document PDF
int pageHeight = 1120;
int pagewidth = 792;
// creation des variables pour stocker les images bitmap
Bitmap bmp, scaledbmp;
// code de la constante pour les permissions
private static final int PERMISSION_REQUEST_CODE = 200;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initialisations();
// "Creation" de l'image "logo ATG"
//bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_background);
//scaledbmp = Bitmap.createScaledBitmap(bmp, 80, 80, false);
// Le code suivant est utilisé pour vérifier les permissions
if (checkPermission())
{
Toast.makeText(this, "Permission ok", Toast.LENGTH_SHORT).show();
}
else
{
requestPermission();
}
}
public void initialisations()
{
btnGenPDF = findViewById(R.id.btnGenerationPDF);
btnGenPDF.setOnClickListener(new EcouteurBoutonGenerationPDF());
}
private boolean checkPermission() {
// checking of permissions.
int permission1 = ContextCompat.checkSelfPermission(getApplicationContext(), WRITE_EXTERNAL_STORAGE);
int permission2 = ContextCompat.checkSelfPermission(getApplicationContext(), READ_EXTERNAL_STORAGE);
return permission1 == PackageManager.PERMISSION_GRANTED && permission2 == PackageManager.PERMISSION_GRANTED;
}
private void requestPermission() {
// Les permissions requises ne sont pas fournies
ActivityCompat.requestPermissions(this, new String[]{WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0) {
// après la demande de permissions, message d'avertissement aux utilisateurs
// pour donner l'état des permissions.
boolean writeStorage = grantResults[0] == PackageManager.PERMISSION_GRANTED;
boolean readStorage = grantResults[1] == PackageManager.PERMISSION_GRANTED;
if (writeStorage && readStorage)
{
Toast.makeText(this, "Permission Autorisée..", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(this, "Permission Non autorisée.", Toast.LENGTH_SHORT).show();
finish();
}
}
}
}
public class EcouteurBoutonGenerationPDF implements View.OnClickListener
{
@Override
public void onClick(View v)
{
// Appel à la méthode pour générer le document PDF
generationPDF();
}
public void generationPDF()
{
// création d'une variable objet pour le document PDF
PdfDocument pdfDocument = new PdfDocument();
// 2 variables pour écrire dans le document sont utilisés
// paint pour dessiner le logo (à faire) et
// titre pour ajouter du texte au document PDF
Paint paint = new Paint();
Paint title = new Paint();
// Ajout d'informations de mise en page dans le document PDF
// pageWidth pour la largeur de la page et
// pageHeight pour la hauteur de la page puis
// définition du nombre pages et ensuite
// appel de la méthode de création de la page
PdfDocument.PageInfo mypageInfo = new PdfDocument.PageInfo.Builder(pagewidth, pageHeight, 1).create();
// la ligne suivante permet le "démarrage" de la page
PdfDocument.Page myPage = pdfDocument.startPage(mypageInfo);
// création d'une variable pour le cannevas de la page
Canvas canvas = myPage.getCanvas();
// A VOIR CREATION D'UNE IMAGE
// "Creation" de l'image "logo ATG"
//Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_background);
//Bitmap scaledbmp = Bitmap.createScaledBitmap(bmp, 80, 80, false);
// les lignes suivantes sont utiliséespour dessiner une image
// dans le document PDF.
// le 1er paramètre de la méthode drawBitmap est notre
// bitmap lui-même. Le second est la position par rapport
// au bord gauche de la page.
// Le 3ème paramètre est la position par rapport
// au haut de la page.
// Le dernier paramètre est notre variable "à dessiner"
//canvas.drawBitmap(scaledbmp, 56, 40, paint);
// la ligne suivante est utilisée pour définir
// la police et le format du texte du document PDF
title.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.NORMAL));
// la ligne suivante est utilisée pour définir la taille du texte
title.setTextSize(15);
// la ligne suivante est utilisée pour définir la couleur du texte
title.setColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary));
// la ligne suivante est utilisée pour définir le texte du PDF
// le 1er paramètre est le texte, le second définit la position du texte
// par rapport au bord gauche de la page
// le 3ème est la position par rapport au haut de la page
// le 4ème est le texte lui même
canvas.drawText("Première phrase.", 209, 80, title);
canvas.drawText("Seconde phrase", 209, 100, title);
// Les lignes suivantes sont les mêmes que précédemment pour un autre texte
title.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
title.setColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary));
title.setTextSize(15);
// la ligne suivante est utilisée pour définir
// l'alignement du texte (ici centré)
title.setTextAlign(Paint.Align.CENTER);
canvas.drawText("Troisieme phrase.", 396, 560, title);
// Après avoir défini l'ensemble des paramètres, fin de la page
pdfDocument.finishPage(myPage);
// la ligne suivante est utilisée pour donner le nom et le chemin du document PDF
File file = new File(Environment.getExternalStorageDirectory(), "MonPremierPDF.pdf");
try {
// Ecriture du document à l'endroit précisé ci-dessus
pdfDocument.writeTo(new FileOutputStream(file));
// la ligne suivante est utilisée pour afficher
// un message de réussite à l'utilisateur
Toast.makeText(MainActivity.this, "La génération du document PDF est réussie.", Toast.LENGTH_SHORT).show();
}
catch (IOException e)
{
// below line is used
// to handle error
e.printStackTrace();
}
// fermeture du document PDF
pdfDocument.close();
}
}
}