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
|
||||
#texlive.combined.scheme-medium # too large for container in LMU build environment.
|
||||
(texlive.combine {
|
||||
inherit (texlive) scheme-basic xcolor
|
||||
inherit (texlive) scheme-basic xcolor "scrlttr2"
|
||||
# lualatex
|
||||
luatexbase unicode-math lualatex-math selnolig
|
||||
;
|
||||
|
||||
@ -145,6 +145,7 @@ dependencies:
|
||||
- rfc5051
|
||||
- unidecode
|
||||
- pandoc
|
||||
- pandoc-types
|
||||
- token-bucket
|
||||
- async
|
||||
- pointedlist
|
||||
|
||||
12
shell.nix
12
shell.nix
@ -74,14 +74,12 @@ in pkgs.mkShell {
|
||||
++ (with pkgs;
|
||||
[ nodejs-14_x postgresql_12 openldap google-chrome exiftool memcached minio minio-client
|
||||
gup skopeo
|
||||
# texlive.combined.scheme-medium
|
||||
texlive.combined.scheme-medium
|
||||
# texlive.combined.scheme-small
|
||||
(texlive.combine {
|
||||
inherit (texlive) scheme-basic xcolor
|
||||
# lualatex
|
||||
luatexbase unicode-math lualatex-math selnolig
|
||||
;
|
||||
})
|
||||
#(texlive.combine {
|
||||
# inherit (texlive) scheme-basic xcolor scrlttr2 luatexbase unicode-math lualatex-math selnolig;
|
||||
# ERROR: attribute 'scrlttr2' missing - gleicher Fehler kommt bei ausgedachten Namen, auch ohne Zahl am Ende
|
||||
#})
|
||||
]
|
||||
)
|
||||
++ (with pkgs.haskellPackages; [ stack yesod-bin hlint cabal-install weeder profiteur ]);
|
||||
|
||||
@ -10,6 +10,7 @@ import Jobs
|
||||
|
||||
import Data.Char (isDigit)
|
||||
import qualified Data.Text as Text
|
||||
import qualified Data.Text.IO as Text
|
||||
import qualified Data.ByteString.Lazy as L
|
||||
|
||||
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.PDF as P
|
||||
-- import qualified Text.Pandoc.Builder as P
|
||||
import qualified Text.Pandoc.Builder as P
|
||||
|
||||
import Handler.Admin.Test.Download (testDownload)
|
||||
|
||||
@ -239,7 +240,7 @@ postAdminTestR = do
|
||||
<p style="white-space:pre-wrap; font-family:var(--font-monospace);">
|
||||
#{tshow res}
|
||||
|]
|
||||
|
||||
|
||||
i18nIdent <- newIdent
|
||||
let i18nForm' = wrapForm i18nWidget FormSettings
|
||||
{ formMethod = POST
|
||||
@ -276,22 +277,31 @@ postAdminTestR = do
|
||||
|
||||
getAdminTestPdfR :: Handler TypedContent
|
||||
getAdminTestPdfR = do
|
||||
-- let -- typePDF = "application/pdf" :: ContentType
|
||||
-- typePDF = Settings.Mime.mimeLookup "pdfdemo.pdf"
|
||||
content <- liftIO . P.runIO $ do
|
||||
tmpl <- P.compileDefaultTemplate "latex"
|
||||
let
|
||||
md = "# Hello \n\n This is some *more* Text." :: Text
|
||||
texopts = []
|
||||
writeropts = def { P.writerTemplate = Just tmpl }
|
||||
doc <- P.readMarkdown def md
|
||||
-- P.makePDF "pdflatex" texopts P.writeLaTeX writeropts doc -- xcolor.sty not found
|
||||
P.makePDF "lualatex" texopts P.writeLaTeX writeropts doc -- unicode-math.sty not found
|
||||
case content of
|
||||
Right (Right bs) -> do
|
||||
liftIO $ L.writeFile "/tmp/generated.pdf" bs
|
||||
now <- liftIO getCurrentTime
|
||||
sendByteStringAsFile "demoPDF.pdf" (L.toStrict bs) now
|
||||
-- sendResponse (typePDF, toContent bs)
|
||||
Right (Left err) -> sendResponseStatus internalServerError500 $ tshow err
|
||||
Left err -> sendResponseStatus internalServerError500 $ P.renderError err
|
||||
templates <- liftIO $ do
|
||||
letter_md <- Text.readFile "templates/letter/fraport_renewal.md"
|
||||
letter_tp <- P.compileTemplate "" letter_md
|
||||
din5008 <- Text.readFile "templates/letter/din5008.latex" >>= P.compileTemplate ""
|
||||
now <- getCurrentTime
|
||||
return (now, letter_md, letter_tp, din5008)
|
||||
case templates of
|
||||
(_,_,Left err,_) -> sendResponseStatus internalServerError500 $ tshow err
|
||||
(_,_,_,Left err) -> sendResponseStatus internalServerError500 $ tshow err
|
||||
(now, md, Right templ, Right latex) -> do
|
||||
content <- liftIO . P.runIO $ do
|
||||
let texopts = []
|
||||
readeropts = def { P.readerExtensions = P.pandocExtensions }
|
||||
writeropts1 = def { P.writerTemplate = Just templ }
|
||||
writeropts2 = def { P.writerTemplate = Just latex }
|
||||
-- https://github.com/jgm/pandoc/issues/1950
|
||||
-- using markdown as a template for itself for interpolation:
|
||||
doc1 <- P.readMarkdown readeropts md
|
||||
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$
|
||||
Loading…
Reference in New Issue
Block a user