我正在尝试修改使用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
页面的非常边缘?
答案 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());
}
}
}