2014-06-20 47 views
1

我曾經讀過Can I tell iText how to clip text to fit in a cellhttp://osdir.com/ml/java.lib.itext.general/2005-01/msg00112.html,我仍然感到困惑怎麼做我想做的。我想剪輯文本,但仍然有錨參考工作。在模板中放置錨點並不好(按照第二個鏈接)。下面是我使用的代碼(我的理解爲什麼它不工作,只是沒有做什麼,而不是):我怎麼能垂直夾在iText的(Java)的文本錨

public static void drawTextClipped(PdfContentByte canvas, Rectangle rect, float clipHeight, Phrase p, int horizontalAlignment) 
{ 
    PdfTemplate tmp = canvas.createTemplate(rect.getWidth(), clipHeight); 
    drawColumnText(tmp, new Rectangle(0, clipHeight - rect.getHeight(), rect.getWidth(), clipHeight), p, horizontalAlignment, false); 
    canvas.addTemplate(tmp, rect.getLeft(), rect.getTop() - clipHeight); 
} 

public static float drawColumnText(PdfContentByte parent, Rectangle rect, Phrase p, int horizontalAlignment, boolean simulate) 
{ 
    try 
    { 
     ColumnText ct = new ColumnText(parent); 
     ct.setLeading(0, 1); 
     ct.setSimpleColumn(rect); 
     ct.setText(p); 
     ct.setAlignment(horizontalAlignment); 
     ct.go(simulate); 
     return ct.getYLine(); 
    } 
    catch (DocumentException de) 
    { 
     throw new ExceptionConverter(de); 
    } 
} 

記住,這顯示是正確的,但是當短語p是一個錨,它是無法點擊的。謝謝!

回答

0

PdfTemplate類可用於創建表單XObjects。這些是可重複使用的PDF內容流。

的鏈接從來都不是內容流的一部分。鏈接是在頁面級定義的註釋。你永遠不能在Form XObject級別定義一個鏈接。對於PDF專家的觀點,認爲你的代碼可以工作是一個邏輯錯誤。

對於您的矩形是點擊,你需要添加一個方法addLinkAnnotation()。你需要通過一個PdfWriterRectangle參數這個方法,做這樣的事情:

PdfAnnotation annotation = PdfAnnotation.createLink(
    writer, rect, PdfAnnotation.HIGHLIGHT_INVERT, new PdfAction("http://itextpdf.com")); 
writer.addAnnotation(annotation); 

這將使矩形點擊。

+0

謝謝。不過,我一定會錯過一些東西,因爲我在鏈接的周圍看到一條線,即使我在rect和PdfAnnotation.HIGHLIGHT_NONE上沒有設置邊框作爲亮點。 – user3760601

+0

沒關係。對於讀這個問題的任何人,答案是[在這裏](http://stackoverflow.com/questions/14967188/itext-rectangle-cant-remove-border)。 – user3760601