[Linux-ug] [OT] php: script für Ausdruck-Unterstützung

Dirk Essl dirk at essl.de
Mi Mär 2 11:53:50 CET 2011


On 02/03/2011 11:44, Gerhard wrote:
> Hallo Liste,

Hi,

> nachdem ich als Listenleser sehe, dass hier viele Kenntnisse, auch außerhalb
> des unmittelbaren Linux-Umfeldes bestehen, erlaube ich mir diese Anfrage,
> weil ich auch keinen vernünftigen Ansatzpunkt finde:
>
> ich suche ein Script, das das Drucken, etwa einer Rechnung oder eines anderen
> genormten Formulares unterstützt. Es könnte mit einem Generator ein Script
> erzeugen, das später im laufenden Programm aufgerufen wird und dessen
> Variablen mit den entsprechenden Werten aus dem Programm füllt. Dann wird das
> Ganze an den Drucker geschickt und heraus kommt eine komplette Druckseite.
>
> Hintergrund ist, dass das Erstellen verschiedener formularisierter Seiten
> aufwendig ist und jede Änderung eine Umprogrammierung erfordern würde.
> Mit einem Script könnte das auch ein nicht php sprechender Mensch machen.
>
> Auch Hinweise, wo ich ansetzen könnte sind höchst willkommen.

ich mache das mit perl, TeX und lp hier ein Teil meines scriptes, 
vielleicht hilft dir das ja:

<snip>
     #
     #  Generate the postscript details
     #

     if (!&want_to_do_step("generate account details form", 
$stepprompts, "y")) {
         &info("generating account details form ...");
         &generate_account_details("/tmp/$main::progname.$newlogin.ps", 
$ticketno, $newgecos, $newlogin, $pwuncrypted, \@domains, $newuid, 
$newgid, $requestorrealname, $requestorerpid);
     }

     #
     #  Print account details
     #

     if (!&want_to_do_step("print account details twice", $stepprompts, 
"y")) {
         &info("printing account details twice ...");
         &print_account_details("/tmp/$main::progname.$newlogin.ps");
     }
     &info("account details remain in /tmp/$main::progname.$newlogin.ps");

sub generate_account_details
{
     my($filename, $ticketno, $gecos, $login, $password, $domains_ref, 
$uid, $gid, $requestorrealname, $requestorerpid) = @_;
     my($date, $tex_data, $discard, $realname, $texsafe_password);

     chomp($date = `date`);
     #  Ticket number might have a hash, which isn't valid TeX; escape it.
     $ticketno =~ s/#/\\#/g;

     open(TEX_HANDLE, $tex_file) || &error("$tex_file: can't open");
     {
         local $/;  # slurp!
         $tex_data = <TEX_HANDLE>;
     }
     close(TEX_HANDLE);
     $tex_data =~ s/PLACEHOLDERDATEOFREQUEST/$date/;
     $tex_data =~ s/PLACEHOLDERCALLREFERENCE/$ticketno/;
     $tex_data =~ s/PLACEHOLDERREQUESTORREALNAME/$requestorrealname/;
     $tex_data =~ s/PLACEHOLDERREQUESTORERPID/$requestorerpid/;
     #  Feull GECOS data is too long to fit neatly on form.
     ($realname = $gecos) =~ s/,.*//;
     $tex_data =~ s/PLACEHOLDERREALNAME/$realname/;
     $tex_data =~ s/PLACEHOLDERUSERNAME/$login/;
     ($texsafe_password = $password) =~ s/([#\*_\$%])/\\$1/g;
     $tex_data =~ s/PLACEHOLDERPASSWORD/$texsafe_password/;
     $tex_data =~ s/PLACEHOLDERACCOUNTDOMAINS/join(", ", @{$domains_ref})/e;
     $tex_data =~ s/PLACEHOLDERUID/$uid/;
     $tex_data =~ s/PLACEHOLDERGID/$gid/;
    open(TEX_HANDLE, ">/tmp/$main::progname.$$.tex");
     print TEX_HANDLE $tex_data;
     close TEX_HANDLE;
     $discard = `latex -output-directory=/tmp 
/tmp/$main::progname.$$.tex 2>&1`;
     &debug(10, "generate_account_details: discard=\"$discard\"");
     $discard = `dvips -o $filename /tmp/$main::progname.$$.dvi 2>&1`;
     &debug(10, "generate_account_details: discard=\"$discard\"");
     unlink "/tmp/$main::progname.$$.tex";
}

sub print_account_details
{
     my($filename) = @_;
     my($discard);

     $discard = `lp $filename 2>&1`;
     &debug(10, "print_account_details: discard=\"$discard\"");
     $discard = `lp $filename 2>&1`;
     &debug(10, "print_account_details: discard=\"$discard\"");
}
</snip>


> Gruß
>
> Gerhard

--
dirk


Mehr Informationen über die Mailingliste Linux-ug