2016-07-01 21 views
6

ho seguito Epson SDK per Android per stampare le ricevute termiche ...Come stampare un'immagine Alla formato carta pieno (80 mm) a stampante termica (EPSON)

Così, invece del testo mi viene data una certa immagine, che contiene tutta la immagine .. alla parte Logoimage (il negozio) .. che è come sotto

enter image description here

Qui lo Store è il Logoimage invece di che ho dato il mio recipt (immagine) Così sto ricevendo come sopra .. Non stampa a grandezza naturale ...

questo è il mio codice

public class MainActivity extends Activity implements View.OnClickListener, ReceiveListener { 

private Context mContext = null; 
private EditText mEditTarget = null; 
private Spinner mSpnSeries = null; 
private Spinner mSpnLang = null; 
private Printer mPrinter = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mContext = this; 

    int[] target = { 
     R.id.btnDiscovery, 
     R.id.btnSampleReceipt, 
    }; 

    for (int i = 0; i < target.length; i++) { 
     Button button = (Button)findViewById(target[i]); 
     button.setOnClickListener(this); 
    } 

    mSpnSeries = (Spinner)findViewById(R.id.spnModel); 
    ArrayAdapter<SpnModelsItem> seriesAdapter = new ArrayAdapter<SpnModelsItem>(this, android.R.layout.simple_spinner_item); 
    seriesAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    seriesAdapter.add(new SpnModelsItem(getString(R.string.printerseries_t20), Printer.TM_T20)); 
    mSpnSeries.setAdapter(seriesAdapter); 
    mSpnSeries.setSelection(0); 

    try { 
     Log.setLogSettings(mContext, Log.PERIOD_TEMPORARY, Log.OUTPUT_STORAGE, null, 0, 1, Log.LOGLEVEL_LOW); 
    } 
    catch (Exception e) { 
     ShowMsg.showException(e, "setLogSettings", mContext); 
    } 
    mEditTarget = (EditText)findViewById(R.id.edtTarget); 
} 

@Override 
protected void onActivityResult(int requestCode, final int resultCode, final Intent data) { 
    if (data != null && resultCode == RESULT_OK) { 
     String target = data.getStringExtra(getString(R.string.title_target)); 
     if (target != null) { 
      EditText mEdtTarget = (EditText)findViewById(R.id.edtTarget); 
      mEdtTarget.setText(target); 
     } 
    } 
} 

@Override 
public void onClick(View v) { 
    Intent intent = null; 

    switch (v.getId()) { 
     case R.id.btnDiscovery: 
      intent = new Intent(this, DiscoveryActivity.class); 
      startActivityForResult(intent, 0); 
      break; 

     case R.id.btnSampleReceipt: 
      updateButtonState(false); 
      if (!runPrintReceiptSequence()) { 
       updateButtonState(true); 
      } 
      break; 

     case R.id.btnSampleCoupon: 
      updateButtonState(false); 
      if (!runPrintCouponSequence()) { 
       updateButtonState(true); 
      } 
      break; 

     default: 
      // Do nothing 
      break; 
    } 
} 

private boolean runPrintReceiptSequence() { 
    if (!initializeObject()) { 
     return false; 
    } 

    if (!createReceiptData()) { 
     finalizeObject(); 
     return false; 
    } 

    if (!printData()) { 
     finalizeObject(); 
     return false; 
    } 

    return true; 
} 

private boolean createReceiptData() { 
    String method = ""; 
    Bitmap logoData = BitmapFactory.decodeResource(getResources(), R.drawable.store); 
    StringBuilder textData = new StringBuilder(); 
    final int barcodeWidth = 2; 
    final int barcodeHeight = 100; 

    if (mPrinter == null) { 
     return false; 
    } 

    try { 
     method = "addTextAlign"; 
     mPrinter.addTextAlign(Printer.ALIGN_CENTER); 

     method = "addImage"; 
     mPrinter.addImage(logoData, 0, 0, 
          logoData.getWidth(), 
          logoData.getHeight(), 
          Printer.COLOR_1, 
          Printer.MODE_MONO, 
          Printer.HALFTONE_DITHER, 
          Printer.PARAM_DEFAULT, 
          Printer.COMPRESS_AUTO); 

     method = "addFeedLine"; 
     mPrinter.addFeedLine(1); 
     textData.append("EPSON PRINT DEMO TEST - (HYD)\n"); 
     textData.append("STORE DIRECTOR – MLN\n"); 
     textData.append("\n"); 
     textData.append("07/06/12 09:15 012 0191 134\n"); 
     textData.append("ST# 21 OP# 001 TE# 01 TR# 747\n"); 
     textData.append("------------------------------\n"); 
     method = "addText"; 
     mPrinter.addText(textData.toString()); 
     textData.delete(0, textData.length()); 

     textData.append("524 3 CUP BLK TEAPOT 9.99 R\n"); 
     textData.append("003 WESTGATE BLACK 25 59.99 R\n"); 
     textData.append("------------------------------\n"); 
     method = "addText"; 
     mPrinter.addText(textData.toString()); 
     textData.delete(0, textData.length()); 

     textData.append("SUBTOTAL    69.98\n"); 
     textData.append("TAX      14.43\n"); 
     method = "addText"; 
     mPrinter.addText(textData.toString()); 
     textData.delete(0, textData.length()); 

     method = "addTextSize"; 
     mPrinter.addTextSize(2, 2); 
     method = "addText"; 
     mPrinter.addText("TOTAL 84.41\n"); 
     method = "addTextSize"; 
     mPrinter.addTextSize(1, 1); 
     method = "addFeedLine"; 
     mPrinter.addFeedLine(1); 

     textData.append("CASH     200.00\n"); 
     textData.append("CHANGE     78.14\n"); 
     textData.append("------------------------------\n"); 
     method = "addText"; 
     mPrinter.addText(textData.toString()); 
     textData.delete(0, textData.length()); 

     textData.append("Purchased item total number\n"); 
     textData.append("Sign Up and Save !\n"); 
     textData.append("With Preferred Saving Card\n"); 

     method = "addText"; 
     mPrinter.addText(textData.toString()); 
     textData.delete(0, textData.length()); 
     method = "addFeedLine"; 
     mPrinter.addFeedLine(2); 

     method = "addCut"; 
     mPrinter.addCut(Printer.CUT_FEED); 


    } 
    catch (Exception e) { 
     ShowMsg.showException(e, method, mContext); 
     return false; 
    } 

    textData = null; 

    return true; 
} 

private boolean runPrintCouponSequence() { 
    if (!initializeObject()) { 
     return false; 
    } 

    if (!createCouponData()) { 
     finalizeObject(); 
     return false; 
    } 

    if (!printData()) { 
     finalizeObject(); 
     return false; 
    } 

    return true; 
} 


private boolean printData() { 
    if (mPrinter == null) { 
     return false; 
    } 

    if (!connectPrinter()) { 
     return false; 
    } 

    PrinterStatusInfo status = mPrinter.getStatus(); 

    dispPrinterWarnings(status); 

    if (!isPrintable(status)) { 
     ShowMsg.showMsg(makeErrorMessage(status), mContext); 
     try { 
      mPrinter.disconnect(); 
     } 
     catch (Exception ex) { 
      // Do nothing 
     } 
     return false; 
    } 

    try { 
     mPrinter.sendData(Printer.PARAM_DEFAULT); 
    } 
    catch (Exception e) { 
     ShowMsg.showException(e, "sendData", mContext); 
     try { 
      mPrinter.disconnect(); 
     } 
     catch (Exception ex) { 
      // Do nothing 
     } 
     return false; 
    } 

    return true; 
} 

private boolean initializeObject() { 
    try { 
     mPrinter = new Printer(((SpnModelsItem) mSpnSeries.getSelectedItem()).getModelConstant(), 
           ((SpnModelsItem) mSpnLang.getSelectedItem()).getModelConstant(), 
           mContext); 
    } 
    catch (Exception e) { 
     ShowMsg.showException(e, "Printer", mContext); 
     return false; 
    } 

    mPrinter.setReceiveEventListener(this); 

    return true; 
} 

private void finalizeObject() { 
    if (mPrinter == null) { 
     return; 
    } 

    mPrinter.clearCommandBuffer(); 

    mPrinter.setReceiveEventListener(null); 

    mPrinter = null; 
} 

private boolean connectPrinter() { 
    boolean isBeginTransaction = false; 

    if (mPrinter == null) { 
     return false; 
    } 

    try { 
     mPrinter.connect(mEditTarget.getText().toString(), Printer.PARAM_DEFAULT); 
    } 
    catch (Exception e) { 
     ShowMsg.showException(e, "connect", mContext); 
     return false; 
    } 

    try { 
     mPrinter.beginTransaction(); 
     isBeginTransaction = true; 
    } 
    catch (Exception e) { 
     ShowMsg.showException(e, "beginTransaction", mContext); 
    } 

    if (isBeginTransaction == false) { 
     try { 
      mPrinter.disconnect(); 
     } 
     catch (Epos2Exception e) { 
      // Do nothing 
      return false; 
     } 
    } 

    return true; 
} 

private void disconnectPrinter() { 
    if (mPrinter == null) { 
     return; 
    } 

    try { 
     mPrinter.endTransaction(); 
    } 
    catch (final Exception e) { 
     runOnUiThread(new Runnable() { 
      @Override 
      public synchronized void run() { 
       ShowMsg.showException(e, "endTransaction", mContext); 
      } 
     }); 
    } 

    try { 
     mPrinter.disconnect(); 
    } 
    catch (final Exception e) { 
     runOnUiThread(new Runnable() { 
      @Override 
      public synchronized void run() { 
       ShowMsg.showException(e, "disconnect", mContext); 
      } 
     }); 
    } 

    finalizeObject(); 
} 

private boolean isPrintable(PrinterStatusInfo status) { 
    if (status == null) { 
     return false; 
    } 

    if (status.getConnection() == Printer.FALSE) { 
     return false; 
    } 
    else if (status.getOnline() == Printer.FALSE) { 
     return false; 
    } 
    else { 
     ;//print available 
    } 

    return true; 
} 

private String makeErrorMessage(PrinterStatusInfo status) { 
    String msg = ""; 

    if (status.getBatteryLevel() == Printer.BATTERY_LEVEL_0) { 
     msg += getString(R.string.handlingmsg_err_battery_real_end); 
    } 

    return msg; 
} 

private void dispPrinterWarnings(PrinterStatusInfo status) { 
    EditText edtWarnings = (EditText)findViewById(R.id.edtWarnings); 
    String warningsMsg = ""; 

    if (status == null) { 
     return; 
    } 

    if (status.getPaper() == Printer.PAPER_NEAR_END) { 
     warningsMsg += getString(R.string.handlingmsg_warn_receipt_near_end); 
    } 

    if (status.getBatteryLevel() == Printer.BATTERY_LEVEL_1) { 
     warningsMsg += getString(R.string.handlingmsg_warn_battery_near_end); 
    } 

    edtWarnings.setText(warningsMsg); 
} 

private void updateButtonState(boolean state) { 
    Button btnReceipt = (Button)findViewById(R.id.btnSampleReceipt); 
    Button btnCoupon = (Button)findViewById(R.id.btnSampleCoupon); 
    btnReceipt.setEnabled(state); 
    btnCoupon.setEnabled(state); 
} 

@Override 
public void onPtrReceive(final Printer printerObj, final int code, final PrinterStatusInfo status, final String printJobId) { 
    runOnUiThread(new Runnable() { 
     @Override 
     public synchronized void run() { 
      ShowMsg.showResult(code, makeErrorMessage(status), mContext); 

      dispPrinterWarnings(status); 

      updateButtonState(true); 

      new Thread(new Runnable() { 
       @Override 
       public void run() { 
        disconnectPrinter(); 
       } 
      }).start(); 
     } 
    }); 
} 
} 

uno può, dove si regola la dimensione dell'immagine suggerire in modo che dovrei stampare l'area della pagina, invece di dimensioni logo ...

questo è contenuto Immagine dati per l'immagine

String method = ""; 
Bitmap logoData = BitmapFactory.decodeResource(getResources(), R.drawable.store); 
//I have given this Bitmap logoData = BitmapFactory.decodeResource(getResources(), R.drawable.full); 

e questo è per il contenuto dell'immagine ..

method = "addImage"; 
    mPrinter.addImage(logoData,0,0,logoData.getWidth(),logoData.getHeight(),Printer.COLOR_1,Printer.MODE_MONO,Printer.HALFTONE_DITHER,Printer.PARAM_DEFAULT,Printer.COMPRESS_AUTO); 

Si prega di suggerire come stampare il contenuto dell'immagine a schermo intero ... mi stanno un lato della pagina ..

Dovrebbe Stampa 80 mm di dimensioni, ma la sua stampa di 40 millimetri uno può suggerire come rendilo a grandezza naturale o come regolare la dimensione dell'immagine per estenderla alla massima area di carta ...

+0

Come si stampa il codice a barre? –

+0

Una volta controlla il mio codice .. Laggiù sto usando il codice a barre ... – MLN

+0

@MLN come hai risolto questo problema? –

risposta

0

La tua domanda è un po 'oscura.

Penso che la tua domanda è:

  • Si sono dati i dati per l'immagine ad un certo risoluzione come un BitMapFactory Android.
  • Si desidera stampare su alcune stampanti, con un altro DPI. La BitMapFactory di Android per l'immagine è già impostata.
  • È necessario ridimensionare BitMapFactory per il logo.

Per prima cosa, nella tua linea di ottenere i dati del logo, puoi provare a esplorare l'opzione BitmapFactory.Options.inSampleSize per ottenere le dimensioni giuste. Questo ti darebbe una risposta migliore, ma non perfetta.

Per perfetto, è necessario ridimensionare il logo. È possibile utilizzare il codice here. Vedi anche le domande correlate here e here.

+0

Ciao @Charles Merriam Signore, quando stampo i dati con il testo ... la sua stampa sulla carta completa ... che è lato sinistro ,,, E in che "lo Store" è l'immagine ... così istante di quell'immagine Ho dato i dati completi come immagine ... ma non stampa sulla pagina completa .. per favore aiutami .. controlla la mia dimensione bitmap .. ecc. Dalla mia domanda e suggeriscimi dove dovrei cambiare .. – MLN

Problemi correlati