2016-07-01 227 views
6

我跟着Epson SDK为Android热敏打印收据......如何打印图片在热敏打印机全纸张尺寸(80MM)(EPSON)

所以不是我给出了一些图片内容包含整个图像.. 在Logoimage(商店)的一部分。这哪像下面

enter image description here

这里的商店是该Logoimage insted的我已经给我的Recipt(图片),所以我越来越喜欢以上..其不印刷全尺寸...

这是我的代码

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(); 
     } 
    }); 
} 
} 

任何一个可以建议我在哪里,我调整图像的大小,这样我应打印的页面区域,而不是标志大小...

这是图像内容数据 用于图像

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

并且这对于图像内容..

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); 

请建议如何打印图像内容以全尺寸... 我得到页的侧..

应该打印件80尺寸mm,但其打印40毫米任何一个可以建议我如何使其成为全尺寸或如何调整图像的大小,以将其拉伸到最大纸张面积...

+0

如何打印条形码? –

+0

一旦检查我的代码..在那里我正在使用条形码... – MLN

+0

@MLN你是如何解决这个问题的? –

回答

0

您的问题有点不清楚。

我觉得你的问题是:

  • 你在某些分辨率为Android BitMapFactory给出了图像数据。
  • 您想在某台打印机上使用另一个DPI进行打印。图像的Android BitMapFactory已经设置。
  • 您需要为您的徽标缩放BitMapFactory。

首先,在获取徽标数据的行中,您可以尝试只是浏览选项BitmapFactory.Options.inSampleSize以获得正确的大小。这会让你更好,但不是完美的答案。

为了完美,您应该缩放徽标。您可以使用代码here。另请参阅相关问题herehere

+0

嗨@Charles Merriam先生,当我用文本打印数据时......它在全纸上打印......哪一个是左侧,,,在那个“商店”是图像......那么这个图像我有完整的数据作为图像...但它不打印全页..请帮助我..检查我的位图大小..等..从我的问题,并建议我应该在哪里需要改变.. – MLN

相关问题