2012-05-21 16 views
9

Baskı için en iyi yaklaşım (durumumda varolan bir pdf), doğrudan php'den LAN yazıcısına nasıl ulaşılır? Şimdiye kadar çalışmak için herhangi bir şey elde etmekte başarısız oldum, ama daha fazla takip etmek için hangi yönde emin değilim. Windows SBS 2008, PHP 5.3.9 üzerinde Apache çalıştırıyorum. Bugüne kadar bildiğimizPHP'ye ağ yazıcısına yazdırma

Yaklaşımlar:

  • shell_exec()
  • phpprintipp - Ben
  • php_printer.dll işe alabilir bu benim için iyi bir yaklaşım gibi görünüyor - hayır akımı dll var

Bu, yaygın olarak kabul görmüş bir yaklaşımı olan basit bir görev olmalı gibi görünüyor, ama şu ana kadar bulamıyorum. Teşekkürler!

+2

emin değil Web sunucusundan yazıcıya gitmeye çalışırken, bunu gerçekleştirmek için yazıcıların FTP modunu kullanıyoruz. Sadece pdf'yi, yazıcının sahip olduğu ftp-spool şeyi üzerine döküyoruz ve işiniz bitti (bir kere her şeyi PDF'ye çevirebiliyorsunuz). Yazıcınız bunu destekliyorsa sadece kullanışlıdır, bu yüzden bir cevap almazsınız, bu yüzden bir yorum alırsınız;) – Nanne

+1

'php_printer.dll 'öğesini kullanın. Bunun nesi var? Neden senin için çalışmıyor? Direkt IP yazıcılara konuşarak tekerleği yeniden icat etmeyin. – Brad

+0

İşletim Sisteminin yazıcıyı neden işlemesine izin vermiyorsunuz? Komut dosyası bu 'varsayılan yazıcıyı vurmaya çalışıyorsa ve ağ (ya da yazıcıya giden rota) kullanılamıyorsa ne olur? – PenguinCoder

cevap

3

Bu, çatlamak için zor bir somundur. Ruby'den Windows baskıda kendi maceralarımı yaşadım ve PHP-arazisi system() veya exec() (escapeshellcmd()/escapeshellarg() unutma) harici bir komutu çağırmakla işe yarayacak birkaç potansiyel çözüm buldum. Bu özellikle Windows üzerinde daha kolay. Hepsi Windows tarafından yazıcının bildiğini varsayar ve adıyla isimlendirilebilir.

  1. Kelimenin tam anlamıyla sadece ağ üzerindeki yazıcıya dosyayı, örneğin yönlendirebilirsiniz:

    copy /b \path\to\filename.pdf > \\Printer_Machine\Printer_Queue 
    

    /b anahtarı bir ikili dosyayı belirtir, ama şimdi, kesinlikle değil% 80 eminim

    print /d:\\Printer_Machine\Printer_Queue \path\to\filename.pdf 
    
    : 2012.

  2. Sen print komutu deneyebilirsiniz

    \d "device" anlamına gelir. Bunu gerçekten denemedim ve 'un PDF ile mi, yoksa DOS kökenleri, metin dosyaları nedeniyle mi çalıştığından emin değilim.

  3. Adobe Reader Kurulumu ve komut satırı tesislerini kullanın:

    AcroRd32.exe /t \path\to\filename.pdf "Printer Name" "Driver Name" "Port Name" 
    

    emin değilim sunucu ortamı Reader alabildiği eğer ama bu birlikte en başarılı oldum çözümdür. documentation here (PDF, sayfa 24). Printer Name ve Driver Name, Denetim Masası'ndaki yazıcısının özelliklerinde tam olarak gördüğünüzle eşleşmelidir. Port_Name genellikle ihmal edilebilir, bence.

  4. Ghostscript numaralı telefonu kullanarak yazdırın. Bunu hiç bir zaman Windows'da, ancak documentation is here 'da denedim ve more info here var. komut şöyle bir şey:

    gswin32.exe -sDEVICE=mswinpr2 -sOutputFile="%printer%Printer Name" \path\to\filename.pdf 
    

    mswinpr2

    (yukarıdaki ikinci bağlantıya bakınız) Windows kendi baskı sürücüleri atıfta '%printer%' literal ve 'Printer Name' yine aynı olmalıdır gereklidir ve Yazıcının adını Denetim Masası'ndan tam olarak. Ghostscript birçok seçeneğe ve 'a sahiptir, muhtemelen bunları yapılandırmak için biraz zaman harcamanız gerekecektir. Nihayet

, genel ipucu:

C:\> net use LPT2 \\Printer_Machine\Printer_Queue /persistent:yes 

Bu sen \\Printer_... yerine LPT2 veya LPT2: kullanmasına izin olmalıdır: Sen net use komut örneğin bir cihaz adıyla bir ağ yazıcısı kayıt olabilirsiniz çoğu komutla.

Umarım bu işe yarar! Bu tüm yazıcılar için çalışır ama bu Zebra etiket yazıcıya ZPL dosya gönderme işi alırsa

+0

Cevabınız için teşekkürler. Seçenek 1 (kopya) yazıcının yazdırmasına neden oldu, ancak yalnızca "1 dosya kopyalandı" yazan bir sayfaydı. ve pdf'mi yazdırmadı. Seçenek 2 (baskı) ile her zaman "Aygıtın yazıcı başlatılamıyor" "mesajını alıyorum. Seçenek 3 (Adobe Reader) ile sunucudaki komut isteminden başarılı bir şekilde basabildim, ancak PHP'den çalışırken hiçbir şey elde edemedim. Yürütmeye geçtiğim satırı yineledim ve el ile girdiğim tam olarak eşleşiyor, ancak hiçbir şey olmuyor. Bunların herhangi bir fikri var mı? – Tim

+0

Sanırım bu, ya PDF dosyasına ya da yürütülebilir dosyaya bir yol sorunudur; exec() 'ile çalıştırdığınızda AcroRd32.exe çıktısı neydi? –

+0

Tim, yazdıktan sonra yazıcınıza 'control + z' (EOF) gönderdiniz mi? – Brad

1

emin değil: Bu durumda mümkündür, ancak sorunların her türlü önlemek için eğer

<?php 
if(($conn = fsockopen('192.168.10.112',9100,$errno,$errstr))===false){ 
    echo 'Connection Failed' . $errno . $errstr; 
} 

$data = <<<HERE 
    ^XA 
    ^FT50,200 
    ^A0N,200,200^FDTEST^FS 
    ^FT50,500 
    ^A0N,200,200^FDZebra Printer^FS 
    ^XZ 
HERE; 

#send request 
$fput = fputs($conn, $data, strlen($data)); 

#close the connection 
fclose($conn); 
?>