Saturday, December 17, 2016

Mencetak PDF dari database

Saya mencetak PDF dari contoh database yang disertakan oleh netbeans. Kode programnya adalah sebagai berikut :


import java.io.IOException;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;

/**
 *
 * @author Joko Adianto
 */
public class MencetakPDF {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws
            ClassNotFoundException,
            InstantiationException,
            IllegalAccessException,
            SQLException,
            IOException {
        // TODO code application logic here
        int jumlahBaris = 4;
        int cacahBaris;
        int jarakBaris = 40;
        Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
        Connection con =
                DriverManager.getConnection("jdbc:derby://localhost:1527/sample",
                        "app", "app");
        Statement stm = con.createStatement();
        ResultSet rst = stm.executeQuery("select * from customer");
        PDPageContentStream str;
        PDDocument document = new PDDocument();
        PDPage pge = new PDPage();
        document.addPage(pge);
        PDFont font = PDType1Font.COURIER;
        str = new PDPageContentStream(document,pge);
        cacahBaris = 0;
        while (rst.next()){
                str.beginText();
                    str.setFont(font, 18);
                    str.moveTextPositionByAmount(100, 400-jarakBaris*cacahBaris);
                    str.drawString(rst.getString(1));
                str.endText();
                str.beginText();
                    str.setFont(font, 18);
                    str.moveTextPositionByAmount(140, 400-jarakBaris*cacahBaris);
                    str.drawString(rst.getString(2));
                str.endText();
                str.beginText();
                    str.setFont(font, 18);
                    str.moveTextPositionByAmount(180, 400-jarakBaris*cacahBaris);
                    str.drawString(rst.getString(3));
                str.endText();
                cacahBaris++;
                if (cacahBaris==jumlahBaris){
                    str.close();
                    font = PDType1Font.COURIER;
                    pge = new PDPage();
                    document.addPage(pge);
                    str = new PDPageContentStream(document,pge);
                    cacahBaris = 0;          
                    }
        }
        str.close();
        document.save( "customer.pdf");
        document.close();
    }
 
}

Tuesday, December 13, 2016

Mencetak Dokumen PDF : Dengan Data yang Berasal dari Database

Untuk dapat mencetak dokumen dari database berbasis SQL, aktivitas yang dilakukan adalah sebagai berikut :

  1. Koneksi ke database yang sudah dibuat
  2. Menyiapkan statement
  3. membuat sebuah string berisi perintah SQL-Select
  4. menjalankan perintah tersebut pada statement, dan hasilnya disimpan didalam resultset
  5. buat dokumen
  6. buat halaman
  7. tentukan font
  8. masuk kedalam loop dari resultset :
    1. buat stream untuk halaman ke i
    2. tuliskan data kedalam teks
    3. jika i > jumlah maksimum baris maka 
      1. tutup stream
      2. buka stream bau
    4. Jika data sudah habis keluar dari loop
  9. tutup stream
  10. tentukan nama berkas
  11. tuliskan Dokumen kedalam berkas
Selanjutnya pada halaman berikut akan dibuat contoh implementasi dengan bahasa Java SE

Mencetak Dokumen PDF : 2 Halaman

Untuk dapat mencetak sebuah halaman yang diperlukan adalah :

  1. Font dan Dokumen Sudah dibuat
  2. Halaman Baru
  3. Stream Baru
  4. Tuliskan isi (dengan atau tanpa loop)
  5. Tutup Steram
Sebagai contoh potongan program berikut ini digunakan untuk membuat halaman pdf :


        // Membuat Stream
        contentStream = new PDPageContentStream(document, page);

        // Membuat Text
        contentStream.beginText();
        contentStream.setFont( font, 18 );
        contentStream.moveTextPositionByAmount( 100, 700 );
        contentStream.drawString( "Roti Vanilaku Enak Rasanya" );
        contentStream.endText();
        
        contentStream.beginText();        
        contentStream.moveTextPositionByAmount( 100, 680 );
        contentStream.drawString( "Roti Vanilaku Tidak Berwarna Coklat" );
        contentStream.endText();

        // Menutup Stream
         contentStream.close();

Adapun kode lengkap programnya adalah sebagai berikut :



package mencetak2halamanpdf;

import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;

/**
 *
 * @author Joko Adianto
 * Kode program dibawah ini merupakan modfifikasi dari 
 * kode program pada 
 * https://pdfbox.apache.org/1.8/cookbook/documentcreation.html
 */
public class Mencetak2HalamanPDF {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        // Membuat Dokumen
        PDDocument document = new PDDocument();
        
        //Mebuat halaman baru
        PDPage page = new PDPage();
        
        //tambahkan halaman kedalam dokumen
        document.addPage( page );

        // Buat font
        PDFont font = PDType1Font.COURIER;

        // Buat stream
        PDPageContentStream contentStream = new PDPageContentStream(document, page);

        // Membuat Text
        contentStream.beginText();
        contentStream.setFont( font, 18 );
        contentStream.moveTextPositionByAmount( 100, 700 );
        contentStream.drawString( "Roti Coklatku Enak Rasanya" );
        contentStream.endText();

        // Menutup stream untuk sebuah halaman
        contentStream.close();
        
        //Membuat halaman ke dua
        page = new PDPage();
        document.addPage( page );
        // Menentukan font
        font = PDType1Font.TIMES_ITALIC;

        // Buat Stram
        contentStream = new PDPageContentStream(document, page);
        // Membuat Text
        contentStream.beginText();
        contentStream.setFont( font, 18 );
        contentStream.moveTextPositionByAmount( 100, 700 );
        contentStream.drawString( "Roti Vanilaku Enak Rasanya" );
        contentStream.endText();
        
        contentStream.beginText();        
        contentStream.moveTextPositionByAmount( 100, 680 );
        contentStream.drawString( "Roti Vanilaku Tidak Berwarna Coklat" );
        contentStream.endText();

        // Menutup Stream
        contentStream.close();

        // Menutup dokumen
        try{
        document.save( "rotikucoklatvanila.pdf");
        document.close();
        }
        catch (IOException ioe){
            System.out.println(ioe.getMessage());
            System.out.println("if it is being used by another process, CLOSE IT");
            
            
        }
    }
    
}



Mencetak dengan PdfBOX : Pendahuluan

Sebuah program lazimnya memiliki keluaran yang dapat dicetak. Belajar pemrograman secara wajar akan sampai kepada pertanyaan bagagaimanakah mencetak hasil pemrosesan data.
Untuk tahap awal kita akan mempelajari bagaimana mencetak sebuah berkas pdf. Untuk pertama kali kita akan mencetak : Roti Coklat.
Urut-urutan aktivitas yang kita lakukan adalah :

  1. Download library dari https://pdfbox.apache.org/download.cgi
  2. Kita akan memilih pdfbox-app-2.0.3.jar 7.9MB, pre-built PDFBox standalone binary
  3. Selanjutnya kita dowload
  4. Hasil download kita letakkan kedalam directory NetBeansProject
  5. Kita membuat project dalam bahasa java : Java Application
  6. Project tersebut bernama MencetakBerkasPDF
  7. KIta menambahkan jar/folder : RMB->Add JAR/Folder
  8. Kita pilih berkas pdfbox-app-2.0.3.jar
  9. Selanjutnya kita dapat menulis program
  10. Setelah menulis program kita jalankan
  11. Kemudian periksa directory MencetakBerkasPDF
  12. Didalamnya akan terdapat rotiku.pdf

Adapun kode program yang kita buat adalah sebagai berikut :

package mencetakberkaspdf;


import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;

/**
 *
 * @author Joko Adianto
 * Kode program dibawah ini merupakan modfifikasi dari
 * kode program pada
 * https://pdfbox.apache.org/1.8/cookbook/documentcreation.html
 */
public class MencetakBerkasPDF {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        // Membuat dokumen
        PDDocument document = new PDDocument();

        //Membuat halaman
        PDPage page = new PDPage();
        document.addPage( page );

        // Untuk mencetak kita memerlukan jenis huruf(font)
        PDFont font = PDType1Font.COURIER;

        // Mebuat sebuah content stream yang mengandung isi yang akan dicetak
        PDPageContentStream contentStream = new PDPageContentStream(document, page);

        //Mulai mencetak    
        contentStream.beginText();
        contentStream.setFont( font, 18 );
        contentStream.moveTextPositionByAmount( 100, 700 );
        contentStream.drawString( "Roti Coklatku Enak Rasanya" );
        contentStream.endText();

        //Selesai mencetak stream ditutup
        contentStream.close();

        //Tuliskan kedalam berkas bernama rotiku.pdf
        try{
        document.save( "rotiku.pdf");
        document.close();
        }
        catch (IOException ioe){
            System.out.println(ioe.getMessage());
            System.out.println("Jika digunakan proses lain, TUTUP");
    }
 
}


Friday, December 2, 2016

Data Entry : membuat interface MemberEntriScreen

Untuk tampilan entri data kode program yang diperlukan adalah sebagai berikut :

package javafxtableview5;

import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/**
 *
 * @author Joko Adianto
 * Released under GPLv3
 */
public class JavaFXTableView5 extends Application {

public static class Member{  
    private final SimpleStringProperty memberId;
    private final SimpleStringProperty memberName;
    private final SimpleStringProperty memberAddress;
 
 
    Member(String memberId, String memberName, String memberAddress) {
        this.memberId = new SimpleStringProperty(memberId);
        this.memberName = new SimpleStringProperty(memberName);
        this.memberAddress = new SimpleStringProperty(memberAddress);
    }
 
    public String getMemberId() {
        return memberId.get();
    }

    public void setMemberId(String memberId) {
        this.memberId.set(memberId);
    }
 
    public String getMemberName() {
        return memberName.get();
    }

    public void setMemberName(String memberName) {
        this.memberName.set(memberName);
    }
    public String getMemberAddress() {
        return memberAddress.get();
    }

    public void setMemberAddress(String memberAddress) {
        this.memberAddress.set(memberAddress);
    }
 
 
}

StackPane root;
Stage stage;
Scene scene;

//Id
HBox hbxId;
Label lblId;
TextField txfId;

//Name
HBox hbxName;
Label lblName;
TextField txfName;

//Name
HBox hbxAddress;
Label lblAddress;
TextField txfAddress;


//Button
HBox hbxButton;
Button btnSave;
Button btnCancel;

//Table
private final TableView<Member> tbvMember = new TableView<>();
private final ObservableList<Member> obsMember =
    FXCollections.observableArrayList();

VBox vbx;


{
    hbxId = new HBox();
    lblId = new Label("Id");
    lblId.setMinWidth(60);
    txfId = new TextField();
    hbxId.getChildren().addAll(lblId, txfId);

    hbxName = new HBox();
    lblName = new Label("Name");
    lblName.setMinWidth(60);
    txfName = new TextField();
    hbxName.getChildren().addAll(lblName, txfName);
 
    hbxAddress = new HBox();
    lblAddress = new Label("Address");
    lblAddress.setMinWidth(60);
    txfAddress = new TextField();
    hbxAddress.getChildren().addAll(lblAddress, txfAddress);

    //1st col
    TableColumn memberIdCol = new TableColumn("Id");
    memberIdCol.setMinWidth(50);
    memberIdCol.setCellValueFactory(
    new PropertyValueFactory<>("memberId"));
 
    //2st col
    TableColumn memberNameCol = new TableColumn("Member Name");
    memberNameCol.setMinWidth(200);
    memberNameCol.setCellValueFactory(
    new PropertyValueFactory<>("memberName"));
 
    //3rd col
    TableColumn memberAddressCol = new TableColumn("Member Address");
    memberAddressCol.setMinWidth(200);
    memberAddressCol.setCellValueFactory(
    new PropertyValueFactory<>("memberAddress"));
 
    //TableView's columns  
    tbvMember.getColumns().addAll(memberIdCol, memberNameCol, memberAddressCol);
 
    //TableViews and ObservableList wiring
    tbvMember.setItems(obsMember);
 
    btnSave = new Button();
    btnSave.setMinWidth(100);
    btnSave.setText("Save");
    btnSave.setOnAction(new EventHandler<ActionEvent>() {
         
            @Override
            public void handle(ActionEvent event) {
                String strId = txfId.getText();
                String strName = txfName.getText();
                String strAddress = txfAddress.getText();
                obsMember.add(new Member(strId, strName, strAddress));
                txfId.setText("");
                txfName.setText("");
             
            }
        });
 
    btnCancel = new Button();
    btnCancel.setText("Cancel");
    btnCancel.setMinWidth(100);
 
    btnCancel.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                txfId.setText("");
                txfName.setText("");
            }
        });
 
    hbxButton = new HBox();
    hbxButton.setAlignment(Pos.CENTER);
    hbxButton.setSpacing(200);
    hbxButton.getChildren().addAll(btnSave, btnCancel);
    hbxButton.setSpacing(250);
    vbx = new VBox();
    vbx.getChildren().addAll(hbxId, hbxName, hbxAddress, hbxButton, tbvMember);
 
 
    root = new StackPane();
    root.getChildren().add(vbx);
    scene = new Scene(root, vbx.getMinWidth(), 300);
 
    }

@Override
public void start(Stage primaryStage)
    {
    stage = primaryStage;
    stage.setTitle("TableView ");
    stage.setScene(scene);
    stage.show();  
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
    launch(args);
    }

}