diff options
Diffstat (limited to 'src/PDF.hs')
-rw-r--r-- | src/PDF.hs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/PDF.hs b/src/PDF.hs new file mode 100644 index 0000000..a002b38 --- /dev/null +++ b/src/PDF.hs @@ -0,0 +1,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 () |