2014-12-05 156 views
1

我使用下面的代碼在我的PDF中繪製垂直線。繪製的垂直線不出現

logger.info("x1, y1: " + x + ", " + y1); 
    logger.info("x2, y2: " + x + ", " + y2); 

    dcUnder.saveState(); 
    dcUnder.setColorStroke(BaseColor.RED); 
    dcUnder.setLineWidth(2f); 
    dcUnder.moveText(x, y1); 
    dcUnder.lineTo(x, y2); 
    dcUnder.closePath(); 
    dcUnder.stroke(); 
    dcUnder.restoreState(); 

    logger.info("Line Drawn"); 

代碼上方和下方的記錄器正在打印,因此我知道代碼正在執行。但是頁面上沒有行。我試圖複製iText in Action書中的例子,但是我沒有看到任何重大差異。

我在前面的代碼中使用LineSeparator與dcUnder PdfContentByte相同,並且工作正常。我不明白爲什麼這個代碼手動繪製時失敗。沒有錯誤或例外,只有頁面上沒有行。我假設我錯過了一些簡單的事情,但我需要幫助找到它。

謝謝!

注:設置線寬爲2,我使用,使線明顯,直到我弄清楚,爲什麼它不會出現顏色爲紅色只是調試設置。

+2

嘗試使用moveTo而不是moveText。 – mkl 2014-12-05 05:06:34

+0

@mkl看起來我需要一套全新的眼睛。我很驚訝,我錯過了。我剛剛開始工作,並能夠嘗試。謝謝!! – gridDragon 2014-12-05 15:06:37

回答

2

如果更換moveText通過moveTo,你會看到你的線(給出合理的座標...),例如

float x = 100; 
    float y1 = 50; 
    float y2 = 550; 

    PdfContentByte dcUnder = writer.getDirectContentUnder(); 

    dcUnder.saveState(); 
    dcUnder.setColorStroke(BaseColor.RED); 
    dcUnder.setLineWidth(2f); 
    dcUnder.moveTo(x, y1); 
    dcUnder.lineTo(x, y2); 
    dcUnder.closePath(); 
    dcUnder.stroke(); 
    dcUnder.restoreState(); 

創建

enter image description here

這相當於iText的樣品中的動作,第2版。