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

PDFBox文本矩阵缩放行为

晁国发
2023-03-14

当我试图在页面的内容流中添加文本时,我很难理解PDFBox的行为。我使用的是一个样本扫描PDF,它只是一个叠加在页面上的光栅图像。我的PDF内部工作知识有些基础,所以我可能走错了方向。

http://solutions.weblite.ca/pdfocrx/scansmpl.pdf

我将PDFBox 2.0.11与sbt一起使用:“org.apache.PDFBox”%“PDFBox”%“2.0.11”

我的第一步是创建一个内容流,并在PDF上写“你好世界”,我通过以下方式完成了这一点:

// val pdf: PDDocument
val page = pdf.getPages(0)
val contentStream = new PDPageContentStream(pdf, page, false, true)
contentStream.beginText()
contentStream.newLineAtOffset(0, 0)
contentStream.setFont(PDType1Font.COURIER, 12)
contentStream.showText("Hello, world!")
contentStream.endText()
contentStream.close()

这是可行的,文本显示在左下角,这是我预期的位置。但它当然会覆盖光栅图像,这不是我想要的。因此,我将PDPageContentStream构造函数更改为(pdf,page,true,true),使其附加到内容流中。

现在我得到了我不理解的奇怪行为。文本显示得很大。如此之大,以至于我只能看到H的底部角落,因为它至少比页面本身大10倍。我想这意味着正在发生一些悬空的矩阵转换?我不确定我是否完全理解转换操作在PDF中是如何工作的。PDFBox似乎暗示调用setTextMatrix将用新的矩阵替换现有的矩阵,而不是相对于现有的文本矩阵。我可以用这个来使文本可见(并且接近正常大小):

val affine = new AffineTransform()
affine.setToIdentity()
affine.scale(0.002, 0.002)
// code
contentStream.setTextMatrix(new Matrix(affine))

这是我通过反复试验才发现的。除了页面范围的. getMatrix()之外,我看不出要获取当前的转换矩阵状态,但是无论我是追加还是覆盖,它都会返回标识,所以我不认为是这样。此外,如果我应用另一个文本矩阵,其调用与前一个块中的最后一行完全相同,它似乎会相对于前一个缩放缩放它,所以我最终会得到第二个缩放得太小而看不到的文本块。

我怎样才能得到当前的变换矩阵,这样我就可以反转它以达到实际需要的缩放?

谢谢!

共有1个答案

巴博耘
2023-03-14

似乎这就是问题所在。我之前没有看到resetContext的第5个参数的构造函数。不过,我仍然不确定如果出于某种原因需要做一些与当前上下文相关的事情,您将如何获得当前上下文。在我的例子中,添加第5个参数解决了问题。

PDFBox:PDPageContentStream的附加模式行为不正常

 类似资料:
  • 问题内容: 我正在研究信号分类问题,想先缩放数据集矩阵,但是我的数据是3D格式(批,长度,通道)。 我尝试使用Scikit-learn Standard Scaler: 但是我收到了以下错误消息: 找到具有暗3的数组。StandardScaler预期<= 2 我认为一种解决方案是将每个通道的矩阵分成多个2D矩阵,分别缩放比例,然后放回3D格式,但我想知道是否有更好的解决方案。 非常感谢你。 问题答

  • 主要内容:对称矩阵,上(下)三角矩阵,稀疏矩阵,矩阵压缩存储的 3 种方式数据结构中,提供针对某些特殊矩阵的压缩存储结构。 这里所说的特殊矩阵,主要分为以下两类: 含有大量相同数据元素的矩阵,比如对称矩阵; 含有大量 0 元素的矩阵,比如稀疏矩阵、上(下)三角矩阵; 针对以上两类矩阵,数据结构的压缩存储思想是:矩阵中的相同数据元素(包括元素 0)只存储一个。 对称矩阵 图 1 对称矩阵示意图 图 1 的矩阵中,数据元素沿主对角线对应相等,这类矩阵称为 对称矩阵。 矩阵中

  • 我正在尝试缩放pdf文件,就像复印机中的缩放功能一样,它可以按百分比缩放文档(如下所示:https://inspectapedia.com/graphics/Safari_Page_Setup.jpg),我正在使用pdfbox管理我的pdf文件。我尝试过这个代码,但为什么它不起作用?代码中没有错误。 有人知道为什么该代码不起作用吗? 编辑 我需要它在API 16上工作

  • 着色器语言中通过关键字mat2、mat3、mat4分别声明一个2x2矩阵、3x3矩阵、4x4矩阵,通过内置函数mat2()、mat3()、mat4()分别创建一个2x2矩阵、3x3矩阵、4x4矩阵。 关键字 数据类型 mat2 2x2矩阵,4个元素 mat3 3x3矩阵,9个元素 mat4 4x4矩阵,16个元素 声明变量 关键子mat4声明一个4x4矩阵 mat4 matrix4; 构造函数赋

  • 然后,我根据页面大小与图像大小计算缩放的维度,返回:java.awt.dimension[width=562,height=792]我使用下面的代码来计算缩放的维度: 为了实际执行图像缩放,我使用image Scalr API: 我的问题是我做错了什么?当缩放到较小的尺寸时,大的图像不应该被模糊。这与PDF页面的分辨率/大小有关吗?

  • 我在查看一些代码时发现了以下内容: 有什么区别呢?顺便说一句:我对矩阵很陌生