Child pages
  • Tomcat Post terminal elerese
Skip to end of metadata
Go to start of metadata

Sziasztok!

En most keszitek egy pizzazo szamara egy egyszeru rendeles felvevo(es szamlazo) programot es hat akadt par gondom (smile)

Technikai adatok:

os: windows xp

server: tomcat

cliens code: gwt

server code: gwt(request factory)+hibernate

pos terminal: regi win xp driver, (elofordulhat hogy lesz egy uj aminek java-s elerese is van (smile))


A problemam:

szeretnek pos terminal(blokk nyomtato)-t hasznalni de cliens oldalon az a gond vele hogy el tudom inditani a nyomtatast a bongeszovel de utanan ra kell megegyszer nyomni a nyomtatasra + bongeszonel nem tudom a lapmeretet rendesen beallitani es egy csomo ures papirt kinyom mielott elvagja a blokkot (sad)

en valami olyasmire gondoltam hogy inkabb server oldalon inteznem el mivel localisan fut majd a tomcat(ugyan azon a gepen ahol majd hasznaljak a programot)... pl itext-vel csinalnek egy pdf-et es valahogy ugy nyomnam ki ... akar mondjuk lerakom a pdf-et valahova es valami programmal(Ghost postscript ha jol emlekszem...) vagy akar a driver-t elerni kozvetlen es ugy nyomtatni ? igazabol azt sem tudom hogy induljak el mivel server oldalon meg nem probaltam kinyulni az oprendszerbe es azt sem tudom melyik lenne celszerubb... szenvedni azzal hogy elerjem a drivert akar nativan vagy inkabb valami kulso eszkozt keresni es ugy ? .... (halkan jegyzem meg hogy lehet vesznek uj blokk nyomtato amihez viszont jar valami java-s program is ...)

 

masik lehetoseg lenne egy native bongeszo plugint irni pl chrome-hoz de sajnos a C nem megy (sad)

 

Elore is koszonok minden otletet es javaslatot!

ui: kerlek titeket hogyha valami nem ertheto akkor kerdezetek ra mert nagyon fontos lenne megoldanom ...

      
      
Page viewed times
#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))
  • No labels

18 Comments

  1. Üdv,

     

    Miért nem jó, ha megjelenik a PDF a kliens oldalon egy Reader-ben, és azt nyomtatja ki?

    Máshogy nem fogsz te nyomtatni, képzeld el, hogy elmész egy weblapra, és az minden nélkül elkezdene nyomtatni neked.

    És mi van, ha több nyomtató van a géphez csatlakozva?

    Szóval szerintem tanulják meg az Acrobat Reader felhasználását.

    Ugye itt kérdés, hogy biztos, hogy a vékony kliens a jó megoldás? Vastag klienssel nem lenne gondod.

    Legvégső esetben aláírt applettel próbálkozhatsz.

    1. Szia!

       

      Miért nem jó, ha megjelenik a PDF a kliens oldalon egy Reader-ben, és azt nyomtatja ki? ----- azert nem jo mert akkor ranyom 1-xer hogy nyomtatas az en programomban utanna valahogy eloall a pdf  mondjuk egy iframeben(nem kell feltetlen lathatonak lenni) na most meg el tudom inditani a nyomtatast de akkor is felugrik a bongeszo nyomtatas panelja ... ez igy nagyon nem felhasznalobarat (sad)

      Máshogy nem fogsz te nyomtatni, képzeld el, hogy elmész egy weblapra, és az minden nélkül elkezdene nyomtatni neked. — a bongeszo nem enged ki a sajat sandbox-bol, lehetne irni native chrome plugin-t (C -ben : ((()

      És mi van, ha több nyomtató van a géphez csatlakozva? ---- ezert kene valami olyan megoldas ahol ez is lekezelheto

      Vekony vagy vastag kliens-en mit ertesz ? 

      az applet jo otlet azon mar gondolkoztam mert ugye azt ha betoltom a bongeszoben akkor 1xer fog csak engedelyt kerni(ha be van x....), js-bol meg lehet par parancsot hivni amit az applet tud kezelni... ezek utan mar csak az a kerdes hogy el lehete vele erni a nyomtatokat es mennyire macceras ... (kerlek ha ilyenben tudsz segiteni akkor pelda koldokat, linkeket (smile) mivel appletet meg soha nem irtam... eddig gwt es hozza server kodot irtam javaban (+server oldali javas eszkozok...) viszont gyorsan tanulok )

      koszonom

  2. Van lehetőség Java-ból nyomtatni, annó csináltam ilyet, amikor egy iskolában részben én csináltam az órarendet, most már viszonylag korrekt a Printing API, jó irány lehet, ha a szerver nyomtat... alternatív megoldás lehetne egy CUPS-ot felhúzni (nem tudom van-e Windows-os kiadása vagy valami hasonló alkalmazás van-e), mert akkor tudsz bármilyen nyomtatót használni IPP protokollon, így akár egy központi szerverről is képes lehetsz nyomtatni a kliens gépekre, pontosabban azok IPP portjára.

  3. az biztos hogy jo ideig a tomcat es ahonnan majd hasznaljak a programot ugyan azon gep lesz ... lehet csinalok egy virtualis ubuntut  a tomcat-nek ...(ezeket meg nem tudom, de a tavoli jovo az lenne ha kulso server lenne) ami tuti hogy a java max verzio jelenleg 1.6 a gwt miatt,

    • jelenleg lpt1-es porton lehet elerni..., ha lecserelik akkor lesz usb is ...
    • jo lenne tenyleg ha lehetne valasztani hogy melyik nyomtatora kuldi ki mivel van egy sima nyomtato is a gepen
    • jo otlet ez a print server dologt de ebbe a koltsegvetesbe nem fer bele (sad) , egyebkent inkabb az ilyet tamogatnam  (tongue)
    • Bongeszo Appletben lehet-e hasznalni a Print Api-t vagy mit lehet hasznalni ? ... (plz linkek ha vannak (smile) )
    • ha szukseges akkor tudok server oldalon itext-vel pdf-et generalni es az hogy most azt server oldalrol hasznaljuk vagy vissza adom az elereset egy appletnak, nekem mind1 
    • a jelenlegi verzio azt csinalja hogy csinal egy pdf-et (margo stb minden be van allitva) es utanna egy ghostgum nevezetu eszkozt shellbol meghivja es igy jut ki a nyomtatora ... meg akar egy ilyen megoldas is jo lehet...

    koszonom elore is ...

    1. Tomcat-ből tudsz nyomtatni, nem kell applet... erre a nyomtatóra egyébként tudsz egy átlagos programból nyomtatni?

      1. Igen tudok atlagos programbol nyomtatni csak akkor nem lehet a papirmeretet jol beallitani es a4 hosszusagnal vagja el (sad) pdf-vel be lehet allitani elvileg jo a meretet... de holnap kiprobalom hogy az xp-s driver is jol tudja-e mert nagyon nehezen lehetet hozza xp-s drivert talalni ... (a gyarto mar nagyon regota megszunt) 

        ha a server nyomtat akkor viszont mindig localban kell hogy legyen a server (sad) bar ez a legkevesebb inkabb nyomtasson (smile) az jobban erdekel (big grin)

        1. Papírméretet tudsz állítani a Java Printing API-n keresztül, tehát elvileg mennie kellene a nyomtatásnak... ez egyébként valami speciális hőnyomtató? Nem lenne olcsóbb egy strapabíró lézernyomtató?

          1. a ponsot tipusra nem emlekszem de valami epson tm-XXX,holnap delutan mar meg tudom mondani de egy regi pos printer, meg rendes tinta szalagos(smile)  ,lpt1 porton

          2. sima nyomtato nem jo... mindenfelekeppen blokknyomtato kell es viszont ma beszelek a fonokkel hogy akar-e ujjat venni ... es akkor mar biztos nem 10eves driver lesz hozza (smile)

             

            a jelenlegi tipusa:

            epson tm-u210pa

          3. Szia!

            Szeretnek akkor toled segitseget kerni hogyan is induljak el ezen a nyomtatas teman...

            nekem a tomcat-bol valo nyomtatas megfelel(tomcat ugyan azon windows-on fut majd ahol hasznaljak a projectet) es a nyomtato driver is arra van telepitve...

            de azt sem tudom hogy induljak el ...

              1. Nagyon koszonom ... pont eleg volt a kezdesnek ... most fogom tesztelni... (smile)

              2. Szia!

                 

                a nyomtatas megy viszont akadt par problemam (sad)

                1. nem tudom hogy utasitom a nyomtato hogy vagja el a papirt...(driver biztos hogy tudja)
                2. valamiert az ekezetek nem mennek.... (viszont ha windowsbol sima notepad alol nyomtatok akkor kimegy az ekezet!)
                3. valamiert keletkezik bal oldali margo(jobb oldali nem) ... bar ennel a problemanal lehet csak a papirtarto van elcsuszva a blokknyomtatoban... (smile), ezt ugy fedeztem fel hogy meg akartam szamolni hany karaktert tudok egy sorba nyomtatni es bal oldalon volt egy kis margo jobb oldalon viszont kifutott a nyomtatas a papir szeleig...
                4. a papir hosszanak beallitasat sem veszi figyelembe mert 100mm -re lett allitva es nem tolja ki addig ... de ez igazabol nem is baj mert az a jo ha a szoveg vegen abba hagya a papir kinyomast(es utanna kene hogy elvagja...)

                Ha kell akkor a drivert is meg tudom mutatni hozza de a tipus epson tm-u210A (Patrial cut)

                ezzel a koddal nyomtatok(java6 os kod es tomcatbol nyomtatok):

                StringBuilder sb = new StringBuilder();

                // sb.append("1234567890123456789012345678901234567890");
                sb.append("NYUGTA" + "\n");
                sb.append("Készült 2. példányban, 2.pld." + "\n");
                sb.append("\n");
                sb.append("Sorszám: 202807" + "\n");
                sb.append("Kelt: 2012.11.22 12:01" + "\n");
                sb.append("Eladó:" + "\n");

                sb.toString().getBytes(Charset.forName("UTF-8"));

                DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
                PrintService[] printServices = PrintServiceLookup.lookupPrintServices(flavor, null);

                String name = "EPSON TM-U210A Partial cut 2000";
                PrintService service = null;
                for (PrintService s : printServices) {
                if (s.getName().equals(name)) {
                service = s;
                // System.out.println(s.getSupportedDocFlavors());
                }
                }

                DocPrintJob job = service.createPrintJob();
                DocAttributeSet daset = new HashDocAttributeSet();
                daset.add(new PrinterResolution(20, 20, ResolutionSyntax.DPI));
                daset.add(new MediaPrintableArea(0, 0, 40, 100, MediaPrintableArea.MM));
                Doc doc = new SimpleDoc( data, flavor, daset);

                PrintJobWatcher pjDone = new PrintJobWatcher(job);

                PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
                aset.add(new PrinterResolution(20, 20, ResolutionSyntax.DPI));
                aset.add(new MediaPrintableArea(0, 0, 40, 100, MediaPrintableArea.MM));

                job.print(doc, aset);
                pjDone.waitForDone();

                --------------------------

                s.getSupportedDocFlavors() => ez csak application/octet-stream tipusokat adja vissza... 

                Elore is koszonok minden fajta helpet, otletet tippet (smile)

                 

    1. Nekem sajnos nincs... (sad)

  4. Akkor marad a mar mukodo modszer koppintasa.... pdf generalas(Itext-vel html templatebol) vagy JasperReport + egy ghostscript nevu cucc ... amit van commandline-on hivok meg vagy van valami javas integracioja is .... (smile)

  5. Anonymous

    Szia,

    ez uni-mini-manual.pdf esetleg segíthet, az ékezetes problémát tippre az okozza, hogy a nyomtató - és a program más kódkészleten beszélget, e doksi alapján ASCII-re kellene konvertálnod, és megnézni, hogy milyen, a nyomtató által ismert alap ASCII kódokon találhatók a magyar ékezetes karakterek (már amit ismer), és azokat arra konvertálni.

  6. kosoznom! ahogy nekem sikerult utanna jarnom asszerint a javax meg azert nem kezel mindent feltetlen + ez egy regi darab ... a megoldas az lett hogy generalok egy pdf-et amit utanna egy gsprint -nevu programmal (command linenon hivva) kinyomtatok es minden jo (smile)

    viszont ha mar itt vagyunk akkor megosztom a kodot es a vegen lennne kerdesem is ... (smile)


    public class PDFHelper {
    @Deprecated
    static class StreamGobbler extends Thread {
    InputStream is;
    String type;

    StreamGobbler(InputStream is, String type) {
    this.is = is;
    this.type = type;
    }

    @Override
    public void run() {
    try {
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    String line = null;
    while ((line = br.readLine()) != null) {
    System.out.println(type + ">" + line);
    }
    } catch (IOException ioe) {
    ioe.printStackTrace();
    }
    }
    }

    public static void htmlToPDF(String html) {
    htmlToPDF(html, true);
    }

    public static void htmlToPDF(String html, boolean sendPrinter) {
    String prefix = SessionHelper.getSession().getServletContext().getRealPath("/");

    ITextRenderer iTextRenderer = new ITextRenderer();
    try {
    iTextRenderer.getFontResolver().addFont(prefix + "pdftemplates/fonts/arial.ttf", BaseFont.IDENTITY_H,
    BaseFont.EMBEDDED);
    iTextRenderer.getFontResolver().addFont(prefix + "pdftemplates/fonts/ariali.ttf", BaseFont.IDENTITY_H,
    BaseFont.EMBEDDED);
    iTextRenderer.getFontResolver().addFont(prefix + "pdftemplates/fonts/arialbi.ttf", BaseFont.IDENTITY_H,
    BaseFont.EMBEDDED);
    iTextRenderer.getFontResolver().addFont(prefix + "pdftemplates/fonts/arialbd.ttf", BaseFont.IDENTITY_H,
    BaseFont.EMBEDDED);
    iTextRenderer.getFontResolver().addFont(prefix + "pdftemplates/fonts/ariblk.ttf", BaseFont.IDENTITY_H,
    BaseFont.EMBEDDED);
    iTextRenderer.getFontResolver().addFont(prefix + "pdftemplates/fonts/ARIALN.ttf", BaseFont.IDENTITY_H,
    BaseFont.EMBEDDED);
    iTextRenderer.getFontResolver().addFont(prefix + "pdftemplates/fonts/ARIALNB.ttf", BaseFont.IDENTITY_H,
    BaseFont.EMBEDDED);
    iTextRenderer.getFontResolver().addFont(prefix + "pdftemplates/fonts/ARIALNBI.ttf", BaseFont.IDENTITY_H,
    BaseFont.EMBEDDED);
    iTextRenderer.getFontResolver().addFont(prefix + "pdftemplates/fonts/ARIALNI.ttf", BaseFont.IDENTITY_H,
    BaseFont.EMBEDDED);

    iTextRenderer.setDocumentFromString(html);

    iTextRenderer.layout();
    File tmpDir = (File) SessionHelper.getSession().getServletContext()
    .getAttribute("javax.servlet.context.tempdir");
    File file = new File(tmpDir, "output.pdf");
    FileOutputStream fileOutputStream = new FileOutputStream(file);
    iTextRenderer.createPDF(fileOutputStream);
    fileOutputStream.close();

    System.out.println("PATHHHH " + file.getAbsolutePath());

    if (sendPrinter) {
    String[] cmd = new String[3];
    cmd[0] = "c:\\Program Files\\Ghostgum\\gsview\\gsprint";
    cmd[1] = file.getAbsolutePath();
    cmd[2] = " ";
    Runtime runtime = Runtime.getRuntime();
    Process exec = runtime.exec(cmd);
    // any error message?
    StreamGobbler errorGobbler = new StreamGobbler(exec.getErrorStream(), "ERROR");

    // any output?
    StreamGobbler outputGobbler = new StreamGobbler(exec.getInputStream(), "OUTPUT");

    // kick them off
    errorGobbler.start();
    outputGobbler.start();

    System.out.println(exec.waitFor());
    }
    } catch (DocumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    public static void createPDFFromHtml(HashMap<String, Object> placeHolderMap, String[] fileNames) {
    HashMap<String, String> loadedFilesList = new HashMap<String, String>();
    StringBuilder sb = new StringBuilder();
    String html = "";
    for (String s : fileNames) {
    html = "";
    if (loadedFilesList.containsKey(s)) {
    html = loadedFilesList.get(s);
    } else {
    try {
    html = readFile(s);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    loadedFilesList.put(s, html);
    }
    sb.append(html);
    }
    html = replacePlaceHolderBatch(placeHolderMap, sb.toString());
    htmlToPDF(html);
    }

    public static String replacePlaceHolderBatch(HashMap<String, Object> map, String text) {
    for (String holder : map.keySet()) {
    text = text.replaceAll("%%" + holder + "%%", String.valueOf(map.get(holder)));
    }

    return text;
    }

    public static String replacePlaceHolder(String placeholderKey, String placeholderValue, String text) {
    return text.replaceAll("%%" + placeholderKey + "%%", placeholderValue);
    }

    public static String readFile(String path) throws IOException {
    String prefix = SessionHelper.getSession().getServletContext().getRealPath("/");
    FileInputStream stream = new FileInputStream(new File(prefix + path));
    try {
    FileChannel fc = stream.getChannel();
    MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
    /* Instead of using default, pass in a decoder. */
    return Charset.defaultCharset().decode(bb).toString();
    } finally {
    stream.close();
    }
    }
    }

     

    azt szeretnem kerdezni hogy tudom megoldani hogy ez egy service-kent mukodjon... ez alatt azt ertem hogy 2 hivas kozott eltarolna ezt az objektumot a java igy megoldhatnam hogy a template-ket ne kelljen ujra beolvas (felesleges mivel nem valtoznak) + hogy tudnam megoldani hogy amikor a cmd parancsot hivok(ez a tenyleges nyomtatas) akkor az mar egy kulon szallon fusson ? mivel jelenleg amig le nem futtnak a cmd-k addig ugye nem ter vissza es a cliens addig all (sad) es valamiert 2-3 sec amig vegez a cmd parancs vegrehajtassal (sad)

    valaki otlet vagy tipp ?