PDF解析(未完成)

结构

xref % 交叉引用表从这里开始
0 6  % 引用表长为6,从0开始。
0000000000 65535 f  %特别目录
0000000015 00000 n  % 对象1的字节偏移量为15

0000000074 00000 n
0000000192 00000 n
0000000291 00000 n
0000000409 00000 n  % 对象5的字节偏移量为409
trailer % 预览块从这里开始
<</Root 5 0 R/Size 6>>
startxref  %交叉引用表开始关键字
459 % 交叉引用表的字节偏移量
%%EOF %文件结束标志

trailer结构

trailer
<</Size 55 %文件交叉引用表中的条目总数(通常等于文件中的对象数加1)

/Root 5 0 R %引用的对象为Type:Catalog

/Info 3 0 R % 表示文档信息,关于文档的作者、创建日期、创建软件、修改日期、生成软件和标题的元数据。应用对象如下:3 0

/ID[<C0EE61618FEFB24EBB53E1489B5B192A><6643E9C5C92D214C9BB673C98AA811E3>]

/Prev 187206>>
startxref

3 0 obj <<

/Author(LAPTOP-PROPF3AI\\lgj_h \(LAPTOP-PROPF3AI\)) %文档的作者

/CreationDate(D:20221013205153+08'00') %创建日期

/Creator(SOLIDWORKS 2020 SP5.0 \(2020296\))  %创建文档的软件

/ModDate(D:20221013205155+08'00') %文档的修改日期

/Producer(? S O L I D W O R K S   P D F  Q鷕Hz ^?/Title(?W鶲S) %指定了生成文档的软件或工具

>> endobj

文档目录(Catalog)结构

5 0 obj <<

/Metadata 2 0 R

/Outlines 39 0 R

/PageMode/UseOutlines

/Pages 1 0 R

/Type/Catalog

>> endobj

值类型
/Type*name必须是/Catalog
/Pages*间接引用字典页面树的根节点。页面树在第42页的“页面和页面树”中讨论
/PageLabelsnumber tree一个数字树,给出了该文档的页面标签。这种机制允许文档中的页面具有比1,2,3更复杂的编号….例如,书籍的前言可以编号为i,ii,iii ……,而主要内容 再次以1,2,3开始….这些页面标签显示在PDF查看器中 - 它们与打印输出无关
/Namesdictionary名字词典。它包含各种名称树,它们将名称映射到实体,以防止必须使用对象编号直接引用它们
/Destsdictionary将名称映射到目标的字典。目的地是超链接向用户发送的PDF文档中的位置的描述
/ViewerPreferencesdictionary一个查看器首选项字典,允许标志指定在屏幕上查看文档时的PDF查看器的行为,例如打开文档的页面,初始查看比例等
/PageLayoutname指定PDF查看器要使用的页面布局。值为/SinglePage,/OneColumn,/TwoColumnLeft,/TwoColumnRight,/TwoPageLeft,/TwoPageRight。(默认值:/SinglePage)。详情见ISO 32000-1:2008的表28
/PageModename指定PDF查看器要使用的页面模式。值为/UseNone,/UseOutlines,/UseThumbs,/FullScreen,/UseOC,/UseAttachments。 (默认值:/UseNone)。详情见ISO 32000-1:2008的表28
/Outlines间接引用字典大纲字典是文档大纲的根,通常称为书签
/Metadata间接引用流文档的XMP元数据 - 请参阅第93页的“XML元数据”

页面(Page)结构

<<

/Contents[11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R]/ %图形文字内容
CropBox[0.0 0.0 1190.55 841.89]/ %剪辑框的尺寸
MediaBox[0.0 0.0 1190.55 841.89]/ %媒体框的尺寸
Parent 1 0 R/ % 页面父类,用于构建页面的层次结构。
Resources<</Font<</C2_0 7 0 R/C2_1 8 0 R/C2_2 9 0 R/C2_3 10 0 R>>/  %资源引用

- Font: 指定了页面所需的字体资源。 - C2_0、C2_1、C2_2、C2_3: 这些是字体资源的名称,用于在页面中引用相应的字体。他们的引用对象分别是:7 0 R,8 0 R,9 0 R和10 0R
ProcSet[/PDF/Text/ImageC]  %指定了处理集,用于指定页面所需的处理操作

/XObject<</Im0 38 0 R>>>> % - XObject: 包含了页面中的图像,对象的引用38 0 R

/Rotate 0  %转到角度

/Type/Page %- Type: 指定了对象的类型,对象Page为页面

>>

字体(Font)结构

<<

/BaseFont/QTVTBX+HYSWLongFangSong %字体的基本名称"QTVTBX+HYSWLongFangSong"

/DescendantFonts 24 0 R %当前字体的子字体,如下

/Encoding/Identity-H  %编码方式

/Subtype/Type0 % 字体类型 Type0

/ToUnicode 25 0 R  %包含用于提取文本内容的指令的流

/Type/Font  %结构类型Font 

>>

24 0 obj <<

/BaseFont/QTVTBX+HYSWLongFangSong

/CIDSystemInfo 19 0 R %字体使用的字符编码系统

/CIDToGIDMap/Identity 

/DW 1000 %默认字宽

/FontDescriptor 22 0 R %字体描述符字典,提供字体的度量(字形宽度除外,其中包含了字体的其他属性,如字形描述、字体类型、字体文件等信息。)

/Subtype/CIDFontType2 %CID到GID的映射方式为Identity,即CID和GID的值相等

/Type/Font

/W[3[350]14[492]16[493 350]19 24 351 25 27 350 36[350]43[350]48[373]53[350]68[293]88[292]101[699]104[700]695[700]816[700]835[699]

968[700]1046[700]1067[700]1167[700]1311[700]1891[700]2399[700]2787[700]3124[700]

3149[700]3245[700]3250[700]3621[700]3666[700]3682[700]3730[700]3757[699]3774[699]

4378[700]4406[700]4536[700]4968[699]6212[699]6293[700]6311[701]6523[700]7006[700]

7199[699]7424[700]8549[699]8563[700 699]]

>> endobj

一: Text Sections

运算符BT(开始文本)和ET(结束文本)在文本部分周围形成括号。 用于在页面的内容流中显示文本的运算符可能仅出现在BT和ET之间。 但是,用于改变文本状态的操作符不受这种限制。 文本部分还可能包含其他操作员改变一般图形状态。

1. 0. 0. 1. 50. 700. cm Position at (50, 700) 
BT Begin text block
  /F0 36. Tf Select /F0 font at 36pt
  (Hello, World!) Tj Place the text string 
ET End text block

文本状态参数和修改它们的运算符总结在表6-1
参数描述操作数操作符初始值
TcCharacter spacingcharSpaceTc将字符间距设置为charSpace,以未缩放的文本空间单位表示0
TwWord spacingwordSpaceTw将单词间距设置为wordSpace,以未缩放的文本单位表示0
ThHorizontal spacingscaleTz将水平缩放设置为(scale / 100)100 (即正常间距)
TlLeadingleadingTL设置前导的文本,以未缩放的文本空间单位表示0
Tf, TfsFont, Font Sizefont, sizeTf选择尺寸大小点的字体字体没有默认值,但必须进行指定
TmodeRendering ModerenderTr将文本渲染模式设置为渲染,即整数0
TriseRiseriseTs将文本上升设置为上升,以未缩放的文本空间单位表示0

运算符总结在表6-2
操作数操作符功能
x,yTd将文本位置移动到下一行,偏移(x,y)。参数以未缩放的文本空间单位表示
x,yTD将文本位置移动到下一行,偏移(x,y)。将前导设置为-y。参数以未缩放的文本空间单位表示
-T*将文本位置移动到下一行。相当于前导Td的序列0(其中前导是当前文本的前导)
a,b,c,d,e,fTm将文本矩阵和文本行矩阵设置为[a b 0 c d 0 e f 1]。与图形矩阵运算符cm不同,矩阵替换当前矩阵,而不是与其连接
stringTj在当前位置显示字符串
string转到下一行,考虑前导和文本矩阵,并在新位置显示字符串 与使用T*后跟Tj相同
wordspace, charspace, string将字间距设置为字空间,将字符间距设置为字符间距。转到下一行,考虑前导和文本矩阵,并在新位置显示字符串。相同的序列字空间Tw charspace Tc string’
arrayTJ此运算符允许显示文本字符串,并调整各个字形位置(例如,字距调整)。该数组包含任意组合的字符串和数字。字符串条目显示为正常; 数字条目通过减去该数量(以文本空间单位的千分之一表示)水平调整文本矩阵

二:图形:图像,矢量图

表5-1列出了6组中的78个图形运算符
Group用于运算符
图形状态运算符更改图形状态(当前颜色,笔触宽度等)w J j M d ri i gs q Q cm CS cs SC SCN sc scn G g RG rg Kk
路径建设运算符构建线条,曲线和矩形m l c v y h re
路径绘画运算符笔划和填充路径,或使用它们来定义剪裁区域S s f F f* B B* b b* n W W*
其他绘画运算符着色图案和内嵌图像sh BI ID EI Do
文本运算符选择并以各种字体和方式显示文本Tc Tw Tz TL Tf Tr Ts Td TD Tm T* Tj TJ ‘ ‘’ d0 d1
标记内容和兼容性运算符用于划分流的部分MP DP BMC BDC EMC BX EX
  • 以下是PDF中w J j M d ri i gs q Q cm CS cs SC SCN sc scn G g RG rg Kk运算符及其含义:
  • - w:设置线宽(线的粗细)。
  • - J:设置线的端点样式(如平头、圆头、方头等)。
  • - j:设置线的连接样式(如斜接、圆接等)。
  • - M:将当前的绘制位置移动到指定的坐标。
  • - d:绘制一个矩形。
  • - ri:设置文字的渲染模式(如填充、描边等)。
  • - i:设置当前的图像状态(如渲染模式、颜色空间等)。
  • - gs:应用一个图形状态参数字典。
  • - q:保存当前的图形状态。
  • - Q:恢复之前保存的图形状态。
  • - cm:设置当前的变换矩阵。
  • - CS:设置颜色空间为设备无关的颜色空间。
  • - cs:设置颜色空间为设备相关的颜色空间。
  • - SC:设置非描边操作的颜色。
  • - scn:设置非描边操作的颜色及其附加参数。
  • - G:设置描边操作的灰度值。
  • - g:设置非描边操作的灰度值。
  • - RG:设置描边操作的RGB颜色值。
  • - rg:设置非描边操作的RGB颜色值。
  • - K:设置描边操作的CMYK颜色值。
  • - k:设置非描边操作的CMYK颜色值。

m l c v y h re:

  • - m:将当前的绘制位置移动到指定的坐标。
  • - l:从当前的绘制位置绘制一条直线到指定的坐标。
  • - c:绘制三次贝塞尔曲线,通过控制点来定义曲线的形状。
  • - v:绘制垂直于前一个控制点的三次贝塞尔曲线。
  • - y:绘制水平于前一个控制点的三次贝塞尔曲线。
  • - h:关闭当前的路径子路径,并将绘制位置移动到子路径的起始点。
  • - re:绘制一个矩形。

S s f F f* B B* b b* n W W*:

  • - S:设置描边操作的线条样式。
  • - s:关闭当前的路径子路径,并将绘制位置移动到子路径的起始点。
  • - f:填充当前的路径。
  • - F:填充和描边当前的路径。
  • - f*:根据奇偶规则填充当前的路径。
  • - B:填充和描边非零环绕规则的当前路径。
  • - B*:填充和描边奇偶规则的当前路径。
  • - b:关闭当前的路径子路径,并填充其内部区域。
  • - b*:关闭当前的路径子路径,并根据奇偶规则填充其内部区域。
  • - n:结束当前的路径而不进行绘制。
  • - W:设置描边操作的线条宽度。
  • - W*:设置描边操作的线条宽度,以用户坐标为单位。

sh BI ID EI Do:

  • - sh: 设置阴影效果。
  • - BI: 开始一个反色(反转)的图像。
  • - ID: 开始一个图像数据对象。
  • - EI: 结束一个图像数据对象。
  • - Do: 在图形状态中执行一个图形对象。

Tc Tw Tz TL Tf Tr Ts Td TD Tm T* Tj TJ ‘ ‘’ d0 d1:

  • - Tc:设置字符间距(Character Spacing)。
  • - Tw:设置字间距(Word Spacing)。
  • - Tz:设置字体尺寸的缩放因子(Horizontal Scaling)。
  • - TL:设置文本的领先(Leading)。
  • - Tf:设置字体和字体大小(Font)。
  • - Tr:设置文本渲染模式(Rendering Mode)。
  • - Ts:设置文本的上升(Rise)。
  • - Td:移动文本位置(Move Text Position)。
  • - TD:设置文本位置和字距(Move Text Position and Set Leading)。
  • - Tm:设置文本矩阵(Text Matrix)。
  • - T*:移动到下一行的起始点(Next Line)。
  • - Tj:显示文本(Show Text)。
  • - TJ:显示文本,支持字符间距调整(Show Text, with Adjustments)。
  • - ':移动到下一行并显示文本(Next Line Show Text)。
  • - '’:移动到下一行并显示文本,支持字符间距调整(Next Line Show Text, with Adjustments)。
  • - d0:设置水平显示文本(Horizontal Display Text)。
  • - d1:设置垂直显示文本(Vertical Display Text)。

MP DP BMC BDC EMC BX EX:

  • MP: 设置合并的路径(Merged Path)。
  • - DP: 定义一个带有默认属性的路径(Define Path with Default Attributes)。
  • - BMC: 开始一个文字块(Begin Marked Content)。
  • - BDC: 开始一个带有属性的文字块(Begin Marked Content with Property List)。
  • - EMC: 结束一个文字块(End Marked Content)。
  • - BX: 开始一个兄弟层级(Begin Compatibility Section)。
  • - EX: 结束一个兄弟层级(End Compatibility Section)。

参考文档:

第5章 - 图形 | PDF-Explained (zxyle.github.io)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值