2013-11-21 149 views
0

使用PHP(Zend Framework)。但问题是我有这个,它只有基于Javascript的锻炼,还没有找到任何PHP。所以我正在做这样的事情。PHP - 从PHP如何触发JavaScript将标签打印到打印机?

步骤1:

A)PHP控制器

class TestController extends Zend_Controller_Action { 
    public function fastAction() { 
    $this->_helper->layout()->disableLayout(); 
    //$this->_helper->viewRenderer->setNoRender(); 
    } 
} 

B)试验/ fast.phtml:为HTML和JavaScript视图触发

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
<title>OnLoad Trigger PRint</title> 
<script src = "http://labelwriter.com/software/dls/sdk/js/DYMO.Label.Framework.latest.js" type="text/javascript" charset="UTF-8"> </script> 

<script type="text/javascript" charset="UTF-8"> 
(function() { 

    function onload() { 
    /* 
     "Nmbr.: {$data->badgeid}" 
     $data->name 
     $data->firstname 
     $data->company 
     $data->person 
     $data->number  
    */ 
    //var textTextArea = 'BadgeID\nName\nFirstname\nCmpany\nPerson\nNumber'; 

    function printnow(textTextArea) { 
     try { 

     var labelXml = '<DieCutLabel Version="8.0" Units="twips"><PaperOrientation>Landscape</PaperOrientation><Id>Address</Id><PaperName>30252 Address</PaperName><DrawCommands/><ObjectInfo><TextObject><Name>Text</Name><ForeColor Alpha="255" Red="0" Green="0" Blue="0" /><BackColor Alpha="0" Red="255" Green="255" Blue="255" /><LinkedObjectName></LinkedObjectName><Rotation>Rotation0</Rotation><IsMirrored>False</IsMirrored><IsVariable>True</IsVariable><HorizontalAlignment>Left</HorizontalAlignment><VerticalAlignment>Middle</VerticalAlignment><TextFitMode>ShrinkToFit</TextFitMode><UseFullFontHeight>True</UseFullFontHeight><Verticalized>False</Verticalized><StyledText/></TextObject><Bounds X="332" Y="150" Width="4455" Height="1260" /></ObjectInfo></DieCutLabel>'; 

     var label = dymo.label.framework.openLabelXml(labelXml); 
     label.setObjectText("Text", textTextArea); 

     var printers = dymo.label.framework.getPrinters(); 
     if (printers.length == 0) 
      throw "No DYMO printers are installed. Install DYMO printers."; 

     var printerName = ""; 
     for (var i = 0; i < printers.length; ++i) { 
      var printer = printers[i]; 
      if (printer.printerType == "LabelWriterPrinter") { 
      printerName = printer.name; 
      break; 
      } 
     } 

     if (printerName == "") 
      throw "No LabelWriter printers found. Install LabelWriter printer"; 

     label.print(printerName); 

     } catch(e) { 
     alert(e.message || e); 
     } 
    } 

    printnow('1234\nName\nFirstname\nCmpany\nPerson\nNumber'); 

    }; 

    // register onload event 
    if (window.addEventListener) 
     window.addEventListener("load", onload, false); 
    else if (window.attachEvent) 
     window.attachEvent("onload", onload); 
    else 
     window.onload = onload; 

}()); 

</script> 
</head> 
<body> 
</body> 
</html> 

第2步:

google-chrome "http://unittest:80/test/fast" 

第3步: OK - 结果,打印超出

但问题是,我该怎么办这件事(直)从PHP?

(默默导致其触摸屏和打印,我不能弹出了这个步骤1,2,3到最终用户体验)

任何想法吗?

回答

0

好的 - 可以使用iframe并且可以使用style来隐藏它以产生显着效果。

class TestController extends Zend_Controller_Action { 
    public function silentAction() { 
    $this->_helper->layout()->disableLayout(); 
    $this->_helper->viewRenderer->setNoRender(); 
    echo "<body><iframe src='http://printing:7007/test/fast' ></iframe></body>";  
    exit; 

    echo "<body><iframe src='http://printing:7007/test/fast?input=output' ></iframe></body>"; 
    } 

    public function fastAction() { 
    $this->_helper->layout()->disableLayout(); 
    //$this->_helper->viewRenderer->setNoRender(); 
    $this->view->output = $_GET['input']; 
    }