Groups | Search | Server Info | Login | Register
Groups > pl.comp.lang.java > #10845
| 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> |
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 | Next — Previous in thread | Find similar
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