Avatar billede ofirpeter Nybegynder
10. august 2006 - 11:44 Der er 15 kommentarer og
1 løsning

Print i php

Hej, jeg har en side jeg gerne vil have printet ved tryk på en knap.

Kan jeg lave det således at jeg først gemmer en html fil på serveren, omdøbe den til *.doc og så sende den til print?

Er der nogen der kan hjælpe mig med nogle funktioner?
Avatar billede coderdk Praktikant
10. august 2006 - 12:47 #1
Hvad i alverden skulle det hjælpe at gemme en .html som .doc?! Du kan ikke printe på klienten i PHP, så skal du bruge javascript print eller lignende... Men dit spørgsmål er lidt uklart ;)
Avatar billede ofirpeter Nybegynder
10. august 2006 - 12:54 #2
Jeg ønsker at gemme den som doc for så at kunne åbne den, og printe den manuelt.
Avatar billede coderdk Praktikant
10. august 2006 - 14:45 #3
At lave endelsen om gør den ikke til en word-fil... Jeg er stadig ikke helt med på hvad du vil, kan du ikke bare gemme filen som .html og printe den, eller bare printe den uden at gemme?!
Avatar billede ofirpeter Nybegynder
10. august 2006 - 15:20 #4
Nej, men jeg kan åbne en html som en word fil, da word kan læse HTML. Så jeg mangler et script der kan:
Lægge en html fil på serveren.
Omdøbe den til doc.
Forespørge på at printe den.
Avatar billede skagen Nybegynder
10. august 2006 - 22:00 #5
Du behøver ikke lave en ny fil. Når der trykkes på knappen skal du genindlæse siden, men nu blot tilføje nedenstående headers. Det kunne f.eks gøres med et link:

<a href=<?=$PHP_SELF?>?print=1>Print siden</a>

I toppen af filen tilføjer du noget i retning af:

<?
if (!isset($_GET['print'])) {
    Header('Content-Type: application/msword');
    Header('Content-disposition: attachment; filename=navn.doc');
    Header('Cache-Control: must-revalidate');
}
?>

Linket og testen på om hederne skal vises, må du evt. rette til så det passer. Det vigtige er headerne der får browseren til at åbne siden i word (brugeren bliver spurgt om han vil åbne eller gemme). Herefter kan siden printes gennem word.

Headeren med cache-control har jeg tilføjet for at sikre at siden bliver opdateret fra serveren og ikke tages i cachen. Den har som sådan ikke noget med dit problem at gøre.
Avatar billede ofirpeter Nybegynder
11. august 2006 - 10:58 #6
Det skal vel være således: if (isset($_GET['print'])) { ?
Jeg bliver dog ikke bedt om at printe eller gemme når jeg loader siden, der sker ingenting. Kan det være fordi jeg pt. ikke har word installeret?
Avatar billede ofirpeter Nybegynder
11. august 2006 - 11:14 #7
Det var mærkeligt, jeg kan godt få dette til at virker:
    header("Content-type: application/octet-stream");
    header("Content-Disposition:  filename=text.doc");
    header("Pragma: no-cache");
    header("Expires: 0");

Men kun hvis jeg kører det på en side for sig selv. Hvad kan gøre at jeg denne ikke vil på en side med en masse kode i forvejen?
Avatar billede skagen Nybegynder
11. august 2006 - 11:45 #8
Yes. Det skal være:

if (isset($_GET['print'])) {

Der havde lige sneget sig et udråbstegn ind. Sorry.
Avatar billede coderdk Praktikant
11. august 2006 - 12:02 #9
Det er også header("Content-Disposition: attachment; filename=text.doc");
Du mangler "attachment"!
Avatar billede skagen Nybegynder
11. august 2006 - 12:12 #10
OK. Jeg er ikke helt sikker på at jeg forstår hvad du vil. Vil du loade siden i word og starte udskrift automatisk? Hvorfor vil du gå via word? Hvorfor ikke bare printe siden ud direkte fra browseren vha. java script:

<A HREF="java script:window.print()">Print Page</A>

Jeg ved godt at layoutet "forstyres" (eller ødelægges) når man skriver ud, men det bliver da ikke bedre af at læse siden ind i word!

Når en webside skrives ud er der begrænsning i bredden af udskriften og afhængig af dit layout/design kan højre side af side blive skåret af i udprintningen. Du kan evt. genindlæse siden (som før) og så benytte et andet stylesheet eller lave andre layout mæssige ændringer så siden er velegnet til udskrivning. Hvis du genindlæser siden tilføjer du følgende for at starte udskriften automatisk:

<body onload="window.print()">
Avatar billede ofirpeter Nybegynder
14. august 2006 - 13:17 #11
Jeg siger tak for input. Skagen og coderdk må meget gerne svare.
Avatar billede skagen Nybegynder
14. august 2006 - 15:40 #12
Øhhh... Hvordan fik du det til at virke? Jeg takker nej til point med mindre du har brugt mere eller mindre det jeg har foreslået. Kunne du ikke skrive kort hvordan din endelige løsning blev? På den måde er der også andre der kan blive klogere - undertegnede inklusiv :-)
Avatar billede coderdk Praktikant
14. august 2006 - 16:30 #13
Jeg skal heller ikke have point, ellers tak :)
Avatar billede mads1987 Nybegynder
14. august 2006 - 18:01 #14
Jeg valgte præcis din version, ved at sige:

<body onload="window.print()">

Det var den nemmeste løsning, selvom det ikke var præcis hvad jeg havde tænkt mig.
Kom så med det svar! ;)
Avatar billede ofirpeter Nybegynder
14. august 2006 - 18:04 #15
Okay, min bror var havde ikke logget ud. Bare rolig diskutionen om hvorvit vi er en eller to har været oppe før, og vi har "Officielt" lov :)
Svar gerne.
Avatar billede skagen Nybegynder
14. august 2006 - 18:07 #16
OK så ...  :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB