Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: Drukarka zebra ZQ520 - drukowanie bitmapy - problem

12 views
Skip to first unread message

Sebastian Biały

unread,
Aug 10, 2018, 4:42:32 PM8/10/18
to
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.
0 new messages