Probleem met afdrukken?
Ik heb dus een gedeelte waar men gegevens kan invullen.
Als men op de knop opslaan duwt word eerst alles opgeslagen in de database en vervolgens word eerst in een apart scherm etiketten ingevuld getoond en afgedrukt en dan briefjes ingevuld.
Het afdrukken van de etiketten gaat zonder probleem omdat deze werkt via de web framework van DYMO.
Maar als de briefjes geladen word, wat werkt via een script , krijg ik data niet automatisch geprint.
Het script dat ik gevonden had was deze.:
Code (php)
1
2
3
4
5
2
3
4
5
<script type="text/javascript">
setTimeout(function () { window.print(); }, 100); //was 500
window.onfocus = function () { setTimeout(function () { window.close(); }, 100); //was 500
}
</script>
setTimeout(function () { window.print(); }, 100); //was 500
window.onfocus = function () { setTimeout(function () { window.close(); }, 100); //was 500
}
</script>
Hij laat mij dan een print voorbeeld zien , waar ik dan op afdrukken kan duwwen.
Dit wil ik echter niet, ik wil net als die etiketten gelijk dat hij afdrukt.
Is dit wel mogelijk , voor dat we een speld in een hooiberg gaan zoeken?
Quote:
Het afdrukken van de etiketten gaat zonder probleem omdat deze werkt via de web framework van DYMO.
Maar dat is een DYMO printer voor het printen van etiketten enzo?
Quote:
Maar als de briefjes geladen word, wat werkt via een script , krijg ik data niet automatisch geprint.
En dat is een andere printer?
Appels <--> peren?
Het is misschien wel mogelijk om de printer rechtstreeks(er) opdrachten te geven, maar waarschijnlijk niet via J(ava)Script.
Gewijzigd op 06/10/2018 14:34:18 door Thomas van den Heuvel
De formulieren via een gewone printer die op het netwerk zit.
Ja , het hoeft niet perse met java, andere manieren zijn ook goed, maar ik vind ze nergens.
Hoe ziet je netwerkconfiguratie er uit (wat voor machines en waar - lokaal / intranet / etc.), welke besturingssystemen gebruik je, hoe hangt de printer hier aan? Hoe past de webserver in dit plaatje etc.? Dit alles bij elkaar bepaalt waarschijnlijk welke oplossing je dient te gebruiken. Voor Windows/Apache is er waarschijnlijk wel een DLL en in geval van Linux biedt het commando lpr mogelijk uitkomst.
Met het bovenstaande zou je al een eind moeten komen en anders Google eens op "PHP print via network" ofzo en kijk wat het meest op jouw situatie van toepassing is.
De vraag "hoe kan ik rechtstreeks printen" kan anders met geen fatsoen beantwoord worden waarschijnlijk, en het ziet er ook niet naar uit dat dit rechtstreeks via JavaScript afgedwongen kan worden (een vlugge zoektoch leert dat je dan altijd een dialoog krijgt).
Gewijzigd op 07/10/2018 23:43:06 door Thomas van den Heuvel
De printer die in het netwerk staat, staat gewoon op iedere pc/laptop.
Dus die staat ook overal als standaard ingesteld, drukt men op print komt hij bij die printer eruit gewandeld.
Dit staat in dit geval los van het lokaal/intranet.
Vermoedelijk kom ik inderdaad niet van dat dialoog af mits ik iets in het systeem van betreffende pc/laptop aanpas.
Het zij dan helaas zo, meende dat ze hier ook wel een omweg voor hadden.
De gebruikelijke methode voor printen op labels en dergelijke is zoals Thomas aangeeft het gebruiken van een printserver die vanaf de command line (dus bijvoorbeeld middels PHP) rechtstreeks aangestuurd kan worden.
Pascal Schuffelers op 08/10/2018 11:32:38:
In principe ga je iets te ver om de vragen te stellen hoe het netwerk er uit ziet.
Dat denk ik niet, want dit bepaalt (mede) de technische oplossing. Ik bedoelde meer een soort van layout, niet of de PC van Bep bij het raam staat ofzo. Daarnaast betreft dit toch een lokaal netwerk, dus daar komt niemand verder van buitenaf bij lijkt mij, als dat jouw bezorgdheid is.
Pascal Schuffelers op 08/10/2018 11:32:38:
De printer die in het netwerk staat, staat gewoon op iedere pc/laptop.
Dus die staat ook overal als standaard ingesteld, drukt men op print komt hij bij die printer eruit gewandeld.
Dit staat in dit geval los van het lokaal/intranet.
Dus die staat ook overal als standaard ingesteld, drukt men op print komt hij bij die printer eruit gewandeld.
Dit staat in dit geval los van het lokaal/intranet.
Je zegt zelf dat dit via een webapplicatie gaat:
Quote:
Maar als de briefjes geladen word, wat werkt via een script
Dan zou dus de webapplicatie de initiator van de printopdracht moeten zijn, en niet de gebruiker zelf, anders ben je inderdaad weer terug in de situatie waarbij deze via een dialoog een printopdracht geeft waarbij JavaScript enkel een doorgeefluik is.
Pascal Schuffelers op 08/10/2018 11:32:38:
Dit staat in dit geval los van het lokaal/intranet.
Sterker nog, ik denk dat je hier juist de oplossing zou moeten zoeken.
Gewijzigd op 08/10/2018 12:52:54 door Thomas van den Heuvel
En is de oplossing nogal afhankelijk van de gebruikte hardware en het netwerk.
Zelf heb ik een setup waarbij de server buiten staat (in het buitenland zelfs) en waar de printers (A4 printer en een etiketten printer) in het netwerk op een kantoor in Nederland staan.
Die stap om van buitenaf in het interne netwerk te komen, heb jij niet.
Wel heb je de vraag hoe de printopdracht aan de printer gegeven kan worden door PHP.
In mijn setup kan ik een pdf-file aan CUPS(printer server software op de server waarop ook Apache draait) geven onder vermelding "voor printer X"
CUPS forwardt dat dan naar de printer.
MAar als het bijvoorbeeld een Word document zou zijn, wordt het moeilijker.
En ook als de printer niet rechstreeks een pdf begrijpt maar een andere datastroom wil hebben via een of andere driver.
Gebruikte hardware en software op de server is dus van belang.
(en ook of een systeembeheerder niet heeft ingesteld of een aanmelding van de gebruiker bij de printer (inloggen) nodig is)
Dit is inderdaad identiek aan wat wij doen in onze magazijnen. Pakbonnen, adreslabels, de hele boel gaat via CUPS vanaf (een) webserver via een tweede CUPS instantie in het magazijn naar de gewenste printer. Deze CUPS server kan in principe op een raspberry pi draaien, dus het kan erg eenvoudig. En Dymo printers kunnen gewoon door CUPS gestuurd worden.
Cups heb ik inderdaad op die RPI al staan.
Denk dat ik dan toch hier naar moet kijken, al zal ik wel een voorbeeld moeten kunnen vinden van een code die via CUPS zonder afdrukvoorbeeld iets af kan drukken.
Daar is niet bijster veel voor nodig, gewoon het lpr commando met de juiste switches.
Code (php)
1
2
2
$command = '/usr/bin/lp -n 1 -d NAAM_PRINTER_IN_CUPS /path/to/een.pdf';
exec($command);
exec($command);
-n 1: aantal afdrukken is 1 (soms ook meer dan 1 voor mijn situatie)
-d xxx: destination: welke printer.
nb: sommige van mijn printers snappen een pdf direct. Voor een nieuwe printer is een driver op de server van cups gezet om de printer het te kunnen laten snappen.
Overigens is dit een print opdracht die vanuit een CLI omgeving komt. Ik maak namelijk tot 10tallen pdf's aan die vervolgens via CUPS naar buiten gaan.
Dat duurt voor de gebruiker te lang, dus PHP roept een extern script aan dat doorloopt, terwijl het eerst aangeroepen php-script naar de gebruiker een "OK, we printen" pagina stuurt.
cups zet de opdracht in de wachtrij tot de printer beschikbaar is.