首页 > 其他分享 >手把手教你从头编写 PDF – 第 1 部分:PDF 对象和数据类型

手把手教你从头编写 PDF – 第 1 部分:PDF 对象和数据类型

时间:2024-11-21 20:14:21浏览次数:3  
标签:obj 对象 手把手 数据类型 41 名称 PDF 字典

本系列文章旨在带您实际了解 PDF 文档的工作原理。

我将首先简要介绍编写 PDF 所需的元素。本系列最终将带您使用文本编辑器和十六进制编辑器来创建自己的低级 Hello World PDF 文件。

在我开始使用 PDF 文件之前,我以为它们只是某种花哨的文本文档,其中嵌入了用于呈现图形的脚本。确实,PDF 看起来像是这样,但我觉得它更像一种编程语言,其中 PDF 文件是代码,而像 Adob e Reader 或我们自己的产品 JPedal 中的 PDF Viewer 这样的阅读器则是将代码转换为可阅读文档的翻译器。

PDF 文件主要由组织成树结构的对象组成,树的每个节点都是一个对象。每个对象都能表示 PDF 阅读器可以理解的八种数据类型之一:字符串、数组、数字(整数和实数)、布尔值(真/假)、名称对象(见下文)、关联数组(称为字典)、流(由字典和大量二进制内容组成)和空对象。如果您在文本编辑器中打开 PDF 文件,您会注意到很多对象。

以下是一个例子:

41 0 obj<</Type/Pages/Kids[34 0 R 43 0 R 52 0 R]/Count 3>>

endobj

这是一个名为 41 的对象,第一个数字是名称。第二个是修订号(这个数字似乎从未被使用过,因为它似乎总是零)。obj 部分表示它是一个对象。如果您按照文本操作,最终会得到一个 endobj,表明中间的所有内容都属于对象 41。尖括号(<< >>)表示对象 41 属于字典类型。字典是 PDF 文件中经常使用的数据类型,包含描述文档某些方面的键和值对列表。值部分可以是八种类型的对象中的任何一种,包括其他字典。

我使用的示例包含 3 个键:/Type、/Kids 和 /Count。这些是名称对象,您可以分辨出来,因为它们以 / 开头。名称对象基本上是一个对 PDF 阅读器有意义的名称。字典中的键始终是名称对象。此字典通过其 /Type 键 (/Type/Pages) 表示它包含有关页面的信息。以下是关于一些子节点的名称/数组对。这由名称对象 Kids、/Kids[34 0 R 43 0 R 52 0 R] 表示。

数组括在方括号中。数组内部可能看起来很熟悉,它们是指向其他对象的指针,而不是 obj 字符,而是 R。例如,如果我想创建指向对象 41 0 obj 的链接,我会说 41 0 R。最后一个元素有一个名为 /Count 的键,它映射到数字对象 3。因此,对象 41 表示该文档有 3 页,您可以在对象 34、43 和 52 中找到有关每页的信息。

下一篇:IDRSolutions:手把手教你从头编写 PDF – 第 2 部分:PDF 文件的结构

 

 

标签:obj,对象,手把手,数据类型,41,名称,PDF,字典
From: https://blog.csdn.net/2401_87189539/article/details/143803007

相关文章

  • C++系统教程007-数据类型06(cin输入语句)
    练习:1.控制输出精确度本实例中,定义一个整型变量并赋值,定义一个双精度变量并赋值,利用cout输出这两个不同精度的格式。//控制精度#include<iostream>usingnamespacestd;intmain(){ intx=123; doubley=3.1415; cout<<"x="; cout.width(10);//设置输出域宽为10 ......
  • 中国大模型落地应用案例集(2023),119页pdf
    来源:中国信通院华东分院近日,中国信通院联合上海人工智能实验室成立的大模型测试验证与协同创新中心牵头,首次面向全国范围征集全行业优秀应用实践,并形成《2023大模型落地应用案例集》(以下简称“《案例集》”)。前排提示,文末有大模型AGI-CSDN独家资料包哦!作为首部聚焦落地应......
  • 【python系列】python数据类型之列表
    一、什么是列表在Python中,列表(List)是一种用于存储有序数据的容器。它的特性包括:有序性:列表中的元素有固定的顺序。可变性:可以修改列表中的元素。支持任意数据类型:列表中的元素可以是数字、字符串、布尔值,甚至是其他列表。通过索引访问:列表使用从0开始的索引定位元素......
  • 写一个判断数据类型的方法
    /***判断数据类型*@param{*}data需要判断类型的变量*@returns{string}返回数据类型字符串*/functiongetType(data){consttype=Object.prototype.toString.call(data);switch(type){case'[objectString]':return'String';case&......
  • 打印和PDF管理软件:BatchOutput XLS macOS高效工作软件激活安装包
    BatchOutputXLS是一款专为Mac平台设计的打印和PDF管理软件。它支持批量处理XLS(Excel)文件,具备强大的批量打印功能,用户可以将多个XLS文档添加到打印列表中,一次性完成打印任务。此外,该软件还能将XLS文档转换为PDF格式,便于文件的保存和分享。BatchOutputXLS以其高效、稳定、易用的......
  • 搭建个人知识库 | 手把手教你本地部署大模型
    一、引言今天给大家分享的是手把手教你如何部署本地大模型以及搭建个人知识库读完本文,你会学习到如何使用Ollama一键部署本地大模型通过搭建本地的聊天工具,了解ChatGPT的信息是如何流转的RAG的概念以及所用到的一些核心技术如何通过AnythingLLM这款软件搭建完全本......
  • 如何搭建一个本地化知识库问答系统,支持 PDF、Word 等自由检索,并能够实现实时对话查询?
    背景搭建一个本地知识库有许多好处。首先,它可以帮助我们集中存储和管理信息,使得查找和访问知识变得更加高效。其次,本地知识库可以提高工作效率,因为我们不必每次都依赖于互联网搜索。此外,它还有助于保护隐私,因为我们可以在本地存储敏感信息而不必上传到外部服务器。‍项目......
  • 游戏/软件提示msvcp140_1.dll错误无法继续运行怎么办?手把手修复msvcp140_1.dll错误
    遇到msvcp140_1.dll错误通常意味着你的系统缺少了运行某些应用程序所需的MicrosoftVisualC++Redistributable库文件。这个DLL文件是MicrosoftVisualC++的一部分,许多应用程序和游戏依赖于这些库来正确运行。以下是一些步骤,可以帮助你解决这个问题:重新安装Micros......
  • (四)python基本数据类型
    python基本数据类型数据类型数值数据类型布尔值数据类型文字序列类型bytes数据类型bytearray数据类型序列类型映射类型集合类型强制数据类型转换数值运算常用函数字符编码数据类型数值数据类型整数型intpython3中已经去掉整数存储空间限制浮点型float若是整数......
  • PDF24 Creator(PDF工具箱) v11.21.0 绿色版
    PDF24Creator(PDF工具箱)v11.21.0绿色版 PDF24Creator是一款简单易用的多功能PDF创建工具。软件基于PDF打印机的原理而制作,用户使用这款软件可以帮助你轻松创建PDF文件。软件除了基本的PDF创建功能外,还有一个PDF转换功能,可以将其他格式的文件转换为磁盘PDF......