2012-01-08 3 views
2

Я пытаюсь изменить фоновый цвет одной страницы многостраничного документа PDF, созданного с помощью iText.Прямой прямоугольник Itext не истекает к краю страницы

Самый простой способ сделать это - создать прямоугольник всего размера страницы с указанным цветом фона и применить его к рассматриваемой странице с помощью утилиты PdfContentByte. (изучив с помощью 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

Во-первых: Пожалуйста, укажите версию, которую вы используете. В настоящее время вы используете фрагмент кода и внесли некоторые изменения, и он хорошо работает. Возможно, полный фрагмент кода поможет мне узнать, что не так в коде.

(главный подозреваемый мне эта линия 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

Пожалуйста, не используйте пробелы для нормального текста с отступлением; он заставляет его отображаться как код. –

Смежные вопросы