{-# 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 ()