Toon posts:

[PHP] printipp

Pagina: 1
Acties:

Onderwerpen


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
Ik ben al een tijd lang aan het klooien met het werkend krijgen van een IPP printer via PHP. Het wil me maar niet lukken. Ik hoop dat ik hier een beetje duidelijk kan uitleggen wat mijn probleem is, misschien dat iemand me dan de juiste richting op kan sturen.

De situatie

Ik heb een CMS systeem gemaakt, waaruit de klant PDF en/of tekstfiles wil kunnen printen op printers op verschillende lokaties. De systeembeheerder van de klant heeft nu van een tweetal IPP printers aangemaakt op twee verschillende lokaties. Vervolgens heeft hij deze twee printers toegevoegd aan de printers op de server waar ik de PHP op zet. (Windows 2008SB) Als ik een RDP opzet met deze server een een testpagina afdruk naar 1 van de printers, dan werkt dit (zegt men, ik zit zelf niet naast de printer ;)). Alleen de betreffende server heeft, zonder login of wachtwoord, toegang tot de printers.

Wat heb ik gedaan?

ik heb de module printipp gedownload. Dit is de enige PHP module die ik kan vinden m.b.t. IPP printing (er lijken er meer te zijn, maar die verwijzen uiteindelijk allemaal naar dezelfde module). Vervolgens heb ik de voorbeeldcode voor BasicIPP, ExtendedIPP en CupsIPP proberen toe te passen op de printers die ik ter beschikking heb. Tot nu toe helaas zonder resultaat. Ik krijg altijd een timeout.

ik gebruik bijv. deze code (en vele probeervarianten daarvan):
code:
1
2
3
4
5
6
7
8
9
10
11
12
require_once("PrintIPP.php");
$ipp = new PrintIPP();
//$ipp->ssl = true;
$ipp->debug_level = 1;
$ipp->setLog('log.txt','file',1); 

$ipp->setHost("ipadres-of-domeinnaam");
$ipp->setPrinterUri("/printers/HP");
// $ipp->setPrinterUri("/printers/HP/.printer");
// $ipp->setPort();

$ipp->getPrinterAttributes();


in alle gevallen krijg ik na een seconde of 30 als melding van de debug: NO RESPONSE FROM SERVER

als ik de port op 80 zet, dan krijg ik wel antwoord van de server, namelijk keurig de html-code van de "printer-website" waarin je een lijst met printers ziet en allerlei settings kunt bekijken (als je via de browser naar het betreffende ipadres-of-domeinnaam zou gaan). Er is dus wel contact met de printerserver en de printerserver weet zelf ook dat hij een printerserver is :).

Verder geprobeerd

verder heb ik geprobeerd php_printer.dll (www.php.net/printer) te installeren in de hoop te kunnen printen naar de op de server aangemelde netwerkprinters. Ik kreeg echter de dll al niet werkend. Althans, het leek werkend, maar commando's als "printer_list()" werden niet herkend in de code.

Vragen

- Waar kan ik jullies inziens beter mijn aandacht op richten, op IPP printen of op het aan de praat krijgen van php_printer.dll?

- Hebben jullie misschien voorbeeldjes waar jullie zulks werk wel voor elkaar hebben gekregen?

- Kan er soms een server setting over het hoofd gezien zijn door de systeembeheerder of mij?

PS. ik heb al heel veel geprobeerd, maar bovenstaande is vooralsnog wat me nu het meest logisch leek om te vertellen / vragen. Het kan zijn dat ik zo nog wat aanvullingen doe :)

  • RobIII
  • Registratie: December 2001
  • Laatst online: 02:24

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Is het niet gewoon een ordinair rechtenprobleem? IUSR die niet mag printen? Of niet over TCP/IP "naar buiten" mag oid?

[Voor 22% gewijzigd door RobIII op 17-06-2011 15:23]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 07-06 12:50
Een alternatief wat je toe kan passen wat ik handiger vind is:

1. Genereer PDF
2. Plaats PDF op webserver (gesloten map) in que map voor een specifieke printer.
3. De printserver heeft een crontab of andere periodieke truc waarmee deze de que opvraagt, leegtrekt en print.

Op dit manier maakt een break in de verbinding o.i.d. niets uit en heb je alleen een authenticatie nodig van printerserver naar webserver. Dat kan met vele standaard technieken uitgevoerd worden.

Als je vanuit de webserver de print gaat starten moet je aan printerbeheer gaan doen, verbinding controleren etc. En alsnog moet je een que maken want een print request duurt even dus dat zal je niet in de pageload willen doen.

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
RobIII schreef op vrijdag 17 juni 2011 @ 15:15:
Is het niet gewoon een ordinair rechtenprobleem? IUSR die niet mag printen? Of niet over TCP/IP "naar buiten" mag oid?
Dat dacht ik ook, maar IUSR mag bijvoorbeeld wel naar http://domeinnaam/printers en krijgt dan vervolgens keurig een lijst met beschikbare printers... het aanspreken van een IPP printer zelf blijft echter mislukken.

ik heb het IPP printen ip deze manier maar even opgegeven en ben deels verder gegaan met djluc zijn tips.

- er wordt een PDF file gemaakt en opgeslagen op D:\test.pdf
- de IPP printers zijn op de server toegevoegd aan "Devices and Printers"
- ik ben ingelogd op de server en heb acrobat reader geinstalleerd

als ik nu via cmd het volgende commando geef : "AcroRd32.exe" /N /T "D:\test.pdf" "PrinterNaam" dan wordt de pdf geprint (dit doe ik terwijl ik op de server ingelogd ben als user POBOX met admin rechten), maarrrr de eerste keer moet ik dan wel aangeven dat ik het bestand in veilige modus open (er komt een popup met een vraag over de veilige modus, helaas heb ik deze popup niet geprint-screend en heb ik heel dom gekozen voor "altijd in veilige modus", waardoor ik het scherm niet nogmaals krijg)
- als ik nu ditzelfde commando via php doe (met backticks, exec, system of shell_exec, ik heb ze allemaal geprobeerd) dan blijft mijn PHP script heel lang wachten. Ik vermoed dat dat komt door de pop-up die IUSR ook krijgt, maar die niet weg te klikken is omdat IUSR niet een user met een schermpje en een muis is.

Mijn vraag is nu: hoe krijg ik die pop-up weg voor IUSR?

Mijn tweede vraag is: is het wel slim om Adobe Acrobat Reader hiervoor te gebruiken of ben ik dan bij de eerste de beste update (heb auto-update van adobe reader wel uitgezet) de sjaak?

Acties:
  • 0Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 07-06 12:50
Wij werken met command /t er achter, het complete pad naar Acrobat uiteraard gebruiken.

Vervolgens hebben we nog een aantal zaken gedaan, zowel bij de start van het script als op het einde plaatsen we taskkill commando's. Zo weten we zeker dat het programma ook weer afgesloten wordt. Dat was destijds absoluut nodig anders werkte het niet stabiel. Daar zou je dus ook even naar kunnen kijken.

PHP:
1
$cmd='"C:/Program Files/Adobe/Reader 9.0/Reader/AcroRd32.exe" /t '.$storeFile.' '.$fullPrinterPath;


Dit is een werkend commando wat draait in shell_exec.


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee