printen vanuit PHP en Javascript

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

P van der Ploeg

P van der Ploeg

11/02/2006 18:47:00
Quote Anchor link
Hallo,
Enkele dagen geleden (op 7 febr.) vroeg ik in dit forum hoe ik kon printen vanuit PHP. Tot mijn genoegen kan ik nu vertellen hoe ik dat zelf ontdekt heb. De code is:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$handle
= printer_open();
printer_write($handle, "Wat geprint wordt");
printer_close($handle);
?>


Tussen de haakjes achter "printer_open" kan men de naam van de printer opgeven. Als men de default-printer wil gebruiken, kan die naam waarschijnlijk achterwege blijven.
Overigens werkt deze code niet bij iedereen. Vaak moet men eerst het bestand php_printer.dll downloaden. Dit zet men dan in de PHP-map, alsmede (als men WindowsXP gebruikt) in de Windows-submappen "system" en "system32". Vervolgens moet men in het bestand "php.ini" (dat meerdere keren voor kan komen op één computer!) een verwijzing maken naar php_printer.dll. Dit doet men door de naam van dit bestand toe te voegen aan de extension-lijst.
Op mijn computer kon ik toen fijn printen vanuit het mij vertrouwde PHP.

Er is echter wel een nadeel aan deze methode verbonden: Het werkte dan wel goed in de testomgeving van mijn eigen computer, maar als ik het ook wil laten functioneren op mijn website, kan het zijn dat het toch weer niet lukt. Het hangt er maar vanaf of het printen vanuit PHP ook door de provider van mijn website wordt ondersteund.

Daarom heb ik toch ook wel belangstelling voor het printen vanuit Javascript. Maar van Javascript weet ik zo goed als helemaal niets. Misschien willen jullie mij helpen. Hoe kan ik op de meest eenvoudige manier met een stukje Javascript de woorden "Dit wordt op papier afgedrukt" uitprinten?
Meestal wordt in de uitleg over Javascript verteld hoe men een hele pagina uit kan printen. Maar daar gaat het mij nu niet om! Ik wil gewoon graag weten hoe ik exact op papier kan zetten, wat ik zelf in één of meer regels opgegeven heb.

Bedankt alvast!
 
PHP hulp

PHP hulp

12/05/2024 22:21:42
 
Arjan Kapteijn

Arjan Kapteijn

11/02/2006 18:53:00
Quote Anchor link
Snap ik het fout, of print je dan op de server uit? PHP is toch server side, die zou client side niks mochen doen toch?

/me snapt er niks meer van :+
 
P van der Ploeg

P van der Ploeg

11/02/2006 19:21:00
Quote Anchor link
Hartelijk dank voor uw reactie. U snapt er niks meer van. Nu, dat gebeurt bij mij ook zo vaak! Maar met elkaar komen we er hopelijk wel uit. Het gaat er natuurlijk om, dat bepaalde dingen vanaf de website naar de printer van de bezoeker van de website worden gestuurd. Dit gebeurt immers ook al, als de bezoeker een pagina van de website uitprint op zijn/haar eigen computer? In principe moet het dan ook mogelijk zijn om slechts enkele regels over te sturen. Op de website www.php.net las ik dingen die mij de indruk gaven, dat dit inderdaad mogelijk is. Maar dit is latere zorg! Ik vraag u dus niet hoe ik dit oversturen moet verwezenlijken. Hier besteed ik ev. later nog wel aandacht aan. Ik vraag nu slechts hoe ik op de meest eenvoudige manier vanuit Javascript één of meer regels kan printen, die ik vooraf heb opgegeven in de script.
Wie helpt mij?
 
Barman V

Barman V

11/02/2006 19:25:00
Quote Anchor link
In Javascript gebruik ik de functie

window.print();
 
Arjan Kapteijn

Arjan Kapteijn

11/02/2006 19:28:00
Quote Anchor link
Simpele oplossing:

Je kan een apart printstylesheet maken, voorbeeld hier. Als je op afdruk voorbeeld drukt krijg je een andere opmaak (eventueel mooier als je de optie 'achtergrond afdrukken' aanzet).

Wat je kan doen is een divje maken die je zelf vult met tekst en dat divje heeft een id/class die niet zichtbaar is (display: none;) totdat je gaat afdrukken (kan met javascript, iets als javascript:window.print() ofzo).

Als je gaat afdrukken maak je alle andere divjes onzichtbaar, en druk je alleen die div af met tekst.
Gewijzigd op 11/02/2006 19:29:00 door Arjan Kapteijn
 
P van der Ploeg

P van der Ploeg

11/02/2006 19:41:00
Quote Anchor link
Bedankt voor de suggesties! Maar ik vind dat van die divjes zo moeilijk. Bedenk s.v.p. dat ik helemaal niets weet van Javascript! Daarom vraag ik gewoon naar de meest eenvoudige manier om één of meer regels uit te printen met Javascript. Dit lukte mij niet, omdat ik er zo weinig van af weet! Barman zei slechts, dat hij/zij
window.print(); gebruikt. Mooi! Maar er moet toch nog iets aan voorafgaan en er moet toch nog iets volgen? Vanuit mezelf weet ik niet wat dit moet zijn!
Graag een volledig stukje code, maar wel graag op de allereenvoudigste manier!
(En is Window.print werkelijk het juist commando? Ik wil immers niet een heel Window uitprinten, maar slechts één of meer regels, die ik in de code heb gezet...).
 
Arjan Kapteijn

Arjan Kapteijn

11/02/2006 20:01:00
Quote Anchor link
Ik zal vannacht bij thuiskom wat in elkaar knutselen. Divjes methode = css, redelijk gemakkelijk in gebruik.
 
P van der Ploeg

P van der Ploeg

11/02/2006 20:17:00
Quote Anchor link
Ondertussen ben ik zelf al wat aan het experimenteren geweest. Barman noemde: window.print();
Naar aanleiding hiervan maakte ik het script:

<script language="Javascript1.2">
window.print("Deze tekst wordt geprint");
</script>

Maar dit werkte helemaal niet zoals ik wilde! Ten eerste moest ik eerst de printer nog activeren (terwijl ik bij mijn PHP-script de tekst gelijk uitgeprint kreeg). Ten tweede werd de tekst niet afgedrukt. Het papier bleef blanco. De script moet dus nog verbeterd worden.
 
Jelmer -

Jelmer -

11/02/2006 20:19:00
Quote Anchor link
Even ophelderen en samenvatten:

PHP is serversided, printen via php commando's print dus op de server (de computer waarop het php-script wordt uitgevoerd) uit. Dit is dus niet wat je wilt.

Via Javascript kan je een print-dialoog bij de bezoeker op het scherm toveren. Hiermee kan de bezoeker (de computer waar het stuk Javascript wordt uitgevoerd, javascript is client-side) ervor kiezen de hele html-pagina uit te printen. Vanuit javascript kan je dus niet met een commando een regeltje laten uitprinten.

Maar, via CSS kan je beïnvloeden hoe de pagina eruit komt te zien. In CSS kan je onderscheid maken tussen PDA (mobile), Normaal schem (screen) en printer (print) en nog een paar anderen. Je kan dus zeggen dat bepaalde stukjes niet mogen worden weergegeven tijdens het printen, maar wel waneer iemand de pagina in z'n browser bekijkt. Arjan geeft hier wel een mooi voorbeeld van.

Verder nog even wat leesvoer en voorbeelden, om je een indruk te geven wat je kan doen met verschillende stylesheets voor printen en lezen:
A List Apart: Going to Print
A List Apart: Printing a book with CSS
A List Apart: Highres printing
 
Eris -

Eris -

11/02/2006 20:26:00
Quote Anchor link
vanderploeg:
Hallo,
Enkele dagen geleden (op 7 febr.)
Bedankt alvast!


Deze functie werkt dus alleen server side. En zal nooit een pagina thuis kunnen printen...
 
P van der Ploeg

P van der Ploeg

11/02/2006 22:15:00
Quote Anchor link
Hartelijk dank voor jullie antwoorden! Nu begrijp ik, waarom PHP de printer-functies heeft laten vallen. Men vond het blijkbaar niet nodig, dat men van alles zou kunnen printen, aangezien PHP vooral voor websites bedoeld is. Het valt dus nog mee, dat men het bestand php_printer.dll nog kan downloaden! Met behulp van dit gedownloade bestand kan men met PHP blijkbaar méér bereiken dan met Javascript. Ik ga toch nog eens proberen, denk ik, of ik vanaf mijn eigen website bepaalde regels naar mijn printer kan sturen. Waarschijnlijk zal ik dan wel mijn IP-adres moeten opgeven. Maar dat lijkt me niet onmogelijk.
Overigens kunnen jullie gerust wezen. Ik ben nooit van plan geweest om bepaalde tekst-regels naar de printers van andere mensen te sturen. Het gaat mij er in wezen om om mijn administratie van mijn webwinkel steeds verder te automatiseren. En daardoor vind ik het handig om bepaalde gegevens vanaf mijn website naar mijn printer thuis te sturen. Ik kan dan thuis automatisch acceptgiro-formulieren aanmaken, adreslabels schrijven, enz. Als het mij niet lukt om dat allemaal volautomatisch te laten doen, moet ik gewoon handmatig wat meer werk verrichten. Een mogelijkheid is bijvoorbeeld om eerst een bestand met gegevens te downloaden en het dan verder op mijn computer uit te werken. Want in de testomgeving van mijn computer kan ik wel alles automatisch printen, dank zij het gedownloade bestand php_printer.dll !!
Nogmaals mijn dank!
 
Arjan Kapteijn

Arjan Kapteijn

11/02/2006 23:19:00
Quote Anchor link
Dan kan je printen omdat je server ook de pc is waarop je zit te werken...

Je kan met php ook pdfjes maken, mail die naar jezelf en print die uit.
 
P van der Ploeg

P van der Ploeg

12/02/2006 00:39:00
Quote Anchor link
Bedankt, Arjan! Het is dus toch mogelijk wat ik wilde! Ondertussen heb ik zelf al een stukje script gemaakt, dat zo ongeveer aan mijn wensen voldoet! Hier is het:

<script language="Javascript1.2">
<!--
document.write("Dit wordt geprint");
window.print("Canon LBP-800");
//-->
</script>

Met document.write wordt het even op het beeldscherm gezet en met window.print wordt het gelijk naar de printer gestuurd. Ik heb dan toch mijn zin! Alleen jammer, dat ik dan toch nog even een klik moet geven. Bij de printer-functie in PHP hoefde dat niet meer. Maar als ik maar één keer wat te printen heb, maakt het niet veel uit. Als ik tien keer achter elkaar iets moet printen, is het iets lastiger. Maar daar ziet het nog niet naar uit. In feite had ik helemaal geen verstand van Javascript, maar door gewoon te kijken hoe anderen het doen, leer ik al heel veel!
 
P van der Ploeg

P van der Ploeg

13/02/2006 06:56:00
Quote Anchor link
Ik wil toch nog een vraag stellen over het script, dat ik hierboven opschreef. Hier is het nogmaals:

script language="Javascript1.2">
<!--
document.write("Dit wordt geprint");
window.print("Canon LBP-800");
//-->
</script>

Op mijn computer werkt dit prima. (Wie dit overneemt, moet er natuurlijk even op letten, dat in dit script de naam van mijn eigen printer is ingevuld). Ik vind het alleen jammer, dat het programma'tje niet in één keer wordt uitgevoerd. Nadat regel 3 is uitgevoerd stopt het programma'tje. Pas als ik dan op "afdrukken" heb geklikt, gaat het verder met regel 4. Is er geen manier om het programma in één keer uit te laten voeren? Mijn print-programma'tje in PHP wordt ook in één keer uitgevoerd. (Dit bewijst dat het technisch mogelijk is!). Waarom zou het dan in Javascript niet kunnen?
Nogmaals: Het doel van al deze proefjes is om de administratie van mijn webwinkeltje te automatiseren. Ik heb in PHP al een compleet winkelwagentjes-systeem geprogrammeerd. Het werkt prima! Ik wil nu verder de administratie van mijn winkeltje hieraan koppelen. Hoe ik dat doe mogen jullie aan mij overlaten. Jullie kunnen mij hopelijk wel helpen bij het tot stand brengen van bepaalde basiselementen. Als dat lukt kan ik daarop voortbouwen!
 
Eris -

Eris -

13/02/2006 07:57:00
Quote Anchor link
JS IS NIETS IN STAAT OM DINGEN AAN TE PASSEN OP DE PC of comando's te geven als het laten printen. Er is altijd een bevesting nodig van de gebruiker...
 
P van der Ploeg

P van der Ploeg

13/02/2006 09:42:00
Quote Anchor link
Dan heb ik wat dat betreft een beetje pech gehad. Niettemin verwacht ik, door te automatiseren, de administratie van mijn winkeltje uiteindelijk minstens 4 keer zo snel uit te kunnen voeren! En daardoor komt er tijd vrij om méér klanten te kunnen helpen! En misschien vind ik zelf nog wel eens een oplossing voor het probleempje waar jullie nu geen oplossing voor hebben. Het is bijvoorbeeld ook nog mogelijk om in Windows te programmeren. En wat ik op die manier tot stand breng, kan ik weer koppelen aan de Javascript-programma's. In wezen zijn de mogelijkheden met de computer vrijwel eindeloos! Alleen jammer, dat virus-makers dit ook door hebben. Zij krijgen dingen voor elkaar, die anderen niet voor mogelijk houden. Maar ik zal op die manier nooit misbruik maken van de computer. De computer moeten we gebruiken om elkaar te helpen en te dienen. Gelukkig doen jullie dat ook. Hartelijk dank nogmaals!
 
P van der Ploeg

P van der Ploeg

14/02/2006 09:10:00
Quote Anchor link
Omdat er zoveel verwarring was over cliënt-side en server-side, zal ik toch nog even vertellen hoe men vanuit de eigen website toegang krijgt tot de eigen computer. Hierbij ga ik er wel van uit, dat op de eigen computer eveneens een server is geïnstalleerd. (Want anders zou men helemaal niet met PHP kunnen werken op de eigen computer, los van de website).
Men benadert de eigen computer met het IP-adres 127.0.0.1. (Dit is niet mijn echter IP-adres, maar voor deze situatie werkt het wel, omdat daarmee de testomgeving van de eigen computer wordt aangeduid). Als men met HTML een href verwijzing maakt, krijgt men bijvoorbeeld:

<A href="http://127.0.0.1/proeven/
hallowereld2.php">link</A>

Met deze instructie kan men vanaf de website een bestand openen, dat buiten die website is, maar wel op de eigen computer. Tot op zekere hoogte wordt hiermee de barrière tussen cliënt-side en server-side doorbroken. Ik zeg: "Tot op zekere hoogte", want dit werkt zomaar niet, als men de computer van een ander wil benaderen. En dat is maar goed ook!
Op deze manier heb ik ook geprobeerd om vanaf mijn website mijn eigen printer te laten werken. Ongetwijfeld moet dat in principe ook kunnen op een dergelijke manier. Maar dat lukte niet. Hoogstwaarschijnlijk komt dit doordat de provider van mijn website het bestand php_printer.dll niet geïnstalleerd heeft. Ik zal dus zoveel mogelijk moeten werken vanuit mijn eigen computer, waar dit bestand wel geïnstalleerd is, tenminste: Als ik automatisch printen wil.
 
Elwin - Fratsloos

Elwin - Fratsloos

14/02/2006 09:21:00
Quote Anchor link
Toch vind ik het jammer dat PHP onder Linux geen printen ondersteund. Ik ben momenteel bezig met een systeem die mijn administratie gaat doen. En dat is dus onder andere met het aanmaken van orders, verzenden van facturen etc.

Dit doe ik via PHP omdat ik graag wil dat de klant kan inloggen. Zo kan diegene de factuurstatus bekijken of een support-call lezen / aanvullen / beginnen (wat ook weer via e-mail kan d.m.v. IMAP).

Maar een factuur, of een rapport wat ik genereer moet altijd via de client afgedrukt worden. Ik zelf zou een dergelijke applicatie nooit in een datacentrum hosten, maar altijd intern. Daarom zou het mooi zijn als ik intern de printers kon aansturen met de applicatie.

Simpel voorbeeld:
Financiële administratie verwerkt factuur die op de postkamer wordt afgedrukt. Die doen hem in enveloppe en verzenden het.

Nu kan het ook wel met Windows, maar een van de pluspunten van PHP vind ik wel dat het onder Linux én Windows kan draaien. Daarom wil ik het altijd zo maken dat het ook werkt op allebei de OS's. En dat kan helaas niet met het aansturen van de printer.

Maar ja, voor zover mijn geklaag op deze sombere dag... ;)

Elwin
 
P van der Ploeg

P van der Ploeg

14/02/2006 12:58:00
Quote Anchor link
Bedankt voor je berichtje, Elwin!

Helaas heb ik geen verstand van Linux, omdat ik tot nu toe altijd met Windows gewerkt heb. Ik hoop van harte, dat iemand een goed idee voor jou heeft!
Misschien is er nog een andere programmeer-taal, die wel kan printen onder Linux.

Een andere manier is het werken met macro's. Vroeger heb ik een poosje veel met macro's gewerkt (wat erg leuk is), maar die waren onderdeel van een tekstverwerker. In sneltreinvaart kon ik toen wel 100 opdrachten achter elkaar laten uitvoeren! Naar ik heb begrepen heeft Windows ook een systeem, dat lijkt op het macro-systeem. Of Linux zoiets ook heeft weet ik niet, maar de kans daarop is wel groot, want Linux is toch een kwaliteits-besturings-systeem, dacht ik zo! Wellicht kun je Linux programmeren om te printen wat jij wilt! Er zal alleen een voorstudie voor nodig zijn, maar soms is dat echt de moeite waard!
Veel succes toegewenst!
 
P van der Ploeg

P van der Ploeg

14/02/2006 13:35:00
Quote Anchor link
Ik heb nog meer goed nieuws voor jou, Elwin!
Printen onder Linux moet toch mogelijk zijn. Want Linux is een Unix-variant (las ik zojuist). En er zijn mensen, die met succes kunnen printen via PHP en Unix. Dit lees ik nl. op de website www.php.net, op de print-afdeling. Zo zie je maar. Er wordt soms zo gauw geroepen: "Kan niet!" Maar heel veel kan wel, als men maar weet hoe! Vaak moet men kopieën van een hulpbestand kopiëren naar systeemmappen. (Zie mijn eerste bericht in deze thread). En in andere bestanden moet men dan soms weer verwijzingen maken naar dat hulpbestand. Maar als het lukt, is het feest!
 
P van der Ploeg

P van der Ploeg

16/02/2006 09:56:00
Quote Anchor link
Elwin, je hebt nog niet gereageerd op mijn 2 tips, die je in de 2 berichten hierboven kunt lezen. Vond je ze te moeilijk, of moet je ze nog nader bestuderen?
In ieder geval denk ik, dat er vele oplossingen zijn voor jouw probleem, wellicht ook heel eenvoudige. Je kunt bijvoorbeeld met het PHP commando fputs of fwrite documenten op je website (of je eigen computer) aanmaken, die geprint moeten worden, bijvoorbeeld facturen. Als het HTML-bestanden zijn en je print ze vanaf je website uit, dan krijg je allerlei extra dingen op papier, waar je niet om gevraagd hebt, zoals het paginanummer, de URL, en de datum. Wil je die extra vermeldingen niet, dan kun je de documenten genereren als doc-bestanden. Als je vervolgens vanuit je browser het doc-bestand op je website benadert, wordt het bestand geopend met behulp van Word. (Als je dat geïnstalleerd hebt). Vervolgens kun je het printen als elk Word-bestand. En die extra vermeldingen blijven dan achterwege! Zet dat doc-bestand zo mogelijk wel in een map, die met een wachtwoord beveiligd is. Anders kan iedereen het benaderen, al zullen de meesten dat niet doen, omdat ze de naam van de map niet weten.
Ik weet niet of dit onder Linux ook werkt, maar vermoedelijk wel.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.