160 likes | 261 Views
Informační systém pro cestovní kanceláře. Aleš Tryml. Obsah prezentace. představení informačního systému účel produktu použité programové prostředky výsledek zajímavé pasáže z implementace komunikace s MS Office tiskové sestavy. Informační systém Skisoft. Účel produktu:
E N D
Informační systém pro cestovní kanceláře Aleš Tryml
Obsah prezentace • představení informačního systému • účel produktu • použité programové prostředky • výsledek • zajímavé pasáže z implementace • komunikace s MS Office • tiskové sestavy
Informační systém Skisoft • Účel produktu: • software na zakázku • zastřešení všech provozních dat CK • tiskové sestavy • vouchery, zasedací pořádky, pojištění, všemožné seznamy • Výsledek: • tlustý klient + možnost propojit s WWW • jazyk Java • databáze PosgreSQL
Pokec Javy s MS Office • vytváření dokumentů čitelných v MS Office • textové soubory bez stylů (Word), data oddělená středníkem (Excel) • formáty XML se styly • úprava již vytvořených dokumentů • Apache POI • POIFS - OLE 2 Compound Document format • HWPF, HSSF, HSLF, HPSF, HDGF • přímá komunikace s MS Office • Java native interface (JNI)
MS Excel – xml 2003 • <?xmlversion="1.0"?> • <?mso-applicationprogid="Excel.Sheet"?> • <Workbookxmlns="urn:schemas-microsoft-com:office:spreadsheet" • xmlns:o="urn:schemas-microsoft-com:office:office" • xmlns:x="urn:schemas-microsoft-com:office:excel" • xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" • xmlns:html="http://www.w3.org/TR/REC-html40"> • <DocumentPropertiesxmlns="urn:schemas-microsoft-com:office:office"></DocumentProperties> • <Styles> • <Style ss:ID="Default" ss:Name="Normal"> • <Alignmentss:Vertical="Bottom"/> • <Borders/> • <Font x:CharSet="238" x:Family="Swiss"/> • <Interior/> <NumberFormat/> <Protection/> • </Style> • <Style ss:ID="sNadpis"> • <Font ss:Bold="1"/> • </Style> • </Styles>
MS Excel – xml 2003 • <Worksheetss:Name="CH-070110"> • <Table> • <Columnss:Width="120"/> • <Columnss:Width="85"/> • ... • <Row> • <Cell><Data ss:Type="String">EUROSKI.CZ, Resslova 3</Data></Cell> • <Cell ss:StyleID="sNadpis" ss:Index="4"> • <Data ss:Type="String">Seznam pojištění pro zájezd č.: XX/012345</Data> • </Cell> • </Row> • <Row> • <Cell ss:StyleID="sTabulkaHlavicka"> • <Data ss:Type="String">Číslo pojistné smlouvy</Data> • </Cell> • <Cell ss:StyleID="sTabulkaHlavicka"> • <Data ss:Type="String">Příjmení</Data> • </Cell> • ... • </Row> • </Table> • </Worksheet>
Apache POIFS • nízko-úrovňovéAPI • zpřístupňuje data uložená v OLE 2 Compound Document format • základ pro HWPF, HSSF, ... • možno srovnat s „zip“ knihovnou
Apache POI - HxPF • Horrible (Word, Spreadsheet, …) Processor Format • Java API pro zpracování MS Excel souborů • Podpora Office 97-2003 • Office 2007 není OLE2 formát • Omezené možnosti použití
Apache POI – HSPF • založení sešitu • HSSFWorkbookwb = newHSSFWorkbook(); • FileOutputStreamfileOut = newFileOutputStream("workbook.xls"); • wb.write(fileOut); • fileOut.close(); • založení nového listu • HSSFWorkbookwb = newHSSFWorkbook(); • HSSFSheet sheet1 = wb.createSheet("newsheet"); • HSSFSheet sheet2 = wb.createSheet("secondsheet"); • FileOutputStreamfileOut = newFileOutputStream("workbook.xls"); • wb.write(fileOut); • fileOut.close();
JNI – Java Native Interface • JNI dovoluje využití knihoven napsaných v jiných jazycích • nutno vytvořit wrapper pro obě strany • poměrně zdlouhavý a těžkopádný • zvážit, zda není jednodušší použít externí C# program, který bude Java přes parametry pouze spouštět
Tisk v Javě • vyvolání tiskového dialogu a tisk na libovolnou tiskárnu • java.awt.print(JDK 1.1) • PrinterJob – zajišťuje samotný tisk • Printable, Pageable – popisují obsah • podpůrné třídy: • PageFormat – popisuje tisknutelnou oblast • Graphics, Graphics2D – zajišťuje vlastní vykreslování obsahu - stejné jako kreslení na obrazovku
Příklad PrinterJob • try { • // fetch a PrinterJob • PrinterJobjob = PrinterJob.getPrinterJob(); • //ziskaniprintable • VoucherPrintablevoucherPrintable • = newVoucherPrintable(parametry, data); • job.setPrintable(voucherPrintable); • // createanattribute set to storeattributesfromtheprint dialog • PrintRequestAttributeSetattr = newHashPrintRequestAttributeSet(); • attr.add(newMediaPrintableArea(10, 7, 190, 283,MediaPrintableArea.MM)); • // display a print dialog andrecordwhetheror not the user cancelsit • booleanprintAccepted = job.printDialog(attr); • if (printAccepted) { • // ifthe user didn't cancelthe dialog • // do theprinting (mayneed to handle PrinterException) • job.print(attr); • } • } catch (PrinterExceptionpe) { • System.err.println("Errorprinting: " + pe.getMessage()); • }
Příklad Printable • public int print(Graphics g, PageFormatpf, int page) • throws PrinterException { • if (page > 0) { /* We have only one page, and 'page' is zero-based */ • return NO_SUCH_PAGE; • } • /* User (0,0) is typically outside the imageable area, so we must • * translate by the X and Y values in the PageFormat to avoid clipping • */ • Graphics2D g2d = (Graphics2D)g; • g2d.translate(pf.getImageableX(), pf.getImageableY()); • /* Now we perform our rendering */ • g.drawString("Hello world!", 100, 100); • /* tell the caller that this page is part of the printed document */ • return PAGE_EXISTS; • }
Pageable • int getNumberOfPages() • PageFormat getPageFormat(int pageIndex) • Printable getPrintable(int pageIndex)
Tisk Swing komponent • klasický print všech Swingů • problém stránkování • rozřezání vs konkrétní implementace print Java 1.6 • problém doplňujících údajů
Závěr • děkuji za pozornost