在PDF格式中,数字1.e10应该写为10000000000。

时间:2019-06-26 10:56:01

标签: pdf biginteger specifications

查看PDF Referene ver 1.7关于类型数字的对象的方式 是根据通知的有效语法编写的。

  

注意:PDF不支持带以下数字的PostScript语法   非十进制半径(例如16#FFFE)或指数格式(例如   为6.02E23)。

但是它也没有规定数字的最大范围。这似乎表明写是正确的

1.00E1010000000000

1.00E-500.00000000000000000000000000000000000000000000000001

因此,这个问题涉及两个方面:

  • a)表示法是否正确(如示例中所提供?
  • b)pdf格式是否期望实现使用(或至少回退) 一些bigint / bigfloat处理),因为它似乎没有提供 数字的任何范围?

1 个答案:

答案 0 :(得分:1)

首先,有关PDF的规范性信息,请参考相应的ISO标准,尤其是ISO32000。是的,特别是第1部分(ISO 32000-1)是从PDF参考1.7衍生而来的,没有太多更改,但也不是没有变化。 (好吧,在某些情况下,还必须参考旧的PDF参考,以了解其中的一些更改。)

Adob​​e已在其网站https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf

上发布了其副本(删除了页眉中的“ ISO”)。

现在您的问题:

根据ISO 32000,第1部分和第2部分:

  

整数应写为一个或多个十进制数字,并可选地在其后加上一个符号。 [...]

     

实数值应写为一个或多个十进制数字,并带有可选的符号以及前导,尾随或嵌入的PERIOD(2Eh)(小数点)。

(第7.3.3节“数字对象”)

因此,关于您的问题a)

  

表示法是否正确(如示例中所提供?

是的,10000000000是一个整数值的数字对象,0.00000000000000000000000000000000000000000000000001是一个实数值的数字对象。

关于您的问题b)

  

pdf格式是否期望实现使用数字(或至少回落到一些bigint / bigfloat处理方式),因为它似乎没有提供数字范围?

否,在上面引用的同一部分中,您还会找到

  

数字的范围和精度可能受运行符合要求的阅读器的计算机中使用的内部表示形式所限制;附件C给出了典型实现的这些限制。

和附件C至少建议以下限制:

  

整数   2,147,483,647   最大整数值;等于2 31 − 1。

     

整数   -2,147,483,648   最小整数值;等于−2 31

     

真实   ±3.403×10 38   最大和最小实际值(大约)。

     

真实   ±1.175×10 -38   最接近0(近似值)的非零实数值。小于这些值的值将自动转换为0。

     

真实   5   精度的小数位数(近似值)。

(ISO 32000-1)

  

整数   整数值(例如对象编号)通常可以用32位表示。

     

实数   现代计算机通常使用IEEE 754浮点算术标准(IEEE 754)单精度或双精度来表示和处理实数。

(ISO 32000-2)