Thread View: pl.comp.lang.java
2 messages
2 total messages
Started by =?UTF-8?Q?Jaros
Fri, 06 Jul 2018 03:21
Drukarka zebra ZQ520 - drukowanie bitmapy - problem
Author: =?UTF-8?Q?Jaros
Date: Fri, 06 Jul 2018 03:21
Date: Fri, 06 Jul 2018 03:21
58 lines
2452 bytes
2452 bytes
Witam, po raz pierwszy na grupie. Od niespełna roku posługuje się językiem java, więc jeśli postać kodu źródłowego odbiega od prawideł to proszę o wyrozumiałość. Piszę aplikację dla Android i chciałbym na drukarce Zebra ZQ520 drukować bitmapy o zmiennej wysokości, które generuję programowo. Problem polega na tym, że drukarka owszem drukuje poprawnie obrazek ale potem wysuwa 20cm papieru, coś tak jakby równała do A4. Pisałem do Zebry ale stwierdzili, że pomoc na poziomie kodu źródłowego jest poza ich zakresem :) W google znalazłem mnóstwo niedziałających przykładów, które kosztowały mnie rolkę papieru. Jak zrobić aby drukarka wydrukowała i zatrzymała się nie marnując papieru ? Poniżej kod źródłowy procedury drukującej bitmapę, byłbym wdzięczny za sugestie. Jarek. public void printPhotoFromExternal(final Bitmap bitmap, final Integer heigth, final Integer width) { new Thread(new Runnable() { public void run() { try { Looper.prepare(); Connection connection = new BluetoothConnectionInsecure(WartosciGlobalne.ZebraMAC); connection.open(); ZebraPrinter printer = ZebraPrinterFactory.getInstance(connection); //connection.write("! DF CONFIG.SYS\r\n! UTILITIES\r\nGAP-SENSE\r\nPRINT\r\n".getBytes()); //connection.write("~jc^xa^jus^xz".getBytes()); printer.printImage(new ZebraImageAndroid(bitmap), 0, 0, width, heigth, false); connection.close(); } catch (ConnectionException e) { Log.e("BT", "Blad podlaczenia " + e.getMessage()); // helper.showErrorDialogOnGuiThread(e.getMessage()); } catch (ZebraPrinterLanguageUnknownException e) { Log.e("BT", "Blad podlaczenia " + e.getMessage()); // helper.showErrorDialogOnGuiThread(e.getMessage()); } finally { bitmap.recycle(); // helper.dismissLoadingDialog(); Looper.myLooper().quit(); } } }).start(); }
Re: Drukarka zebra ZQ520 - drukowanie bitmapy - problem
Author: =?UTF-8?Q?Sebast
Date: Fri, 10 Aug 2018 22:42
Date: Fri, 10 Aug 2018 22:42
348 lines
11548 bytes
11548 bytes
On 7/6/2018 12:21 PM, Jarosław Ostrowski wrote: > Od niespełna roku posługuje się językiem java, więc jeśli postać kodu źródłowego odbiega od prawideł to proszę o wyrozumiałość. > Piszę aplikację dla Android i chciałbym na drukarce > Zebra ZQ520 drukować bitmapy o zmiennej wysokości, > które generuję programowo. > > Problem polega na tym, że drukarka owszem drukuje poprawnie > obrazek ale potem wysuwa 20cm papieru, coś tak jakby równała do A4. Mialem podobne problemy (na PC) z drukowaniem na Zebrze TPL2824, "strona" była domyslnie A4 i nijak nie bylem w stanie ustawic prawidłowo rozmiaru papieru naklejki, drukowało się coś na pierwszej a potem wylatywało 12 nastepnych, pustych. Przyszlo olsnienie kiedy okazało się że należalo wywołać metodę ustawiająca defaulowy rozmiar papieru i nagle wszystko drukowało się na naklejce perfekcyjnie (tutaj nie pamiętam na 100%, więc powiedzmy że na 90% trzeba było ustawić default ;) bo domyslny default był mało default. Moglem sobie ustwiać obszar wydruku nawet 1mm x 1mm i działało. Teraz Cie zmartwie, mialem z tym przeboje z 10 lat temu i nie pamiętam. Ale znalazlem fragment kodu, może ci się przyda: public class PrinterTest implements java.awt.print.Printable { /** * @param args the command line arguments */ public PrinterTest() { java.awt.print.PrinterJob job = java.awt.print.PrinterJob.getPrinterJob(); if ( !job.printDialog() ) return; try { java.awt.print.PageFormat format = job.defaultPage(); java.awt.print.Paper paper = format.getPaper(); paper.setSize( 1.75 * 75, 3 * 75 ); paper.setImageableArea( 0 , 0 , paper.getWidth() , paper.getHeight() ); format.setPaper( paper ); format = job.validatePage( format ); job.setPrintable( this, format ); job.print(); } catch ( java.awt.print.PrinterException _e ) { } } public int print ( java.awt.Graphics g , java.awt.print.PageFormat pageFormat , int page) { if ( page != 0 ) return (NO_SUCH_PAGE); java.awt.Graphics2D g2d = (java.awt.Graphics2D) g; g2d.translate (pageFormat.getImageableX (), pageFormat.getImageableY ()); java.lang.String parser = org.apache.batik.util.XMLResourceDescriptor.getXMLParserClassName(); org.apache.batik.dom.svg.SAXSVGDocumentFactory factory = new org.apache.batik.dom.svg.SAXSVGDocumentFactory(parser); try { java.lang.String uri = "file:///d:/y.svg"; org.w3c.dom.Document doc = factory.createDocument( uri ); org.w3c.dom.svg.SVGDocument document = ( org.w3c.dom.svg.SVGDocument ) doc; org.apache.batik.svggen.SVGGraphics2D graphics = new org.apache.batik.svggen.SVGGraphics2D( doc ); } catch ( java.io.IOException _e ) { } return (PAGE_EXISTS); } public static void main(String args[]) { try { javax.swing.UIManager.setLookAndFeel( javax.swing.UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { } java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new PrinterTest(); } }); } } Drukarka slicznie drukowała barcody na naklejkach z dodatkowymi efektami w postaci grafiki SVG. Ale co do kodu nie wiem czy to ten co dzialał czy to ten co nie działał. Dawno to bylo a TPL odeszła do krainy wiecznie zimnej głowicy i nie mam jak sprawdzić. W razie czego tu masz inny, też nie wiem czy sprawny, ale bardziej wypasiony ;): public class SVGLabelPrinter { public SVGLabelPrinter( int _num ) { m_num = _num; } public void print( java.io.InputStream _stream ) { org.apache.batik.transcoder.TranscoderInput inputTranscoder = new org.apache.batik.transcoder.TranscoderInput( _stream ); print( inputTranscoder ); } public void print( org.w3c.dom.Document _document ) { org.apache.batik.transcoder.TranscoderInput inputTranscoder = new org.apache.batik.transcoder.TranscoderInput( _document ); print( inputTranscoder ); } public void print( org.apache.batik.transcoder.TranscoderInput _inputTranscoder ) { org.apache.batik.transcoder.print.PrintTranscoder printTranscoder = new org.apache.batik.transcoder.print.PrintTranscoder(); printTranscoder.transcode( _inputTranscoder, null ); javax.print.PrintService[] services = javax.print.PrintServiceLookup.lookupPrintServices(null, null); int i; net.sebobialy.utilities.configreader.ConfigReader configReader = new net.sebobialy.utilities.configreader.ConfigReader( "printer-config" + m_num + ".txt" ); System.out.println( "printer-config" + m_num + ".txt" ); java.lang.String device = configReader.getAsString( "LabelPrinter", "TLP2824"); for ( i = 0; i < services.length; i++ ) { System.out.println( "Printer: " + services[i].getName() ); if ( services[i].getName().contains( device ) ) break; } if ( i == services.length ) { javax.swing.JOptionPane.showMessageDialog( null , "Unable to find label printer: " + device + " please check printer-config.txt file" , "Error" , javax.swing.JOptionPane.ERROR_MESSAGE ); return; } try { java.awt.print.PageFormat pFormat = new java.awt.print.PageFormat(); double configHeight = configReader.getAsDouble( "LabelHeight", 3.34 ); double configWidth = configReader.getAsDouble( "LabelWidth", 1.77 ); double configMargin = configReader.getAsDouble( "LabelMargin", 0.2 ); double margin = configMargin * 72; double sizex = configWidth * 72; double sizey = configHeight * 72; java.awt.print.Paper paper = pFormat.getPaper(); paper.setSize(sizex, sizey); paper.setImageableArea( margin, margin, sizex-margin*2, sizey-margin*2); pFormat.setPaper( paper ); double width = pFormat.getWidth(); double height = pFormat.getHeight(); double movex = pFormat.getImageableX(); double movey = pFormat.getImageableY(); if ( configReader.getAsBoolean( "Horizontal", true ) ) pFormat.setOrientation( java.awt.print.PageFormat.PORTRAIT); else pFormat.setOrientation( java.awt.print.PageFormat.LANDSCAPE); java.awt.print.PrinterJob pJob = java.awt.print.PrinterJob.getPrinterJob(); pJob.setPrintable( printTranscoder, pFormat); pJob.setPrintService( services[i] ); printTranscoder.setTranscoderBooleanHint(printTranscoder, org.apache.batik.transcoder.print.PrintTranscoder.KEY_SCALE_TO_PAGE_STR, org.apache.batik.transcoder.print.PrintTranscoder.KEY_SCALE_TO_PAGE); org.apache.batik.transcoder.print.PrintTranscoder.setTranscoderFloatHint(printTranscoder, org.apache.batik.transcoder.print.PrintTranscoder.KEY_LANGUAGE_STR, org.apache.batik.transcoder.print.PrintTranscoder.KEY_LANGUAGE); // User stylesheet printTranscoder.setTranscoderFloatHint(printTranscoder, org.apache.batik.transcoder.print.PrintTranscoder.KEY_USER_STYLESHEET_URI_STR, org.apache.batik.transcoder.print.PrintTranscoder.KEY_USER_STYLESHEET_URI); // XML parser printTranscoder.setTranscoderStringHint(printTranscoder, org.apache.batik.transcoder.print.PrintTranscoder.KEY_XML_PARSER_CLASSNAME_STR, org.apache.batik.transcoder.print.PrintTranscoder.KEY_XML_PARSER_CLASSNAME); // Scale to page printTranscoder.setTranscoderBooleanHint(printTranscoder, org.apache.batik.transcoder.print.PrintTranscoder.KEY_SCALE_TO_PAGE_STR, org.apache.batik.transcoder.print.PrintTranscoder.KEY_SCALE_TO_PAGE); // AOI printTranscoder.setTranscoderRectangleHint(printTranscoder, org.apache.batik.transcoder.print.PrintTranscoder.KEY_AOI_STR, org.apache.batik.transcoder.print.PrintTranscoder.KEY_AOI); // Image size printTranscoder.setTranscoderFloatHint(printTranscoder, org.apache.batik.transcoder.print.PrintTranscoder.KEY_WIDTH_STR, org.apache.batik.transcoder.print.PrintTranscoder.KEY_WIDTH); printTranscoder.setTranscoderFloatHint(printTranscoder, org.apache.batik.transcoder.print.PrintTranscoder.KEY_HEIGHT_STR, org.apache.batik.transcoder.print.PrintTranscoder.KEY_HEIGHT); // Pixel to millimeter printTranscoder.setTranscoderFloatHint(printTranscoder, org.apache.batik.transcoder.print.PrintTranscoder.KEY_PIXEL_TO_MM_STR, org.apache.batik.transcoder.print.PrintTranscoder.KEY_PIXEL_UNIT_TO_MILLIMETER); // Page orientation printTranscoder.setTranscoderStringHint(printTranscoder, org.apache.batik.transcoder.print.PrintTranscoder.KEY_PAGE_ORIENTATION_STR, org.apache.batik.transcoder.print.PrintTranscoder.KEY_PAGE_ORIENTATION); // Page size printTranscoder.setTranscoderFloatHint(printTranscoder, org.apache.batik.transcoder.print.PrintTranscoder.KEY_PAGE_WIDTH_STR, org.apache.batik.transcoder.print.PrintTranscoder.KEY_PAGE_WIDTH); printTranscoder.setTranscoderFloatHint(printTranscoder, org.apache.batik.transcoder.print.PrintTranscoder.KEY_PAGE_HEIGHT_STR, org.apache.batik.transcoder.print.PrintTranscoder.KEY_PAGE_HEIGHT); // Margins printTranscoder.setTranscoderFloatHint(printTranscoder, org.apache.batik.transcoder.print.PrintTranscoder.KEY_MARGIN_TOP_STR, org.apache.batik.transcoder.print.PrintTranscoder.KEY_MARGIN_TOP); printTranscoder.setTranscoderFloatHint(printTranscoder, org.apache.batik.transcoder.print.PrintTranscoder.KEY_MARGIN_RIGHT_STR, org.apache.batik.transcoder.print.PrintTranscoder.KEY_MARGIN_RIGHT); printTranscoder.setTranscoderFloatHint(printTranscoder, org.apache.batik.transcoder.print.PrintTranscoder.KEY_MARGIN_BOTTOM_STR, org.apache.batik.transcoder.print.PrintTranscoder.KEY_MARGIN_BOTTOM); printTranscoder.setTranscoderFloatHint(printTranscoder, org.apache.batik.transcoder.print.PrintTranscoder.KEY_MARGIN_LEFT_STR, org.apache.batik.transcoder.print.PrintTranscoder.KEY_MARGIN_LEFT); // Dialog options printTranscoder.setTranscoderBooleanHint(printTranscoder, org.apache.batik.transcoder.print.PrintTranscoder.KEY_SHOW_PAGE_DIALOG_STR, org.apache.batik.transcoder.print.PrintTranscoder.KEY_SHOW_PAGE_DIALOG); printTranscoder.setTranscoderBooleanHint(printTranscoder, org.apache.batik.transcoder.print.PrintTranscoder.KEY_SHOW_PRINTER_DIALOG_STR, org.apache.batik.transcoder.print.PrintTranscoder. KEY_SHOW_PRINTER_DIALOG); // printTranscoder.addTranscodingHint( // org.apache.batik.transcoder.print.PrintTranscoder.KEY_SCALE_TO_PAGE, new java.lang.Boolean( true ) ); javax.print.attribute.PrintRequestAttributeSet set = new javax.print.attribute.HashPrintRequestAttributeSet(); pJob.print( set ); } catch (java.awt.print.PrinterException e) { } } private void dumpSet(javax.print.attribute.PrintRequestAttributeSet _set ) { javax.print.attribute.Attribute attributes[] = _set.toArray(); for ( int i = 0 ; i < attributes.length ; i++) System.out.println( attributes[0].getName() ); } int m_num; } Ogólnie problem jak pamiętam sprowadzał się do ustawienia domyslnej strony (pageFormat? a może HashPrintRequestAttributeSet? Nie pamiętam.). Bez tego drukowało, ale miało absurdalny rozmiar.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads