2015-06-30 130 views
1

我一直在嘗試使用iText API和較舊的Lowagie版本向現有PDF添加註釋。但是,我需要API的替代方案,因爲它似乎無法完成我們的要求中所要求的內容。使用JAVA的PDF註釋

要求是把一個註釋到現有的PDF並具有以下細節:

  • 類型:明文
  • 當前位置:X爲0mm & & Y =0毫米
  • 字體:Arial字體
  • 文字顏色:白色
  • 文字內容:「一些文字」

使用iText,我可以放入一個註釋,但我需要以像素爲單位進行近似處理,在我的A4大小頁面中,我應該放置它。最接近的近似值是使用

PdfReader reader = new PdfReader(headerFilePath.concat(xmlFileName)); 
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(headerFilePath.concat(xmlFileNameNew))); 
    PdfAnnotation annotation = PdfAnnotation.createText(stamper.getWriter(), new Rectangle(0, 842, 5, 842), "some text", "some text", true, null); 
    annotation.setColor(Color.WHITE); 
    stamper.addAnnotation(annotation, 1); 
    reader.close(); 
    stamper.close(); 

這段代碼將它放在左上角,但我不確定它是否爲0mm,0mm。它也是黑色的,我不能指定字體。

任何有關此事的幫助,我們將不勝感激。謝謝!

回答

0

你可以試試富文本annotions描述here

annotation.put(PdfName.RC, new PdfString("<font size=\"whatever\">" + 
             some text+ 
             "</font>")); 
myStamper.setGenerateAppearances(false); 

不過,我懷疑這是你所需要的。如果你添加一個外觀,那麼你會在左上角看到一個矩形圖標。如果您隨後將鼠標懸停在上面,則可以彈出窗體的形式閱讀註釋。即使您獲得註釋文本的白色字體顏色,您也無法隱藏註釋本身的矩形圖標...

您希望有一種白色字體顏色,指示您想「傳送」某些隱藏(白色背景上的白色)信息。也許在這種情況下,你可以使用以下機制(這通常是用於添加水印等):

String text; 
int pageNumber 

PdfContentByte overContent = stamper.getOverContent(pageNumber); 

overContent.beginText(); 
overContent.setFontAndSize(yourFont, yourFontSize); 
//overContent.setGrayFill(...); 
overContent.showTextAligned(PdfContentByte.ALIGN_CENTER, yourText + " Center", 150, 760, 0); 
overContent.endText(); 

更新:要設置註釋invisble添加到您的代碼:

annotation.setColor(Color.WHITE); 
//set visibility to 0 (invisble). All values between 0...1 are possible 
//so 0.5 means 50% opacity 
annotation.put(PdfName.CA, new PdfNumber(0)); 
+0

是啊。該公司堅持使用Arial作爲字體,因爲它是系統認可的。你會知道如何放置隱形註釋嗎?我已經嘗試使用setHidden和setInvisible作爲PDFBoxBox,但它不起作用。謝謝! –

+0

我忘了在我的問題上標記你。抱歉。 –

+0

看我的更新... – Lonzak