aboutsummaryrefslogtreecommitdiff
path: root/src/PDF.hs
blob: a002b38dbc002572c0ebfecf26f0cc489a3f7f42 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
{-# LANGUAGE OverloadedStrings #-}

module PDF
  ( generatePDFAt
  ) where

import           Control.Exception (SomeException, try)
import           System.Directory  (copyFile, createDirectoryIfMissing)
import           System.FilePath   (takeDirectory)
import           System.IO         (hClose)
import           System.IO.Temp    (withTempFile)
import qualified System.Process    as Process (callCommand)
import           Text.LaTeX        (LaTeX, renderFile)

generatePDFAt :: FilePath -> LaTeX -> IO ()
generatePDFAt path latex = do
  (basePath, tmpPath) <- generatePDF latex
  createDirectoryIfMissing True (takeDirectory path)
  copyFile tmpPath path
  Process.callCommand ("rm " ++ basePath ++ "*")

generatePDF :: LaTeX -> IO (FilePath, FilePath)
generatePDF latex =
  withTempFile "/tmp" "latex" $ \filePath handle -> do
    hClose handle
    renderFile filePath latex
    renderFile "/home/joris/resume.tex" latex
    pdfCommand filePath
    pdfCommand filePath
    return (filePath, filePath ++ ".pdf")

pdfCommand :: String -> IO ()
pdfCommand path = do
  let command = "cd resume && pdflatex --output-directory /tmp " ++ path ++ " >/dev/null"
  result <- try $ Process.callCommand command :: IO (Either SomeException ())
  case result of
    Left err -> do
      putStrLn "Error generating PDF:"
      putStrLn (show err)
    Right _ ->
      return ()