1 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個贊
iText 7 以每點(diǎn)一個圖像像素的比例添加背景圖像,請參閱AbstractRenderer.drawBackground:
PdfXObject backgroundXObject = backgroundImage.getImage();
...
Rectangle imageRectangle = new Rectangle(backgroundArea.getX(), backgroundArea.getTop() - backgroundXObject.getHeight(),
backgroundXObject.getWidth(), backgroundXObject.getHeight());
...
drawContext.getCanvas().addXObject(backgroundXObject, imageRectangle);
正如您在代碼中看到的,圖像的寬度和高度值(包含位圖圖像的水平和垂直像素?cái)?shù))原樣用作圖像最終縮放到的矩形的寬度和高度。由于畫布繪圖操作中使用的單位是默認(rèn)為1 / 72英寸的用戶空間單位,因此圖像以每英寸 72 個圖像像素或每磅 1 個圖像像素顯示。
默認(rèn)情況下,Web 瀏覽器通常以每像素 1 個圖像像素或每英寸 96 個圖像像素顯示圖像。
您的示例網(wǎng)頁主要使用 px = 1 / 96 in 中給出的絕對位置進(jìn)行布局。因此,網(wǎng)絡(luò)瀏覽器或 iText 繪制圖像的不同比例會導(dǎo)致不同的外觀,尤其是外觀不佳在手頭的案例中的 iText 中:
imageRectangle您可以通過替換上面計(jì)算的中心代碼行,使 iText 繪制背景圖像更像瀏覽器
Rectangle imageRectangle = new Rectangle(backgroundArea.getX(), backgroundArea.getTop() - backgroundXObject.getHeight(),
backgroundXObject.getWidth() * .75f, backgroundXObject.getHeight() * .75f);
在 iText 中,按照上面的建議進(jìn)行了修補(bǔ):
實(shí)際上,此代碼位置似乎是開始添加background-size
當(dāng)前此處不支持的支持的合適位置。
當(dāng)心:我對 iText 7 HTML 到 PDF 的轉(zhuǎn)換代碼不是很深入,所以我無法確定這個補(bǔ)丁是否有不良副作用。
這是一個錯誤嗎?
嚴(yán)格來說它不是,至少就我瀏覽 CSS 規(guī)范而言:
HTML 頁面未background-size
在此處設(shè)置。因此,應(yīng)使用背景圖像的固有尺寸。不幸的是,CSS 并沒有定義通常如何找到內(nèi)在維度。因此,網(wǎng)頁基本上將背景圖像的比例留給了 HTML 客戶端的心血來潮......
但是,如果 iText 7 HTML to PDF 旨在生成與瀏覽器輸出一致的結(jié)果,那么它最好在此處更改其默認(rèn)比例以匹配那些瀏覽器的比例。
我剛剛意識到AbstractRenderer
我修補(bǔ)的不在 html2pdf 項(xiàng)目中,而是在核心 iText 7 布局項(xiàng)目中。
因此,在這里更改大小可能不是一個好主意,至少如果一個人不僅將 iText 7 用于 html2pdf,而且還直接將其使用。
盡管如此,該代碼位置適合引入對某些背景大小屬性的支持。html2pdf 然后可以擴(kuò)展BackgroundApplierUtil
以便它始終將新的核心屬性設(shè)置為適合創(chuàng)建與瀏覽器顯示內(nèi)容一致的外觀的值。
添加回答
舉報