2012-01-08 33 views
2

我正在嘗試修改使用iText創建的多頁PDF文檔的單個頁面的背景顏色。Itext矩形不會滲到頁面的邊緣

最簡單的做法似乎是通過使用PdfContentByte實用程序創建一個具有指定背景顏色的整個頁面大小的Rectangle,並將其應用於所討論的頁面。 (已經使用Document API進行了探索,這看起來不是最好的選擇,因爲它將樣式應用於文檔中的所有頁面,我不想這樣做)。

運行時,仔細檢查時,我可以看到沿着上,下和右邊緣有一個像素,它們仍然是白色,其餘部分是正確的顏色。我玩過矩形以確保沒有創建邊距,但無濟於事。找到我在下面使用的代碼。

Rectangle r = new Rectangle(0, 0, helper.getPageWidth(), helper.getPageHeight()); 
r.setBackgroundColor(Constants.GREEN); 

PdfContentByte cb = helper.getWriter().getDirectContent(); 
cb.rectangle(r); 
cb.setColorFill(Constants.GREEN); 
cb.setColorStroke(Constants.GREEN); 
cb.fillStroke(); 

看來無論我嘗試,在頁面的這3個面,我不能擺脫單一白色像素行的。有沒有人有任何想法如何流血到iText頁面的非常優勢?

回答

0

第一:請提及您正在使用的itext版本。我目前使用您的代碼片段並做了一些更改,並且效果良好。可以使用完整的代碼片段來幫助我瞭解代碼中的錯誤。

(主要嫌疑人到我這條線Rectangle r = new Rectangle(0,0,helper.getPageWidth(),helper.getPageHeight())

我已經附加輸出和我使用的代碼。

package com.pra.itext; 

    import com.lowagie.text.DocumentException; 
    import com.lowagie.text.Rectangle; 
    import com.lowagie.text.pdf.PdfContentByte; 
    import com.lowagie.text.pdf.PdfReader; 
    import com.lowagie.text.pdf.PdfStamper; 
    import java.awt.Color; 
    import java.io.File; 
    import java.io.FileOutputStream; 
    import java.io.IOException; 

    /** 
    * 
    * @author Prajit 
    */ 
public class ItextRect { 
    public static void main(String[] args) { 
     PdfReader rdrPdf = null; 
     PdfStamper stmprPdf = null; 
     try { 
      rdrPdf = new PdfReader("E:/Head.First.Servlets&Jsp.pdf"); 
      stmprPdf = new PdfStamper(rdrPdf, new FileOutputStream(new File("D:/Example.pdf"))); 
      for (int pgCnt = 1; pgCnt <= rdrPdf.getNumberOfPages(); pgCnt++) { 
       if (pgCnt == 1) { 
        PdfContentByte pdfCntntByt = stmprPdf.getUnderContent(pgCnt); 
        Rectangle r = new Rectangle(rdrPdf.getPageSize(pgCnt)); 
        r.setBackgroundColor(Color.red); 
        pdfCntntByt.rectangle(r); 
        pdfCntntByt.setColorFill(Color.red); 
pdfCntntByt.setColorStroke(Color.red); 
        pdfCntntByt.fillStroke(); 
       } 
      } 
      stmprPdf.close(); 
      rdrPdf.close(); 
     } catch (DocumentException de) { 
      System.err.println(de.getMessage()); 
     } catch (IOException ioe) { 
      System.err.println(ioe.getMessage()); 
     } 
    } 
} 
+0

請不要使用空格縮進普通文本;它使它顯示爲代碼。 – 2013-02-07 23:37:25