Archiv rubriky: java

Java: kompilace do nativniho kodu platformy

Programy v Jave, se na rozdil treba od C nekompiluji primo do nativniho kodu dane platformy, ale do bajt kodu (mezikodu). To muze velka (ne)vyhoda. zalezi na uhlu pohledu. Aplikace je pak multiplatformni, jde spustit na vsech OS, na ktere je portovana Java. Nevyhodnou je mozna trochu mensi rychlost (tohle tema nemam rad ;-)) a relativne snadna moznost dekompilovat zkompilovane class soubory. Malo se to vi a jeste min pouziva, ale i Java se do zkompilovat primo do nativniho kodu.

Celý příspěvek

Java generovani PDF: vytvoreni stitku na obalky z MS Excelu

Nedavno jsem si hral s generovanim PDF v Jave. Napsal jsem jednoduchy kod, ktery vygeneruje seznam adres na obalky do PDF. Data jsou pripavena v MS Excelu. Kod je priserne zpraseny, ale treba se nekomu pro inspiraci bude hodit 😉

Soubor s daty v MS Excelu musi mit presne stejne nadpisy bunek, jako je na obrazku. Tato slova jsou napevne zadratovana v kodu, samozrejme by nebyl problem udelat jednoduche GUI, ve kterem by si uzivatel naklikal, co chce. Data v Excelu je nutne ulozit do formatu CSV.

Vysledny CSV soubor vypada nasledovne:

Jmeno;Ulice;Mesto;Pohlavi
Karel Smolny;Nadrazni 123;Hradec Kralové III;muz
Marek Jurda;Studentska 95;Pardubice 2;muz
Pavla Novakova;Zerotinovo nam. 617/9;Brno;zena
Martin Pavlasek;17.listopadu 2172/15;Ostrava-Poruba;muz
Pavel Jirasek;Technicka 1902/2;Praha 6;muz

V Jave vyuzivam knihovnu JavaCSV z CSVReader.com pod LGPL 2 licenci na zpracovani CSV.
S knihovnou na praci s PDF je to mnohem horsi. ASi nejlepsi a nejznamejsi je iText. Jedna se o dualne licencovanou knihovnu. Prvni je licence AGPL 3 (GNU Affero General Public License) – ta je skoro nepouzitelna. Druha je placena, prave pro pripady, kdy nelze pouzit AGPL. 
Pred nekolika lety byla open source verze iText dostupna pod mnohem mene restriktivni licenci LGPL 2. Tato verze je uz dost obtizne k sehnani (prekvapive). Nastasti si mi ji podarilo najit na GitHubu. Pro kompatibilitu s novou knihovnou je urcena tato. Knihovna pod LGPL je uz nekolik let neudrzovana a neumi vsechno, co jeji aktualni verze!
Knihovny jako Apache PDFBox jsou jen pekne hracky bez dokumentace a tutorialu – ztrata casu se jimi vubec zabyvat…

Tady je ta prasarna: 


import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.csvreader.CsvReader;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;

public class AdresyNaObalky {	

    public static void main(String[] args) {

    	List adresy = new ArrayList();

    	try {
  
    		// ############### zpracovani CSV
    		
			CsvReader adresa = new CsvReader("data.csv", ';'); // oddelovac je strednik
			adresa.readHeaders();

	    	while (adresa.readRecord())
			{
				String jmeno = adresa.get("Jmeno"); // *musi* odpovidat nadpisum v excel tabulce
				String ulice = adresa.get("Ulice");
				String mesto = adresa.get("Mesto");			
				String pohlavi = adresa.get("Pohlavi");
				if (pohlavi.equals("muz")) {
					pohlavi = "Pan";				
				} else if (pohlavi.equals("zena")) {
					pohlavi = "Pani";					
				}
				System.out.println(pohlavi + ":" + jmeno + ":" + ulice + ":" + mesto);
				adresy.add(pohlavi + "\n" + jmeno + "\n" + ulice + "\n" + mesto); // pridame adresu
			}

	    	adresa.close();
		} catch (FileNotFoundException e1) {
			e1.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
    	
    	// ############### zpracovani CSV   	
    	
    	
    	// ############### generovani PDF
    	   	
        Document document = new Document(PageSize.A4, 50, 20, 20, 20); // format papiru a okraje
        document.addAuthor("Martin Vancl"); // autor PDF
        document.addCreationDate(); // datum vytvoreni
        document.addTitle("Seznam adres pro tisk"); // nazev PDF dokumentu
        
        try {
            PdfWriter.getInstance(document,
                new FileOutputStream("adresy.pdf"));

            document.open();

            Font font1 = new Font(Font.TIMES_ROMAN, 15, Font.BOLD); // (family, size, style) - http://goo.gl/tm5DG

            int pocet = adresy.size();
            System.out.println(adresy.size());
            if ((pocet % 2) != 0) {
            	pocet++;	
			}
            
    		PdfPTable table = new PdfPTable(2);   
    		table.setWidthPercentage(100);
    		table.getDefaultCell().setBorder(Rectangle.NO_BORDER);

            for (String a : adresy) {
            	System.out.println(a);
            	PdfPCell bunka = new PdfPCell(new Paragraph(a, font1));
            	bunka.setBorder(Rectangle.NO_BORDER);
            	bunka.setPadding(20);
            	table.addCell(bunka);
			}
            if (pocet > adresy.size()) {
            	table.addCell("");				
			}

            document.add(table);
            
            document.close();

        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        // ############### generovani PDF
    }
}

 

Po spusteni vyplivne takovyto PDF soubor. JAR soubor ke stazeni. Komplet vse ke stazeni (tabulka v Excelu, zdrojak, knihovny, jar).

Instalace Java her na Samsung S5230

K Vanocum jsem dostal novy mobil – Samsung S5230. Jsem s nim celkem spokojeny az na jedno: JAVA . S instalaci jakychkoli programu a her do mobilu jsou neskonale problemy. Pokud nahraju JAR soubor do telefonu pres USB kabel, nebo pokud ho tam poslu pres pres bluetooth, tak telefon pri pokusu o otevreni souboru hlasi "Neznamy typ souboru". Jedina moznosti, jak tam neco nainstalovat, je stahnout to z Internetu.

Celý příspěvek