Groups | Search | Server Info | Login | Register


Groups > pl.comp.lang.java > #10845

Re: Drukarka zebra ZQ520 - drukowanie bitmapy - problem

From Sebastian Biały <heby@poczta.onet.pl>
Newsgroups pl.comp.lang.java
Subject Re: Drukarka zebra ZQ520 - drukowanie bitmapy - problem
Date 2018-08-10 22:42 +0200
Organization ATMAN - ATM S.A.
Message-ID <pkktbm$fa$1@node2.news.atman.pl> (permalink)
References <27f19be6-f6d3-45c4-8403-01869f009208@googlegroups.com>

Show all headers | View raw


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.

Back to pl.comp.lang.java | Previous | NextPrevious in thread | Find similar


Thread

Drukarka zebra ZQ520 - drukowanie bitmapy - problem Jarosław Ostrowski <pigobocian@gmail.com> - 2018-07-06 03:21 -0700
  Re: Drukarka zebra ZQ520 - drukowanie bitmapy - problem Sebastian Biały <heby@poczta.onet.pl> - 2018-08-10 22:42 +0200

csiph-web