2012-06-23 162 views
4

我一直在堆棧看着做什麼需要做什麼,並有輕微混淆。PHP服務器端打印Ubuntu服務器

讓我們弄清楚這是一個基於本地的intra-net,我明白PHP是服務器端。

我在基於Web的PHP,JAVA,Jquery Idea上運行公司管理解決方案。並且我們希望直接從「LINUX」服務器和收據等打印報告。

我已經在服務器上安裝了杯子,服務器打印正常,現在我只是停留在是否真的有可能讓服務器打印我們直接從PHP代碼生成的pdf文件。

我會即使我們有一個bash腳本來運行和檢查目錄打印的PDF,然後刪除它高興,雖然我也看到周圍這是一個工作暫時。

就像我說我不明白,如果這是在WWW做到,那麼會有一定的漏洞,可以被使用。如果我在www上運行這個系統,我會有一個完全不同的網站,不允許打印,這個功能不是必須的。

預先感謝您

亞歷

回答

2

如果CUPS配置正確,從外殼打印PDF是字面上一樣容易

lpr myfile.pdf 

所以,一旦你寫你的PDF到一個臨時文件,可以使用任何可用的PHP函數來執行shell命令:exec()shell_exec()system()

你甚至可以做到這一點,而無需編寫一個臨時文件,並通過標準輸入(試行cat myfile.pdf | lpr作爲外殼的例子)中的數據直接進料到lpr

您可以在PHP中,如果你運行它使用proc_open()飼料數據到程序的標準輸入。從PHP Manual第一個例子可以適應這樣的事:

<?php 
$descriptorspec = array(
    0 => array("pipe", "r"), // stdin is a pipe that the child will read from 
); 

$process = proc_open('lpr', $descriptorspec, $pipes); 

if (is_resource($process)) { 
    // $pipes now looks like this: 
    // 0 => writeable handle connected to child stdin 
    // 1 => readable handle connected to child stdout 
    // Any error output will be appended to /tmp/error-output.txt 

    fwrite($pipes[0], $pdf_data); 
    fclose($pipes[0]); 
} 
?> 
0

明智地使用PHP的shell_exec()的應該讓你同步打印PDF文件,其創建後立即,從而避免了慶典的需要。

我沒有使用shell_exec()進行打印,所以無法提供詳細信息,但實質上,如果您可以成功組成UNIX打印命令,則可以編寫shell_exec()指令。

+1

這是'了shell_exec()',實際上 – pixelistik

+0

錯字 - 感謝 - 糾正。 –

+0

感謝您的快速反應我會研究shell_exec()如果任何人都可以添加到這種方式做它會非常感謝 – ZeroG

1

使用PHP::PRINT::IPP

它是使用PHP從Web打印最安全和最簡單的方式。在這裏,您不必啓用可利用的PHP功能,如exec()shell_exec()等。

基本用法

<?php 
    require_once(PrintIPP.php); 

    $ipp = new PrintIPP();       
    $ipp->setHost("localhost"); 
    $ipp->setPrinterURI("/printers/epson"); 
    $ipp->setData("./testfiles/test-utf8.txt"); // Path to file. 
    $ipp->printJob();               
?> 

Reference

+0

這個庫也是非常有用的 - > https://github.com/mike42/escpos- php – wnasich

+0

但是,您只能使用PrintIPP打印txt,並且傢伙正在詢問PDF。 –