Fix precision bug caused by using Floats to represent PDF Number values sometimes used to represent a byte offset within a file
This commit is contained in:
parent
9ab010de61
commit
29c5823f34
|
@ -57,7 +57,7 @@ lookupOffset objectId = do
|
||||||
entryOffset (InUse {offset}) = Just offset
|
entryOffset (InUse {offset}) = Just offset
|
||||||
entryOffset _ = Nothing
|
entryOffset _ = Nothing
|
||||||
|
|
||||||
loadNumber :: ObjectId -> SParser Float
|
loadNumber :: ObjectId -> SParser Double
|
||||||
loadNumber objectId = do
|
loadNumber objectId = do
|
||||||
offset <- getOffset <$> lookupOffset objectId
|
offset <- getOffset <$> lookupOffset objectId
|
||||||
objectStart <- BS.drop offset <$> gets input
|
objectStart <- BS.drop offset <$> gets input
|
||||||
|
@ -70,7 +70,7 @@ loadNumber objectId = do
|
||||||
invalidValue :: Object -> String
|
invalidValue :: Object -> String
|
||||||
invalidValue v = "Invalid value " ++ show v
|
invalidValue v = "Invalid value " ++ show v
|
||||||
|
|
||||||
getSize :: Maybe DirectObject -> SParser Float
|
getSize :: Maybe DirectObject -> SParser Double
|
||||||
getSize Nothing = fail "Missing '/Length' key on stream"
|
getSize Nothing = fail "Missing '/Length' key on stream"
|
||||||
getSize (Just (NumberObject (Number size))) = return size
|
getSize (Just (NumberObject (Number size))) = return size
|
||||||
getSize (Just (Reference (IndirectObjCoordinates {objectId}))) = do
|
getSize (Just (Reference (IndirectObjCoordinates {objectId}))) = do
|
||||||
|
|
|
@ -5,6 +5,7 @@ module PDF.Object (
|
||||||
Content(..)
|
Content(..)
|
||||||
, DirectObject(..)
|
, DirectObject(..)
|
||||||
, Flow(..)
|
, Flow(..)
|
||||||
|
, IndexedObjects
|
||||||
, IndirectObjCoordinates(..)
|
, IndirectObjCoordinates(..)
|
||||||
, InputStructure(..)
|
, InputStructure(..)
|
||||||
, Name(..)
|
, Name(..)
|
||||||
|
@ -87,7 +88,7 @@ boolean =
|
||||||
--
|
--
|
||||||
-- Number
|
-- Number
|
||||||
--
|
--
|
||||||
newtype Number = Number Float deriving Show
|
newtype Number = Number Double deriving Show
|
||||||
|
|
||||||
instance Output Number where
|
instance Output Number where
|
||||||
output (Number f) = Output.string $
|
output (Number f) = Output.string $
|
||||||
|
|
Loading…
Reference in New Issue