chore(pdf): add din5008 letter templating
This commit is contained in:
parent
5015dba5e3
commit
c0eafdd1c8
@ -26,7 +26,7 @@ let
|
|||||||
cups # needed for interface with print center
|
cups # needed for interface with print center
|
||||||
#texlive.combined.scheme-medium # too large for container in LMU build environment.
|
#texlive.combined.scheme-medium # too large for container in LMU build environment.
|
||||||
(texlive.combine {
|
(texlive.combine {
|
||||||
inherit (texlive) scheme-basic xcolor
|
inherit (texlive) scheme-basic xcolor "scrlttr2"
|
||||||
# lualatex
|
# lualatex
|
||||||
luatexbase unicode-math lualatex-math selnolig
|
luatexbase unicode-math lualatex-math selnolig
|
||||||
;
|
;
|
||||||
|
|||||||
@ -145,6 +145,7 @@ dependencies:
|
|||||||
- rfc5051
|
- rfc5051
|
||||||
- unidecode
|
- unidecode
|
||||||
- pandoc
|
- pandoc
|
||||||
|
- pandoc-types
|
||||||
- token-bucket
|
- token-bucket
|
||||||
- async
|
- async
|
||||||
- pointedlist
|
- pointedlist
|
||||||
|
|||||||
12
shell.nix
12
shell.nix
@ -74,14 +74,12 @@ in pkgs.mkShell {
|
|||||||
++ (with pkgs;
|
++ (with pkgs;
|
||||||
[ nodejs-14_x postgresql_12 openldap google-chrome exiftool memcached minio minio-client
|
[ nodejs-14_x postgresql_12 openldap google-chrome exiftool memcached minio minio-client
|
||||||
gup skopeo
|
gup skopeo
|
||||||
# texlive.combined.scheme-medium
|
texlive.combined.scheme-medium
|
||||||
# texlive.combined.scheme-small
|
# texlive.combined.scheme-small
|
||||||
(texlive.combine {
|
#(texlive.combine {
|
||||||
inherit (texlive) scheme-basic xcolor
|
# inherit (texlive) scheme-basic xcolor scrlttr2 luatexbase unicode-math lualatex-math selnolig;
|
||||||
# lualatex
|
# ERROR: attribute 'scrlttr2' missing - gleicher Fehler kommt bei ausgedachten Namen, auch ohne Zahl am Ende
|
||||||
luatexbase unicode-math lualatex-math selnolig
|
#})
|
||||||
;
|
|
||||||
})
|
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
++ (with pkgs.haskellPackages; [ stack yesod-bin hlint cabal-install weeder profiteur ]);
|
++ (with pkgs.haskellPackages; [ stack yesod-bin hlint cabal-install weeder profiteur ]);
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import Jobs
|
|||||||
|
|
||||||
import Data.Char (isDigit)
|
import Data.Char (isDigit)
|
||||||
import qualified Data.Text as Text
|
import qualified Data.Text as Text
|
||||||
|
import qualified Data.Text.IO as Text
|
||||||
import qualified Data.ByteString.Lazy as L
|
import qualified Data.ByteString.Lazy as L
|
||||||
|
|
||||||
import qualified Data.Set as Set
|
import qualified Data.Set as Set
|
||||||
@ -17,7 +18,7 @@ import qualified Data.Map as Map
|
|||||||
|
|
||||||
import qualified Text.Pandoc as P
|
import qualified Text.Pandoc as P
|
||||||
import qualified Text.Pandoc.PDF as P
|
import qualified Text.Pandoc.PDF as P
|
||||||
-- import qualified Text.Pandoc.Builder as P
|
import qualified Text.Pandoc.Builder as P
|
||||||
|
|
||||||
import Handler.Admin.Test.Download (testDownload)
|
import Handler.Admin.Test.Download (testDownload)
|
||||||
|
|
||||||
@ -239,7 +240,7 @@ postAdminTestR = do
|
|||||||
<p style="white-space:pre-wrap; font-family:var(--font-monospace);">
|
<p style="white-space:pre-wrap; font-family:var(--font-monospace);">
|
||||||
#{tshow res}
|
#{tshow res}
|
||||||
|]
|
|]
|
||||||
|
|
||||||
i18nIdent <- newIdent
|
i18nIdent <- newIdent
|
||||||
let i18nForm' = wrapForm i18nWidget FormSettings
|
let i18nForm' = wrapForm i18nWidget FormSettings
|
||||||
{ formMethod = POST
|
{ formMethod = POST
|
||||||
@ -276,22 +277,31 @@ postAdminTestR = do
|
|||||||
|
|
||||||
getAdminTestPdfR :: Handler TypedContent
|
getAdminTestPdfR :: Handler TypedContent
|
||||||
getAdminTestPdfR = do
|
getAdminTestPdfR = do
|
||||||
-- let -- typePDF = "application/pdf" :: ContentType
|
templates <- liftIO $ do
|
||||||
-- typePDF = Settings.Mime.mimeLookup "pdfdemo.pdf"
|
letter_md <- Text.readFile "templates/letter/fraport_renewal.md"
|
||||||
content <- liftIO . P.runIO $ do
|
letter_tp <- P.compileTemplate "" letter_md
|
||||||
tmpl <- P.compileDefaultTemplate "latex"
|
din5008 <- Text.readFile "templates/letter/din5008.latex" >>= P.compileTemplate ""
|
||||||
let
|
now <- getCurrentTime
|
||||||
md = "# Hello \n\n This is some *more* Text." :: Text
|
return (now, letter_md, letter_tp, din5008)
|
||||||
texopts = []
|
case templates of
|
||||||
writeropts = def { P.writerTemplate = Just tmpl }
|
(_,_,Left err,_) -> sendResponseStatus internalServerError500 $ tshow err
|
||||||
doc <- P.readMarkdown def md
|
(_,_,_,Left err) -> sendResponseStatus internalServerError500 $ tshow err
|
||||||
-- P.makePDF "pdflatex" texopts P.writeLaTeX writeropts doc -- xcolor.sty not found
|
(now, md, Right templ, Right latex) -> do
|
||||||
P.makePDF "lualatex" texopts P.writeLaTeX writeropts doc -- unicode-math.sty not found
|
content <- liftIO . P.runIO $ do
|
||||||
case content of
|
let texopts = []
|
||||||
Right (Right bs) -> do
|
readeropts = def { P.readerExtensions = P.pandocExtensions }
|
||||||
liftIO $ L.writeFile "/tmp/generated.pdf" bs
|
writeropts1 = def { P.writerTemplate = Just templ }
|
||||||
now <- liftIO getCurrentTime
|
writeropts2 = def { P.writerTemplate = Just latex }
|
||||||
sendByteStringAsFile "demoPDF.pdf" (L.toStrict bs) now
|
-- https://github.com/jgm/pandoc/issues/1950
|
||||||
-- sendResponse (typePDF, toContent bs)
|
-- using markdown as a template for itself for interpolation:
|
||||||
Right (Left err) -> sendResponseStatus internalServerError500 $ tshow err
|
doc1 <- P.readMarkdown readeropts md
|
||||||
Left err -> sendResponseStatus internalServerError500 $ P.renderError err
|
doc2 <- P.writeMarkdown writeropts1 doc1
|
||||||
|
doc3 <- P.readMarkdown readeropts doc2
|
||||||
|
P.makePDF "pdflatex" texopts P.writeLaTeX writeropts2 $
|
||||||
|
P.setDate (P.text . tshow $ utctDay now) doc3
|
||||||
|
case content of
|
||||||
|
Right (Right bs) -> do
|
||||||
|
liftIO $ L.writeFile "/tmp/generated.pdf" bs
|
||||||
|
sendByteStringAsFile "demoPDF.pdf" (L.toStrict bs) now
|
||||||
|
Right (Left err) -> sendResponseStatus internalServerError500 $ tshow err
|
||||||
|
Left err -> sendResponseStatus internalServerError500 $ P.renderError err
|
||||||
|
|||||||
98
templates/letter/din5008.latex
Normal file
98
templates/letter/din5008.latex
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
%Based upon https://github.com/benedictdudel/pandoc-letter-din5008
|
||||||
|
\documentclass[
|
||||||
|
foldmarks=BTm, % show foldmarks top, middle, bottom
|
||||||
|
foldmarks=false, % don't print foldmarks
|
||||||
|
fromalign=left, % letter head on the right
|
||||||
|
fromphone=true, % show phone number
|
||||||
|
fromemail=true, % show email
|
||||||
|
fromlogo=false, % don't show logo in letter head
|
||||||
|
version=last % latest version of KOMA letter
|
||||||
|
pagenumber=botright % show pagenumbers on bottom right
|
||||||
|
]{scrlttr2}
|
||||||
|
|
||||||
|
\usepackage[ngerman]{babel}
|
||||||
|
\usepackage{iftex}
|
||||||
|
\ifPDFTeX
|
||||||
|
\usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc}
|
||||||
|
\usepackage[utf8]{inputenc}
|
||||||
|
\usepackage{textcomp} % provide euro and other symbols
|
||||||
|
\else % if luatex or xetex
|
||||||
|
$if(mathspec)$
|
||||||
|
\ifXeTeX
|
||||||
|
\usepackage{mathspec}
|
||||||
|
\else
|
||||||
|
\usepackage{unicode-math}
|
||||||
|
\fi
|
||||||
|
$else$
|
||||||
|
\usepackage{unicode-math}
|
||||||
|
$endif$
|
||||||
|
|
||||||
|
\usepackage{parskip}
|
||||||
|
|
||||||
|
\usepackage{graphics}
|
||||||
|
|
||||||
|
\usepackage{booktabs}
|
||||||
|
\usepackage{longtable}
|
||||||
|
|
||||||
|
\usepackage[right]{eurosym}
|
||||||
|
|
||||||
|
\usepackage[hyphens]{url}
|
||||||
|
\usepackage{enumitem}
|
||||||
|
|
||||||
|
\makeatletter
|
||||||
|
\setlength{\@tempskipa}{-1.2cm}%
|
||||||
|
\@addtoplength{toaddrheight}{\@tempskipa}
|
||||||
|
\makeatother
|
||||||
|
|
||||||
|
\setlength{\oddsidemargin}{\useplength{toaddrhpos}}
|
||||||
|
\addtolength{\oddsidemargin}{-1in}
|
||||||
|
\setlength{\textwidth}{\useplength{firstheadwidth}}
|
||||||
|
|
||||||
|
\providecommand{\tightlist}{%
|
||||||
|
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
\setkomavar{fromname}{$author$}
|
||||||
|
\renewcommand*{\raggedsignature}{\raggedright}
|
||||||
|
\setkomavar{fromaddress}{
|
||||||
|
$for(return-address)$
|
||||||
|
$return-address$$sep$\\
|
||||||
|
$endfor$
|
||||||
|
}
|
||||||
|
\setkomavar{fromphone}{$phone$}
|
||||||
|
\setkomavar{fromemail}{$email$}
|
||||||
|
\setkomavar{signature}{$author$}
|
||||||
|
|
||||||
|
\setkomavar{date}{$date$}
|
||||||
|
\setkomavar{place}{$place$}
|
||||||
|
|
||||||
|
\setkomavar{subject}{$subject$}
|
||||||
|
|
||||||
|
\begin{letter}{%
|
||||||
|
$for(address)$
|
||||||
|
$address$$sep$\\
|
||||||
|
$endfor$
|
||||||
|
}
|
||||||
|
|
||||||
|
\opening{$opening$}
|
||||||
|
|
||||||
|
This paragraph is fixed within the template.
|
||||||
|
Not sure if this is the way to go though.
|
||||||
|
|
||||||
|
\begin{description}[leftmargin=!,labelwidth=1.5cm,labelindent=1cm]
|
||||||
|
\item[Login] $login$
|
||||||
|
\item[Pin] $pin$
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
$body$
|
||||||
|
|
||||||
|
\closing{$closing$}
|
||||||
|
|
||||||
|
\ps $postskriptum$
|
||||||
|
|
||||||
|
$if(encludes)$
|
||||||
|
\setkomavar*{enclseparator}{Anlage}
|
||||||
|
\encl{$encludes$}
|
||||||
|
$endif$
|
||||||
|
\end{letter}
|
||||||
|
\end{document}
|
||||||
58
templates/letter/fraport_renewal.md
Normal file
58
templates/letter/fraport_renewal.md
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
---
|
||||||
|
### Metadaten, welche hier eingestellt werden:
|
||||||
|
# Absender
|
||||||
|
subject: Verlängerung Vorfeldführerschein
|
||||||
|
author: Fraport AG - Fahrerausbildung (AVN-AR)
|
||||||
|
phone: +49 69 690-30306
|
||||||
|
email: fahrerausbildung@fraport.de
|
||||||
|
place: Frankfurt/Main
|
||||||
|
return-address:
|
||||||
|
- 60547 Frankfurt
|
||||||
|
opening: Sehr geehrte Damen und Herren,
|
||||||
|
closing: |
|
||||||
|
Mit freundlichen Grüßen,
|
||||||
|
Ihre Fahrerausbildung.
|
||||||
|
encludes:
|
||||||
|
|
||||||
|
### Metadaten, welche automatisch ersetzt werden:
|
||||||
|
date: 11.11.1111
|
||||||
|
lang: de-de
|
||||||
|
is-de: NULL
|
||||||
|
lms-login: 123456
|
||||||
|
lms-pin: abcdef
|
||||||
|
# Emfpänger
|
||||||
|
name: E. M. Pfänger
|
||||||
|
address:
|
||||||
|
- Musterfirma GmbH
|
||||||
|
- E. M. Pfänger
|
||||||
|
- Musterstraße 11
|
||||||
|
- 12345 Musterstadt
|
||||||
|
...
|
||||||
|
|
||||||
|
die Gültigkeit Ihres Vorfeldführerscheines läuft demnächst ab.
|
||||||
|
Durch die erfolgreiche Teilnahme an einem E-Lernen können Sie
|
||||||
|
die Gültigkeit um 2 Jahre verlängern. Verwenden Sie dazu folgende
|
||||||
|
Login-Daten.
|
||||||
|
|
||||||
|
URL
|
||||||
|
|
||||||
|
: <http://www.fraport.de/fahrerausbildung>
|
||||||
|
|
||||||
|
Name:
|
||||||
|
|
||||||
|
: $name$
|
||||||
|
|
||||||
|
Login
|
||||||
|
|
||||||
|
: $login$
|
||||||
|
|
||||||
|
Pin
|
||||||
|
|
||||||
|
: $pin$
|
||||||
|
|
||||||
|
|
||||||
|
Sobald die Frist abgelaufen ist, muss zur Wiedererlangung des Vorfeldführerscheins
|
||||||
|
erneut der Grundkurs bei der Fahrerausbildung absolviert werden.
|
||||||
|
|
||||||
|
|
||||||
|
Bei Fragen können Sie sich gerne an das Team der Fahrerausbildung wenden.
|
||||||
91
templates/letter/fraport_renewal_template.md
Normal file
91
templates/letter/fraport_renewal_template.md
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
---
|
||||||
|
### Metadaten, welche hier eingestellt werden:
|
||||||
|
# Absender
|
||||||
|
subject: Verlängerung Vorfeldführerschein
|
||||||
|
author: Fraport AG - Fahrerausbildung (AVN-AR)
|
||||||
|
phone: +49 69 690-30306
|
||||||
|
email: fahrerausbildung@fraport.de
|
||||||
|
place: Frankfurt/Main
|
||||||
|
return-address:
|
||||||
|
- 60547 Frankfurt
|
||||||
|
opening: Sehr geehrte Damen und Herren,
|
||||||
|
closing: |
|
||||||
|
Mit freundlichen Grüßen,
|
||||||
|
Ihre Fahrerausbildung.
|
||||||
|
encludes: null
|
||||||
|
|
||||||
|
### Metadaten, welche automatisch ersetzt werden:
|
||||||
|
date: 11.11.1111
|
||||||
|
lang: de-de
|
||||||
|
is-de: NULL
|
||||||
|
lms-login: 123456
|
||||||
|
lms-pin: abcdef
|
||||||
|
# Emfpänger
|
||||||
|
name: E. M. Pfänger
|
||||||
|
address:
|
||||||
|
- Musterfirma GmbH
|
||||||
|
- E. M. Pfänger
|
||||||
|
- Musterstraße 11
|
||||||
|
- 12345 Musterstadt
|
||||||
|
...
|
||||||
|
$if(is-de)$
|
||||||
|
<!-- deutsche Version des Briefes -->
|
||||||
|
[comment]: <> (This is a comment, it will not be included)
|
||||||
|
die Gültigkeit Ihres Vorfeldführerscheines läuft demnächst ab.
|
||||||
|
Durch die erfolgreiche Teilnahme an einem E-Lernen können Sie
|
||||||
|
die Gültigkeit um 2 Jahre verlängern. Verwenden Sie dazu folgende
|
||||||
|
Login-Daten.
|
||||||
|
|
||||||
|
URL
|
||||||
|
|
||||||
|
: <http://www.fraport.de/fahrerausbildung>
|
||||||
|
|
||||||
|
Name:
|
||||||
|
|
||||||
|
: $name$
|
||||||
|
|
||||||
|
Login
|
||||||
|
|
||||||
|
: $login$
|
||||||
|
|
||||||
|
Pin
|
||||||
|
|
||||||
|
: $pin$
|
||||||
|
|
||||||
|
|
||||||
|
Sobald die Frist abgelaufen ist, muss zur Wiedererlangung des Vorfeldführerscheins
|
||||||
|
erneut der Grundkurs bei der Fahrerausbildung absolviert werden.
|
||||||
|
|
||||||
|
|
||||||
|
Bei Fragen können Sie sich gerne an das Team der Fahrerausbildung wenden.
|
||||||
|
$else$
|
||||||
|
<!-- englische Version des Briefes -->
|
||||||
|
your apron diving licence is about to expire soon.
|
||||||
|
You may renew your apron driving licence by two years through successfully
|
||||||
|
completing an e-learning course. Please use the following login data.
|
||||||
|
|
||||||
|
URL
|
||||||
|
|
||||||
|
: <http://www.fraport.de/fahrerausbildung>
|
||||||
|
|
||||||
|
Name:
|
||||||
|
|
||||||
|
: $name$
|
||||||
|
|
||||||
|
Login
|
||||||
|
|
||||||
|
: $login$
|
||||||
|
|
||||||
|
Pin
|
||||||
|
|
||||||
|
: $pin$
|
||||||
|
|
||||||
|
|
||||||
|
Should your apron driving licence expire before completing this
|
||||||
|
e-learning course, then a renewal requires your full participation
|
||||||
|
of the basic training course again.
|
||||||
|
|
||||||
|
|
||||||
|
Please do not hesitate to contact the Fraport driving school team, if you need any assistance.
|
||||||
|
|
||||||
|
$endif$
|
||||||
Reference in New Issue
Block a user