Skip to content

Commit fd1ae7e

Browse files
committed
Cleanup pdf code
1 parent f0d179f commit fd1ae7e

File tree

3 files changed

+31
-22
lines changed

3 files changed

+31
-22
lines changed

cbits/pdfgen.c

+1
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@
9090
* y curveto.
9191
*/
9292

93+
// MT: commented this out, breaks things for some reason
9394
// #define _POSIX_SOURCE /* For localtime_r */
9495
#include <ctype.h>
9596
#include <errno.h>

jammittools.cabal

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ library
5252
c-sources:
5353
cbits/ima4.c
5454
cbits/pdfgen.c
55+
cc-options: -DSKIP_ATTRIBUTE
5556
default-language: Haskell2010
5657

5758
executable jammittools

src/Sound/Jammit/Internal/Image.hs

+29-22
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,28 @@ module Sound.Jammit.Internal.Image
33
, jpegsToPDF
44
) where
55

6-
import qualified Codec.Picture as P
7-
import Codec.Picture.Types (convertImage)
8-
import Control.Monad (forM_, replicateM)
9-
import Control.Monad.IO.Class (MonadIO(..))
10-
import qualified Data.ByteString.Lazy as BL
11-
import qualified Data.ByteString as B
12-
import Data.Conduit ((.|))
13-
import Data.Conduit.List (consume)
14-
import qualified Data.Conduit as C
15-
import Data.Maybe (catMaybes)
16-
import qualified Data.Vector.Storable as V
17-
import Foreign
18-
import Foreign.C
19-
import Control.Exception (bracket)
20-
import Codec.Picture.Jpg (encodeJpegAtQuality)
21-
22-
data PDFInfo
6+
import qualified Codec.Picture as P
7+
import Codec.Picture.Jpg (encodeJpegAtQuality)
8+
import Codec.Picture.Types (convertImage)
9+
import Control.Exception (bracket)
10+
import Control.Monad (forM_, replicateM)
11+
import Control.Monad.IO.Class (MonadIO (..))
12+
import qualified Data.ByteString as B
13+
import qualified Data.ByteString.Lazy as BL
14+
import Data.Conduit ((.|))
15+
import qualified Data.Conduit as C
16+
import Data.Conduit.List (consume)
17+
import Data.Maybe (catMaybes)
18+
import qualified Data.Vector.Storable as V
19+
import Foreign
20+
import Foreign.C
21+
22+
-- data PDFInfo
2323
data PDFDoc
2424
data PDFObject
2525

26-
foreign import ccall unsafe "pdf_create"
27-
pdf_create :: CInt -> CInt -> Ptr PDFInfo -> IO (Ptr PDFDoc)
26+
-- foreign import ccall unsafe "pdf_create"
27+
-- pdf_create :: CInt -> CInt -> Ptr PDFInfo -> IO (Ptr PDFDoc)
2828

2929
foreign import ccall unsafe "pdf_create_nostruct"
3030
pdf_create_nostruct :: CInt -> CInt
@@ -37,8 +37,8 @@ foreign import ccall unsafe "pdf_append_page"
3737
foreign import ccall unsafe "pdf_page_set_size"
3838
pdf_page_set_size :: Ptr PDFDoc -> Ptr PDFObject -> CInt -> CInt -> IO CInt
3939

40-
foreign import ccall unsafe "pdf_add_jpeg"
41-
pdf_add_jpeg :: Ptr PDFDoc -> Ptr PDFObject -> CInt -> CInt -> CInt -> CInt -> CString -> IO CInt
40+
-- foreign import ccall unsafe "pdf_add_jpeg"
41+
-- pdf_add_jpeg :: Ptr PDFDoc -> Ptr PDFObject -> CInt -> CInt -> CInt -> CInt -> CString -> IO CInt
4242

4343
foreign import ccall unsafe "pdf_add_jpeg_direct"
4444
pdf_add_jpeg_direct
@@ -56,6 +56,9 @@ foreign import ccall unsafe "pdf_save"
5656
foreign import ccall unsafe "pdf_destroy"
5757
pdf_destroy :: Ptr PDFDoc -> IO ()
5858

59+
foreign import ccall unsafe "pdf_get_err"
60+
pdf_get_err :: Ptr PDFDoc -> Ptr CInt -> IO CString
61+
5962
loadPNG :: FilePath -> IO (P.Image P.PixelRGB8)
6063
loadPNG fp = do
6164
Right dyn <- P.readImage fp
@@ -139,7 +142,11 @@ jpegsToPDF jpegs pdf = let
139142
pageHeight = inch 11
140143
in withCString "" $ \mt -> do
141144
bracket (pdf_create_nostruct pageWidth pageHeight mt mt mt mt mt mt) pdf_destroy $ \doc -> do
142-
let check fn = fn >>= \ret -> case ret of 0 -> return (); e -> error $ show e
145+
let check fn = fn >>= \ret -> case ret of
146+
0 -> return ()
147+
e -> do
148+
str <- pdf_get_err doc nullPtr >>= peekCString
149+
error $ "PDF generation error (" <> show e <> "): " <> str
143150
forM_ jpegs $ \jpeg@(P.Image w h _) -> do
144151
let thisHeight = round $ (toRational h / toRational w) * toRational pageWidth
145152
page <- pdf_append_page doc

0 commit comments

Comments
 (0)