Skip to content

Commit

Permalink
Merge pull request #208 from mariux64/add-pdf-fon
Browse files Browse the repository at this point in the history
fon: add pdf export
  • Loading branch information
wwwutz authored Sep 16, 2021
2 parents 20cd67b + 31a95c0 commit 031c435
Showing 1 changed file with 166 additions and 12 deletions.
178 changes: 166 additions & 12 deletions fon/fon.pl
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,14 @@
use MIME::Base64;
use Encode;
use utf8;
use Getopt::Long;
use POSIX qw(strftime);
use File::Temp qw(tempdir);

binmode( STDOUT, ":utf8" );

our %options;

my %multichar;
my %escapechar;

Expand All @@ -16,6 +21,8 @@
my %O;
my %M;

GetOptions( 'pdf=s' => \$options{pdf}, ) or die;

my $SRCH = shift || '.';

get_ldap_addressbook( \%L );
Expand All @@ -26,21 +33,25 @@
}
}

my @order = ( 'name', 'room', 'fone', 'mail' );
if ( $options{pdf} ) {
phonebook_pdf( $options{pdf} );
}
else {
my @order = ( 'name', 'room', 'fone', 'mail' );

exit unless exists( $O{name} );
exit unless exists( $O{name} );

my $e = scalar( @{ $O{name} } ) - 1;
my $e = scalar( @{ $O{name} } ) - 1;

for my $i ( 0 .. $e ) {
for my $i ( 0 .. $e ) {

for my $k (@order) {
printf "%-*s ", $O{ $k . '_l' }, $O{$k}[$i];
}
printf "\n";
for my $k (@order) {
printf "%-*s ", $O{ $k . '_l' }, $O{$k}[$i];
}
printf "\n";

}
}

exit;

sub match_entry {
Expand Down Expand Up @@ -73,6 +84,8 @@ sub push_entry {
push @{ $O{name} }, $t;
$l > ( $O{name_l} || 0 ) and $O{name_l} = $l;

push @{ $O{abk} }, substr( $e->{sn}[0], 0, 1 ) . " " . substr( $e->{givenName}[0], 0, 1 );

$t = join( '/', map { s/\(.*?\)|Betriebsarztraum|\s+//g; $_ } @{ $e->{roomNumber} } );
$l = len($t);
push @{ $O{room} }, $t;
Expand All @@ -90,9 +103,9 @@ sub push_entry {
}

sub exec_ldapsearch {
my (@args) = @_; # eg 'ldapsearch'
my (@args) = @_; # eg 'ldapsearch'
my $command = '/package/ldap/openldap/bin/ldapsearch';
my @ARGS = ( '-x', '-H', 'ldap://ldap.molgen.mpg.de/', '-ZZ', '-o', 'ldif-wrap=no' );
my @ARGS = ( '-x', '-H', 'ldap://ldap.molgen.mpg.de/', '-ZZ', '-o', 'ldif-wrap=no' );
exec $command, @ARGS, @args;
die "exec failed: $!\n";
}
Expand All @@ -107,7 +120,7 @@ sub get_ldap_addressbook {

my $pid = open P, '-|';
defined $pid or die "$!\n";
$pid or exec_ldapsearch( '-b', 'dc=addressbook,dc=apps,dc=molgen,dc=mpg,dc=de' );
$pid or exec_ldapsearch( '-b', 'dc=addressbook,dc=apps,dc=molgen,dc=mpg,dc=de' );
binmode P, ':utf8';

while (<P>) {
Expand Down Expand Up @@ -146,6 +159,94 @@ sub get_ldap_addressbook {
return;
}

sub stime {
my $fmt = shift;
my $time = shift;
return strftime( $fmt, localtime($time) );
}

sub texfoncut {
my $f = shift;
if ( $f eq 'n/a' ) {
return '---';
}
if ( length($f) > 5 ) {
$f =~ s/(\d\d\d\d\d)(?=\d)/$1\\-/g;
$f =~ s{/}{ }g;
$f = '\scriptsize{' . $f . '}';
}
return $f;
}

sub phonebook_pdf {

my $OUTFILE = shift;

if ( -e $OUTFILE ) {
die "file already exists: $OUTFILE.";
}

my $TEXTEMPLATE;

while (<DATA>) {
$TEXTEMPLATE .= $_;
}

# my $tmpdir = '/scratch/local/fon-1';
# system('mkdir -v -p -m 700 '.$tmpdir);

my $tmpdir = tempdir( '/scratch/local/fon-XXXXXXXX', CLEANUP => 1 );

my $texsrc = "$tmpdir/fon";

my @order = ( 'name', 'room', 'fone', 'mail' );

my $e = scalar( @{ $O{name} } ) - 1;

my $row = '';

for my $i ( 0 .. $e ) {
next if ( $O{room}[$i] . $O{fone}[$i] eq '--' );
$row .= $O{abk}[$i] . " & ";
my $pt = '';
for my $k (@order) {
my $a = $O{$k}[$i];
if ( $k eq 'mail' ) {
$a = '\verb|' . $a . '|';
}
if ( $k eq 'fone' ) {
$a = texfoncut($a);
}
$row .= $pt . $a;
$pt = ' & ';
}
$row .= "\\\\\n";
}

my $TEX = $TEXTEMPLATE;

my $TITLE = 'Telefonliste';
$TEX =~ s/::TITLE::/$TITLE/g;

my $today = stime( '%A', time() );
$TEX =~ s/::TODAY::/$today/g;

my $now = stime( '%d.%m.%Y %H:%M', time() );
$TEX =~ s/::NOW::/$now/g;

$TEX =~ s/::ROW::/$row/g;

open T, '>', "$texsrc.tex" or die "cannot write $texsrc.tex:$!";

binmode( T, ":utf8" );
print T $TEX;
close T;
system("cd $tmpdir && ( pdflatex $texsrc && pdflatex $texsrc ) </dev/null");
if ( -e "$texsrc.pdf" ) {
system( 'cp', '-v', "$texsrc.pdf", $OUTFILE );
}
}

sub s2a {
$_ = shift;
s/(\xc2|\xc3)(.)/$multichar{$1}{$2}||$1.$2/eg;
Expand Down Expand Up @@ -217,3 +318,56 @@ BEGIN
);

}

__DATA__
\documentclass[oneside,a4paper,10pt]{article}
%\usepackage{showframe}
\usepackage{fancyhdr}
\usepackage{longtable}
\usepackage{lastpage}
\pagestyle{fancy}
\makeatletter
\setlength{\tabcolsep}{8pt} % Default value: 6pt
\renewcommand{\arraystretch}{1.3} % Default value: 1
\setlength{\evensidemargin}{0pt}
\setlength{\oddsidemargin}{0pt}
\setlength{\marginparwidth}{10pt}
%\setlength{\textheight}{24cm}
%\addtolength{\headsep}{-1in}
\addtolength{\textwidth}{2in}
\setlength{\parindent}{0pt}
\renewcommand{\@evenhead}{\Large{::TITLE::}\hfil \normalsize\hfil Blatt \thepage{} von \pageref{LastPage}}
\renewcommand{\@oddhead}{\@evenhead}
\renewcommand{\@evenfoot}{%
\normalsize\slshape Telefonliste \hfil Ausdruck vom ::NOW:: Uhr \hfil \upshape %
Blatt \thepage{} von \pageref{LastPage}}
\renewcommand{\@oddfoot}{\@evenfoot}
\let\thefootnote\relax
\makeatother
\begin{document}
%\oddpagelayoutfalse
%\twocolumnlayoutfalse
\footnote{Um Mitarbeitende telefonisch zu kontaktieren, wählen Sie bitte \texttt{030-8413} plus der in der Liste angegebenen Nummer.}
\begin{longtable}{|c|p{5cm}|p{22mm}|p{18mm}|l|}%
\hline
\textbf{A-Z} & \textbf{Name} & \textbf{Raum} & \textbf{Tel.} & \textbf{\texttt{E-Mail}}\\
\hline\hline
\endhead
::ROW::
\hline
\end{longtable}\label{lp}
\end{document}

0 comments on commit 031c435

Please sign in to comment.