Itext矩形不会渗到页面边缘

时间:2012-01-08 14:33:17

标签: java pdf itext

我正在尝试修改使用iText创建的多页PDF文档的单页背景颜色。

最简单的方法是使用指定的背景颜色创建整个页面大小的Rectangle,然后使用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();

似乎无论我尝试什么,我都无法摆脱页面这三面的单个白色像素行。有没有人知道如何流血到iText页面的非常边缘?

1 个答案:

答案 0 :(得分:0)

首先:请提及您正在使用的itext版本。我目前正在使用您的代码片段进行了一些更改并且运行良好。可能是完整的代码片段可以帮助我找出代码中的错误。< / p>

(主要怀疑这一行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());
        }
    }
}