当前位置: 首页 > 知识库问答 >
问题:

java - 这个包下面有这么多类为啥这样设计呢?

黄磊
2023-07-20

像pdftable和pdfCell,都是操作table的为啥没有单独在pdf packege下面开一个table的包分类呢。

这样大量的类在同一个包下都很难找哇
image.pngimage.png

共有1个答案

束俊材
2023-07-20

这不是设计的问题,而是 java 语言规范所要求的,类必须在包 package

如果题主的疑惑点是为什么 com.itextpdf.text.pdf 包下面有这么多类,这个是由功能决定, itextpdf 提供了对 pdf 的深度操作,对 pdf 支持的操作越多,必然导致类越多啊,难道全挤在一个类里实现么

换句话说,它们都已经是难以再拆分的 独立 功能了,这样的功能就是有这么多,比如:

  • PdfWriter:用于将内容写入到PDF文件中,可以创建新文件或向已存在的文件添加内容。
  • PdfReader:用于读取和解析现有的PDF文件,可以提取文本、图像等元素,并对其进行处理。
  • PdfPTable:用于创建和管理表格结构,在PDF文档中添加复杂的表格布局。
  • PdfPCell:代表单元格对象,可以设置单元格样式、边框、背景色等属性。
  • Paragraph:代表一个段落对象,在PDF文档中添加文字内容,支持多种排版样式。
  • Phrase:代表一个短语对象,类似于Paragraph但更简单。通常作为段落中的一部分使用。
  • PdfContentByte:提供绘制图形和图像操作的方法,如绘制线条、填充颜色、插入图像等。
  • PdfAction:用于创建PDF中的交互动作,如链接、书签跳转、页面跳转等。
  • PdfAnnotation:代表PDF中的注释对象,可以添加各种注释类型,如文本框、批注、高亮等。
  • Chunk:代表最小单位的文本块,可设置字体、颜色、大小等属性,并在段落或短语内使用。
  • Font:用于定义字体样式和属性,如字体类型(宋体、微软雅黑)、字号、加粗等。
  • BaseFont:处理基础字体信息,支持从系统字体或外部TTF/OTF文件加载自定义字体。
  • ... ...

它们都已经是具体的实现了,不能 再拆分或融合

这不是通过设计能避免的,而是由功能或者说需求的 最大公约数 决定的,如果题主对 iText 的源码设计感兴趣,可以参考以下站点

参考
iText官方文档
iText官方博客
iText白皮书
iText网络研讨会
 类似资料:
  • 我们知道Java 8引入了一个新的流API和Java。util。流动收集器是定义如何聚合/收集数据流的接口。 但是,收集器接口的设计如下: 为什么它不是这样设计的? 后者更容易实现。把它设计成前者的考虑是什么?

  • 我正在看宣传单。 在setTimeout中调用

  • 详细信息:对于我开发的很多程序,我使用此代码(或一些轻微的变体)每隔一段时间“勾选”一个方法,设置为可变tps(如果设置为32,则每秒调用该方法滴答32次)。它非常重要,所以我不能从我的代码中删除它,因为动画和其他各种部分会损坏。 不幸的是,它似乎使用了大量的cpu,原因我不知道。不久前,我在考虑使用thread.sleep()来解决这个问题,但根据这篇文章;它相当不准确,这使得它不可行,因为这需

  • 我是否遗漏了包装类中的某些细节? 我有以下程序,在其中我定义了一个类,它包装并提供运算符: 我以为这会编译成同样的东西--它在做同样的计算,所有的东西都是内联的。 编辑-如果我使用而不是,它将产生相同的输出。 编辑-我发布了错误的ASM版本(而不是),因此本节没有帮助。 我在我的Mac电脑上使用Xcode的gcc,在一个64位系统上。除了for-loop的主体之外,结果是相同的。

  • 大家好,我在项目中遇到了一个大问题。我发出OkHttp请求,从服务器收到响应,一切都很完美。问题是为什么我不能显示数据,我在xml和listview中创建了一个模型项(这是必需的视图),当我访问该页面时,该页面为空。 有人能帮我解决这个问题吗? 页面代码如下:

  • 我需要帮助我的错误就像 代码: