簡體   English   中英

PDFBox文本矩陣縮放行為

[英]PDFBox text matrix scaling behavior

嘗試在頁面的內容流中添加文本時,我無法理解PDFBox的行為。 我正在使用樣本掃描的PDF,這只是覆蓋在頁面上的光柵圖像。 我對PDF內部構件的工作知識有些基礎,因此我可能走錯了路。

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

我正在使用sbt使用PDFBox 2.0.11: "org.apache.pdfbox" % "pdfbox" % "2.0.11"

我的第一步是創建一個內容流,並在PDF上寫“ hello world”,我通過以下操作完成了該操作:

// 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()之外的當前轉換矩陣狀態,但是無論我要追加還是覆蓋,這似乎都返回了標識,所以我認為不是那樣。 另外,如果我使用另一個文本矩陣來調用與上一個塊中的最后一行完全相同的文本矩陣,則它似乎會相對於前一個尺度縮放它,因此我最終得到了另一個文本塊,該文本塊的大小太小而看不到。

如何獲得當前的變換矩陣,以便可以將其求逆以達到實際的期望縮放比例?

謝謝!

看來這就是問題所在。 我之前沒有看到帶有resetContext的第5個參數的構造函數。 不過,我仍然不確定如果出於某種原因需要執行一些與該上下文相關的操作,那么如何獲取當前上下文。 以我為例,添加第5個參數可以解決問題。

PDFBox:PDPageContentStream的附加模式行為異常

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM