第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用pdfbox在pdf最后一頁的左下角位置應(yīng)用數(shù)字簽名圖像?

如何使用pdfbox在pdf最后一頁的左下角位置應(yīng)用數(shù)字簽名圖像?

動漫人物 2023-11-01 22:46:59
標(biāo)題說明了一切,我能夠使用 pdfbox 版本 2.0.8 對 pdf 進(jìn)行可視化簽名。目前我必須在代碼中對圖像的起始協(xié)調(diào)進(jìn)行硬編碼。但隨著 PDF 的變化,圖像的位置總是需要相應(yīng)地改變。我想在 pdf 末尾的左角應(yīng)用簽名圖像。我如何在代碼中獲得該位置?這是我的代碼,使用 _x 和 _y 進(jìn)行硬編碼坐標(biāo)。在代碼中,'signing'是可見的簽名對象,'page'是pdf的最后一頁,'args[2]'是要簽名的pdf文件:int _x = 30;int _y = 420;signing.setVisibleSignDesigner(args[2], _x, _y, -50, imageStream, page);imageStream.close();signing.setExternalSigning(externalSig);signing.signPDF(documentFile, signedDocumentFile, tsaClient);removeFile(imageResult);我想要的簽名示例:編輯:添加圖像以澄清我希望簽名字段位于文檔的末尾,而不是最后一頁的末尾。文檔可以在最后一頁的頂部完成,因此字段也應(yīng)該位于文本后面而不是頁面的末尾。抱歉,我之前的問題不清楚。
查看完整描述

1 回答

?
森林海

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個贊

根據(jù)問題評論中的說明,您嘗試將簽名放置在最后一個文檔頁面現(xiàn)有內(nèi)容的邊界框下方。


但正如您在對此評論的回應(yīng)中發(fā)現(xiàn)的那樣,您不能簡單地使用其結(jié)果作為輸入,因?yàn)?code>CreateVisibleSignature.setVisibleSignDesigner假定了不同的坐標(biāo)系:

  • 使用相關(guān)頁面的 PDF 默認(rèn)用戶空間坐標(biāo):它們由相關(guān)頁面的MediaBoxBoundingBoxFinder給出,并且y坐標(biāo)向上增加。通常原點(diǎn)位于頁面的左下角。

  • CreateVisibleSignature另一方面,使用單位長度相同但原點(diǎn)位于頁面左上角且 y坐標(biāo)向下增加的坐標(biāo)系。

因此,必須轉(zhuǎn)換坐標(biāo),例如:

File documentFile = new File(SOURCE);

File signedDocumentFile = new File(RESULT);


Rectangle2D boundingBox;

PDRectangle mediaBox;

try (? ?PDDocument document = PDDocument.load(documentFile) ) {

? ? PDPage pdPage = document.getPage(0);

? ? BoundingBoxFinder boundingBoxFinder = new BoundingBoxFinder(pdPage);

? ? boundingBoxFinder.processPage(pdPage);

? ? boundingBox = boundingBoxFinder.getBoundingBox();

? ? mediaBox = pdPage.getMediaBox();

}


CreateVisibleSignature signing = new CreateVisibleSignature(ks, PASSWORD.clone());

try (? ?InputStream imageStream = IMAGE_STREAM) {

? ? signing.setVisibleSignDesigner(documentFile.getPath(), (int)boundingBox.getX(), (int)(mediaBox.getUpperRightY() - boundingBox.getY()), -50, imageStream, 1);

}

signing.setVisibleSignatureProperties("name", "location", "Security", 0, 1, true);

signing.setExternalSigning(false);

signing.signPDF(documentFile, signedDocumentFile, null);

評論

將上面的代碼應(yīng)用到該文件,人們會發(fā)現(xiàn)最后可見的文本行和圖像之間有一個小間隙。此間隙是由“請訪問我們的網(wǎng)站”行下方的一行中的一些空格字符引起的。它BoundingBoxFinder不會檢查繪圖指令最終是否會產(chǎn)生可見的結(jié)果,它總是將有問題的區(qū)域添加到邊界框。

一般來說,您可能需要從上面代碼計算出的y坐標(biāo)中減去一點(diǎn)點(diǎn),以在以前的頁面內(nèi)容和新的簽名小部件之間創(chuàng)建視覺間隙。

查看源代碼CreateVisibleSignature會發(fā)現(xiàn),實(shí)際上y坐標(biāo)是通過從MediaBox 的高度減去它們來轉(zhuǎn)換的,而不是從其上邊框值中減去它們。最終這些坐標(biāo)被復(fù)制到目標(biāo)文檔中。因此,可能需要在上面的代碼中使用而不是。mediaBox.getHeight()mediaBox.getUpperRightY()

查看源代碼后CreateVisibleSignature2發(fā)現(xiàn),實(shí)際上使用了CropBox而不是MediaBox。如果您的代碼源自該示例,您可能必須在上面的代碼中替換pdPage.getMediaBox()為。pdPage.getCropBox()

一般來說,任意使用不同的坐標(biāo)系是使用 PDFBox 時相當(dāng)少的令人煩惱的來源之一。


查看完整回答
反對 回復(fù) 2023-11-01
  • 1 回答
  • 0 關(guān)注
  • 309 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號