Cetak PDF pada Catatan Kredit

Sebenarnya cetak CSV yang saya temukan teknik yang mudahnya lebih dahulu daripada PDF. Kemudian dengan kegigihan saya, akhirnya saya menemukan cetak pdf yang simple dan mudah membuatnya. Permintaan pembuatan cetak PDF dari pengguna baik melalui ulasan maupun email. Akhirnya saya dapat mewujudkannya.

Banyak teknik cetak pdf, spt iText dan lain lainnya. Tanpa sadar, saya hapus semua dependencies iText dll, kemudian saya coba PdfDocument dan berhasil cetak pdf satu baris. Ternyata android studio telah tersedia didalamnya simple pdf . Hanya bisa nulis dan menyisipkan gambar. Nulis disini dalam artikata mengetik, membuat garis dan lingkaran, beberapa font dan size. Lumayan dan cocok, saya suka yang simple aja. Juga karena tidak menggunakan third party library, maka aplikasi bisa kecil dan cepat.

Untuk pelajarannya, banyak banget link yang saya googling. Dengan keyword "PdfDocument".

Awalnya yang keyword : "create pdf in java android" yang mengakibatkan beragam cara cetak pdf dan termasuk PdfDocument. Tadinya saya pikir PdfDocument sama dengan PDDocument, ternyata berbeda.

Ini saya cuplik code cetak pdf dari Catatan Kredit :

public void cetakPDF() {
CollectionReference unisRef = db.collection(mUserFb);
PdfDocument pdfDocument = new PdfDocument(); // initial PdfDocument
unisRef.orderBy("name").limit(100).get().addOnCompleteListener(task -> {
int noTransaksi = 0;
double numberItemsPage = 0.0;
int numberPages = 1;
int layoutKu = 110;
double sumnyaKredit = 0.0;
double sumnyaTotalBayar= 0.0;
double sumnyaTotalKredit = 0.0;
Paint title = new Paint(); // initial tuk tulis text
PdfDocument.PageInfo mypageInfo = new PdfDocument.PageInfo.Builder(842, 595, numberPages).create(); // persiapkan halaman
PdfDocument.Page myPage = pdfDocument.startPage(mypageInfo); // inisiasi halaman pertama
Canvas canvas = myPage.getCanvas();
title.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.NORMAL));
title.setTextAlign(Paint.Align.LEFT);
title.setColor(Color.BLACK);
title.setTextSize(15);
canvas.drawText("LAPORAN DATA UTAMA", 80, 65, title);
canvas.drawText("Tgl. " + (formatFb.format(new Date().getTime())), 80, 85, title);
title.setTextSize(14);

canvas.drawText("No.",80, 110, title);
canvas.drawText("Nama",110, 110, title);
canvas.drawText("Byr. Trk.",560, 110, title);
canvas.drawText("Tgk.Trk.",645, 110, title);
canvas.drawText("Tgl. Jtp",720, 110, title);

title.setTextSize(12);
canvas.drawText(" " + formatFk.format(new Date().getTime()), 110, 520, title);
canvas.drawText(" @2021 by Catatan Kredit", 110, 530, title);
canvas.drawText("at Playstore, free and no ads.", 110, 540, title);
Paint paint = new Paint(); // inisiasi pembuatan logo
paint.setColor(Color.BLUE);
paint.setStyle(Paint.Style.STROKE);

// draw a bitmap
Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.wm); // ambil bitmap dari drawable
bitmap = Bitmap.createScaledBitmap(bitmap, 36, 36, true); // lakukan scale sesuai yang diinginkan
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
canvas.drawBitmap(bitmap, 80, 500, paint);

title.setTextAlign(Paint.Align.RIGHT);
title.setTextSize(14);
canvas.drawText("Kredit Rp.",360, 110, title);
canvas.drawText("Bayar Rp.",455, 110, title);
canvas.drawText("Sisa Rp.",550, 110, title);

1. Pencetakan boleh naik turun, saya coba dan berhasil. Asal titik koordinat benar maka tidak akan bertumpuk. Bukan spt printer dot matrix, melainkan spt plotter atau printer spanduk. Bisa maju mundur kanan kiri. Untuk nilai rupiah saya buat dari kanan kekiri, jadi bisa mudah membuat selaras hasil pdf.

2. Kesulitan kedua adalah membuat logo, karena ingin tampil di cetakan pdf sehingga saya berkeinginan membuat logo selain footer. Akhirnya ditemukan bahwa logo atau gambar dalam bentuk bitmap, dengan size yang tidak besar agar aplikasi tetap kecil dan ringan, dan kemudian dikecilkan sesuai kebutuhan dengan dither yang ga boleh dilewatkan. Saya sendiri ga ngerti dither, tapi di Stack Overflow mengatakan disalah satu jawaban pertanyaan.

3. Kemudian kesulitan ketiga adalah mengirimkan keluar aplikasi menuju share email/sosmed/printer dll. Hal ini sudah berhasil disaat Cetak CSV, sehingga tinggal copy dan ubah menjadi "application/pdf"

pdfDocument.close();

try {
Context context = getApplicationContext();
File filelocation = new File(getFilesDir(), "datautama.pdf");
Uri path = FileProvider.getUriForFile(context, "com.blogspot.budilaks.catatankredit.fileprovider", filelocation);
Intent fileIntent = new Intent(Intent.ACTION_SEND);
fileIntent.setType("application/pdf");
fileIntent.putExtra(Intent.EXTRA_SUBJECT, "Data Utama Tgl. " + formatFk.format(new Date()));
fileIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
fileIntent.putExtra(Intent.EXTRA_STREAM, path);
startActivity(Intent.createChooser(fileIntent, "Share "));
} catch (Exception e) {
e.printStackTrace();
}

Pas sudah jadi code dan berjalan sempurna, waduh kok segini aja yaa. So simple. So ringan. Ga ada dependencies library. Pencarian yang sempurna, terimakasih Google dan Stack Overflow.

Dari seluruh permintaan pengguna, satu hal yang belum dapat saya kabulkan yaitu Search atau Pencarian Nama.

Karena :

1. Google Firestore hanya boleh dicari spt pencarian Google yaitu satu kata penuh. Ditambah lagi harus huruf besar/kecil tepat sasaran. Hal ini dikeluhkan juga di Stack Overflow.

2. Point diatas masih dapat diatasi dengan third party library, yi Algolia. Pada algolia, saya harus memberikan koneksi ke data google aplikasi ini, dan itu mengawatirkan saya.

3. Sistem search berarti data dibaca dari Cloud yang kemungkinan berkali kali. Dan hal ini akan berakibat naiknya jumlah baca harian yang dimana terbatas tuk paket Spark yang gratis ini. Seperti total dan sisa pada aplikasi ini, menggunakan teknik dompleng pada pembacaan data layar, jadi tidak menaikkan traffic ke Cloud. Cloud ini gratis, dengan batasan baca 50kilo per hari. Diatas itu maka akan ada tagihan ke rekening saya dalam bentuk Dollar. Hadeh, moga ga lewat batasan per hari.

Begitulah saya berhasil cetak pdf, berikut curhat saya mengenai pencarian nama.

Terimakasih, semoga bermanfaat.

Awal kisah kupas tuntas Catatan Kredit

Lanjutan cetakCSV aplikasi Catatan Kredit

Komentar