Lurifaksen Skrevet 1. juni 2005 Del Skrevet 1. juni 2005 Noen som har peiling på hvordan jeg kan få laget en faktura i PDF-format ved hjelp av PHP? Selve opprettelsen av et PDF-dokumentet er nok ikke det vanskligste, men få det til å se ut som en helt vanlig papirgiro, med gule felter og slikt? Noen som har vært borti noe slikt? Finnes det tilfeldigvis ferdige-kodesnutter for slikt? Lenke til kommentar
Gjest Slettet+6132 Skrevet 1. juni 2005 Del Skrevet 1. juni 2005 Let, og du finner. Lenke til kommentar
stiber Skrevet 1. juni 2005 Del Skrevet 1. juni 2005 Få tak i ferdige giroblanketter. Prøv hos posten el. Generer et PDF dokument med et rutenett. La det f.eks være 20-50 punkter mellom linjene. Skriv dette ut på en giroblankett (Husk å slå av alt av skalering og midtstilling i acrobat reader). Nå kan du sånn ca. måle deg frem til hvor du vil skrive ut ting. Lenke til kommentar
Lurifaksen Skrevet 1. juni 2005 Forfatter Del Skrevet 1. juni 2005 ex0n: Som sagt, selve opprettelsen av dokumentet er nok ikke det største problemet - men å "designe" det - og bestemme hvor variabler skal inn. stiber: Er det slik at jeg kan bruke et forhåndslaget dokument - og bare sette inn variabler på de riktige stedene? Hvordan blir i så fall dette gjort, må jeg spesifisere antall piksler fra topp og bunn slik du nevner? Høres egentlig ut som en litt tungvindt jobb dette Lenke til kommentar
Loomy Skrevet 1. juni 2005 Del Skrevet 1. juni 2005 En artikkel om emnet: http://webmonkey.wired.com/webmonkey/02/20...?tw=programming Lenke til kommentar
stiber Skrevet 2. juni 2005 Del Skrevet 2. juni 2005 Det er en tungvindt jobb, og det var slik jeg gjorde det første gang. pdf_show_xy($pdf, $adresse, 112, 214); osv... Hvis du ikke har blanke giroblanketter, så har du sikkert mange regninger liggende som du kan skrive over Du kan evt. bruke linjal og måle grovt, og regne ut avstandene. PDFlib bruker 72dpi, noe som tilsvarer ca. 28 piksler pr. cm. Nå bruker jeg et SVG dokument laget i Adobe InDesign som en mal, og fyller inn info med en "template engine". Så konverteres SVG dokumentet til PDF etterpå. Det kan være mye arbeid hvis man bare skal lage giroer, men kjekt hvis man jobber mye med PDF generering, ettersom man slipper å hardkode utseenede til dokumentene. Lenke til kommentar
Gjest Slettet-rXRozPkg Skrevet 2. juni 2005 Del Skrevet 2. juni 2005 (endret) Dette virket spennede, så jeg slang sammen en "mockup" av en giro i Photoshop, og eksperimenterte litt. Resultatet: <?php try { $pdf = pdf_new(); $fil = "C:\\Inetpub\\wwwroot\\pdf\\test.pdf"; pdf_open_file($pdf, $fil); pdf_set_info($pdf, "Author", "Giro-Generator 1.0"); pdf_set_info($pdf, "Title", "Faktura"); pdf_set_info($pdf, "Creator", "Giro-Generator 1.0"); pdf_begin_page($pdf, 595, 842); //pdf_set_parameter($pdf, "FontOutline", "Courier=C:\WINDOWS\Fonts\COUR.TTF"); pdf_set_parameter($pdf, "FontOutline", "Arial=C:\WINDOWS\Fonts\ARIAL.TTF"); //$giro = pdf_open_image_file($pdf, "png", "C:\\Inetpub\\wwwroot\\pdf\\logo.png", "", 2); //pdf_place_image($pdf, $giro, 30, 750, 0.5); //pdf_close_image($pdf, $giro); //$courier = pdf_findfont($pdf, "Courier", "winansi", 1); $arial = pdf_findfont($pdf, "Arial", "winansi", 1); pdf_setfont($pdf, $arial, 24); pdf_show_xy($pdf, "Superduperlogo", 30, 800); pdf_setfont($pdf, $arial, 18); pdf_show_xy($pdf, "Faktura", 400, 750); pdf_setfont($pdf, $arial, 10); pdf_show_xy($pdf, "Kundenummer", 400, 730); pdf_show_xy($pdf, "Fakturanummer", 400, 718); pdf_show_xy($pdf, "Fakturadato", 400, 706); pdf_show_xy($pdf, "Forfallsdato", 400, 694); pdf_show_xy($pdf, "12345", 480, 730); pdf_show_xy($pdf, "123", 480, 718); pdf_show_xy($pdf, date("d.m.Y"), 480, 706); pdf_show_xy($pdf, date("d.m.Y", (time() + (10 * 24 * 60 * 60))), 480, 694); pdf_show_xy($pdf, "Varenr.", 30, 650); pdf_show_xy($pdf, "Beskrivelse", 80, 650); pdf_show_xy($pdf, "Antall", 300, 650); pdf_show_xy($pdf, "Pris", 350, 650); pdf_show_xy($pdf, "Rabatt", 400, 650); pdf_show_xy($pdf, "MVA", 450, 650); pdf_show_xy($pdf, "Netto", 520, 650); pdf_show_xy($pdf, "13", 30, 638); pdf_show_xy($pdf, "Tre ganger tretten", 80, 638); pdf_show_xy($pdf, "3", 300, 638); pdf_show_xy($pdf, "10000,00", 350, 638); pdf_show_xy($pdf, "0,00", 400, 638); pdf_show_xy($pdf, "7500,00", 450, 638); pdf_show_xy($pdf, "37500,00", 520, 638); pdf_show_xy($pdf, "1", 30, 626); pdf_show_xy($pdf, "Dette er varenummer 1", 80, 626); pdf_show_xy($pdf, "2", 300, 626); pdf_show_xy($pdf, "100,00", 350, 626); pdf_show_xy($pdf, "0,00", 400, 626); pdf_show_xy($pdf, "50,00", 450, 626); pdf_show_xy($pdf, "250,00", 520, 626); pdf_show_xy($pdf, "Nettosalg:", 450, 602); pdf_show_xy($pdf, "MVA:", 450, 590); pdf_show_xy($pdf, "Total:", 450, 578); pdf_show_xy($pdf, "30500,00", 520, 602); pdf_show_xy($pdf, "7550,00", 520, 590); pdf_show_xy($pdf, "37750,00", 520, 578); $giro = pdf_open_image_file($pdf, "png", "C:\\Inetpub\\wwwroot\\pdf\\giro.png", "", 1); pdf_place_image($pdf, $giro, 0, 0, 0.75); pdf_close_image($pdf, $giro); //pdf_setfont($pdf, $courier, 12); pdf_setfont($pdf, $arial, 11); // Beløp pdf_show_xy($pdf, "37750 00", 263, 305); // Kontonummer pdf_show_xy($pdf, "1234.56.78910", 40, 310); // Blankettnummer pdf_show_xy($pdf, "1234567890", 485, 305); // Betalingsfrist pdf_show_xy($pdf, date("d.m.Y", (time() + (10 * 24 * 60 * 60))), 470, 270); // Betalingsinfo pdf_show_xy($pdf, "Kundenummer: 12345", 40, 260); pdf_show_xy($pdf, "Fakturanummer: 123", 40, 248); // Kunde pdf_show_xy($pdf, "Ola Nordmann", 45, 170); pdf_show_xy($pdf, "Storgata 1a", 45, 158); pdf_show_xy($pdf, "3190 Horten", 45, 146); // Firma pdf_show_xy($pdf, "Lumted's superbutikk", 325, 170); pdf_show_xy($pdf, "Lillegata 1b", 325, 158); pdf_show_xy($pdf, "3190 Horten", 325, 146); // KID pdf_show_xy($pdf, "00123456789", 60, 65); // Beløp pdf_show_xy($pdf, "37750", 250, 65); pdf_show_xy($pdf, "00", 300, 65); // Kontrollsiffer $mod = 37750 % 10; pdf_show_xy($pdf, "< $mod >", 320, 65); // Kontonummer pdf_show_xy($pdf, "1234 56 78910", 370, 65); // Blankettnummer pdf_show_xy($pdf, "<1234567890>", 480, 65); // H pdf_show_xy($pdf, "H", 5, 65); pdf_end_page($pdf); pdf_close($pdf); echo "PDF Generert."; } catch (Exception $e){ echo "Feil oppstod:<br>"; nl2br(print_r($e)); } ?> Dette er kjørt på en Win2k3 server med PHP5. Originalbilde Resultatet av koden (PDF) Med et bedre (og mer nøyaktig) bilde av en giro burde det ikke være noe stort problem å fylle ut hele saken, samt enventuell tekst over. Edit: fyllte ut de fleste feltene på "mockup"-giroen. PDFen er oppdatert. Endret 2. juni 2005 av Slettet-rXRozPkg Lenke til kommentar
Lokaltog Skrevet 2. juni 2005 Del Skrevet 2. juni 2005 Tror det aller mest presise ville være å scanne inn en vanlig giro og vektorisere denne, for så å kjøre på med data etterpå. Dette krever selvfølgelig litt stæsj for å oppnå, men det er verdt tanken. Stilig produkt, lumted! Lenke til kommentar
Lurifaksen Skrevet 2. juni 2005 Forfatter Del Skrevet 2. juni 2005 (endret) lumted: Fantastisk bra!!! Har ikke fått prøvd det enda selv, men skal se på det snart. Men forstår det slik at de gule feltene og det er laget av et bilde... Det øker jo filstørrelsen ganske drastisk. Jeg har allerede PDF-giroer som er mer eller mindre tomme - er det mulig å bruke den i stedet? (se vedlegg - finnes vel software for å redigere PDF-filer slik at de feltene som er utfylt kan tømmes?). Det som hadde vært perfekt var om jeg fikk lagt inn logo og overskrift "FAKTURA" øverst på arket, og varelinjer på øverste delen av fakturaen. Nå skal jo tross alt dette brukes i kommersiell virksomhet, så det ville vært urimelig å be deg fikse dette gratis. Dersom har lyst å jobbe videre med skriptet ditt kan du ta kontakt med meg på PM for en liten betaling (du kan selvsagt likevel poste kildekoden her). Faktura1.PDF Endret 2. juni 2005 av Lurifaksen Lenke til kommentar
Gjest Slettet-rXRozPkg Skrevet 2. juni 2005 Del Skrevet 2. juni 2005 (endret) Mer prøving og feiling er nå unnagjort. Jeg har byttet ut min mockup med en kopi av en skikkelig faktura, lagt til en logo og lagt til opplisting av varer. Kode er oppdatert i min forrige post, og linken til PDF filen er den samme. Da gjenstår det i grunn bare å gjøre dette litt mer dynamisk =) Endret 2. juni 2005 av Slettet-rXRozPkg Lenke til kommentar
Lurifaksen Skrevet 2. juni 2005 Forfatter Del Skrevet 2. juni 2005 Fenomenalt Den eneste "problemet" er filstørrelse... Oppimot en halv megabyte kan blir litt i største laget... Finnes det ingen måte å skrive alt på et eksisterende dokument? Dvs, hvis vi får laget en helt tom giro, så bare fylles variablene inn i den? Lenke til kommentar
Gjest Slettet-rXRozPkg Skrevet 2. juni 2005 Del Skrevet 2. juni 2005 (endret) Det gjør det sikkert, men jeg aner ikke hvordan Edit: Jeg tok bort logobildet og brukte bare en font, nå er den nede i 200kb. Edit2: Jeg fant ut at man trenger en font som heter OCR-B I (denne er ikke gratis ) hvis man skal bruke dette sammen med BBS, og at det i denne sammenhengen kun er lov å bruke ferdig opptrykte blanketter fra et godkjent trykkeri. Siden man må bruke ferdige blanketter, så kan man jo droppe hele bildet, og spare noe KB til Edit 3: Det var ikke mange KB man sparte nei, kun 10-12... det er nok fonten som blir bakt inn i PDFen som tar størst plass Endret 2. juni 2005 av Slettet-rXRozPkg Lenke til kommentar
Lurifaksen Skrevet 2. juni 2005 Forfatter Del Skrevet 2. juni 2005 Hmm.. sikker på at det ikke er de gule feltene og det som tar plass da? Et slikt pdf-dokument skal ikke ta mer enn rundt 10KB... Har du forsøkt pdf_open_file funksjonen? Får ikke testet selv, fordi jeg ikke har pdflib installert. Skal installere og teste i morgen. Lenke til kommentar
Gjest Slettet-rXRozPkg Skrevet 2. juni 2005 Del Skrevet 2. juni 2005 (endret) Og der var jeg nede i 12.5KB Fikk tatt bort det som gjorde at fonten ble bakt inn i PDFen. Nå må systemet til de som leser den ha fonten Arial installert (og det har jo de aller aller fleste). Edit: Da har jeg lagt til en prøveversjon av OCR-B. Tallet 6 blir byttet ut med "DEMO". Filstørrelsen er nå 34KB. Edit2: La til en biohazard-logo for å se hvor en logo kunne plasseres, filstørrelsen er nå 40,5KB. Endret 3. juni 2005 av Slettet-rXRozPkg Lenke til kommentar
zokra Skrevet 8. juni 2005 Del Skrevet 8. juni 2005 (endret) *løst * Endret 8. juni 2005 av zokra Lenke til kommentar
zokra Skrevet 9. juni 2005 Del Skrevet 9. juni 2005 (endret) Og der var jeg nede i 12.5KB Kunne jeg fått se på koden din? Blir 206 kb til meg Skal lage et giro-program for fatter'n, med kunderegister, arkiv osv, kan gi deg koden til det når jeg er ferdig Endret 9. juni 2005 av zokra Lenke til kommentar
phun-ky Skrevet 9. juni 2005 Del Skrevet 9. juni 2005 hm.. med den php koden over her. trenger man en pdf fil fra før (ser at det blir angitt en plass for det) eller er det stedet hvor den blir lagret? Lenke til kommentar
phun-ky Skrevet 9. juni 2005 Del Skrevet 9. juni 2005 det kan ikke være url? bare filepath? Lenke til kommentar
zokra Skrevet 9. juni 2005 Del Skrevet 9. juni 2005 Den må være filepath, på grunn av en bug i pdflib som er i php5 så må det gjøres slik, vis du ikke har php5 så trenger du ikke å lagre pdf-filen, da kan du vise den i dette dokumentet... Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå