如何使用iText库5.5.2为整个pdf页面绘制边框

如标题中所述,如何使用iText库为所有生成的pdf页面绘制带有“红色”颜色,宽度描边5的边框。我尝试了一些代码,但没有结果。

(1)

                    PdfPTable table = new PdfPTable(1);

table.setWidthPercentage(99);

table.setLockedWidth(true);

PdfPCell cell = new PdfPCell();

cell.setFixedHeight(PageSize.A4.getHeight());

document.add(table);

(2)

PdfContentByte content = PdfWriter.getInstance(document, fout).getDirectContent();

Rectangle pageRect = document.getPageSize();

pageRect.setLeft(pageRect.getLeft() + 10);

pageRect.setRight(pageRect.getRight() - 10);

pageRect.setTop(pageRect.getTop() - 10);

pageRect.setBottom(pageRect.getBottom() +10);

content.setColorStroke( BaseColor.BLUE);

content.rectangle(pageRect.getLeft(), pageRect.getBottom(), pageRect.getWidth(), pageRect.getHeight());

content.setLineWidth(10);

content.stroke();

content.fillStroke();

这些方法没有结果,谢谢!

编辑

感谢Bruno Lowagie的回应,我改变了自己的方法。该示例的工作原理很吸引人,但是我无法将其放入代码中。

这是我的代码:按下按钮,PDF文件将在指定地址生成。稍后我将添加更多内容,但现在让我们坚持生成pdf文件。

   SaveToSD = (Button)findViewById(R.id.SaveToMemoryCard_xml);

SaveToSD.setOnClickListener(new OnClickListener()

{

@Override

public void onClick(View sssdd)

{

String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/ConcreteProject";

File dir = new File(path);

if (!dir.exists())

dir.mkdirs();

Log.d("PDFCreator", "PDF Path: " + path);

// Incremental Process of Creating File(s).

String pdfName = "SDG_Created_pdf.pdf";

int num = 0;

File file = new File(dir, pdfName);

while (file.exists()) {

num++;

pdfName = "SDG_Created_pdf" + num + ".pdf";

file = new File(dir, pdfName);

}

try {

new ConAccept_Result().createPdf(pdfName);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (DocumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}//End Of onClick(View sssdd).

});

这是方法/类定义:

public class RedBorder extends PdfPageEventHelper {

@Override

public void onEndPage(PdfWriter writer, Document document) {

PdfContentByte canvas = writer.getDirectContent();

Rectangle rect = document.getPageSize();

rect.setBorder(Rectangle.BOX); // left, right, top, bottom border

rect.setBorderWidth(5); // a width of 5 user units

rect.setBorderColor(BaseColor.RED); // a red border

rect.setUseVariableBorders(true); // the full width will be visible

canvas.rectangle(rect);

}

}

public void createPdf(String stringfile) throws IOException, DocumentException {

// step 1

com.itextpdf.text.Document document = new com.itextpdf.text.Document();

// step 2

PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(stringfile));

RedBorder event = new RedBorder();

writer.setPageEvent(event);

// step 3

document.open();

// step 4

Chunk chunk = new Chunk("Lovin' iText - Lovin' iText");

chunk.setTextRenderMode(PdfContentByte.TEXT_RENDER_MODE_FILL_STROKE, 0.3f, BaseColor.CYAN);

document.add(chunk);

// step 5

document.close();

}

运行da app后,我创建了一个名为i的文件夹,但是没有PDF文件!

非常感谢..

回答:

阅读您的问题,似乎很明显您需要页面事件。您的尝试只会添加一次边框,而您可能想在每个页面上添加一个边框。

请看一下PageBorder示例。在此示例中,您将找到PageEvents名为的接口的实现RedBorder:

public class RedBorder extends PdfPageEventHelper {

@Override

public void onEndPage(PdfWriter writer, Document document) {

PdfContentByte canvas = writer.getDirectContent();

Rectangle rect = document.getPageSize();

rect.setBorder(Rectangle.BOX); // left, right, top, bottom border

rect.setBorderWidth(5); // a width of 5 user units

rect.setBorderColor(BaseColor.RED); // a red border

rect.setUseVariableBorders(true); // the full width will be visible

canvas.rectangle(rect);

}

}

onEndPage()每次页面结束时都会自动触发该方法(请勿使用该onStartPage()方法添加内容)。

在此方法的实现中,我们要求document对象提供其当前页面大小。请注意,document传递给事件的实例的类型为PdfDocument。它不为在所使用的相同的文档createPdf()的方法。

我们根据需要调整矩形。我们将边框设置BOX为要在左侧,右侧,顶部和底部添加边框。我们定义边框的宽度(在本例中为5个用户单位),并定义颜色。

如果在此停下来,将绘制一个边框,边框为5个用户单位,但您只能看到2.5个用户单位的行,因为5个用户单位的另一半将位于页面的可见区域之外。

您可以通过使用10个用户单位的宽度或将变量borders标志设置为来避免这种情况true。

现在,我们要做的就是将rect对象传递给rectangle()方法。此方法与您使用的同名方法有所不同,因为它还会描边矩形。

以上是 如何使用iText库5.5.2为整个pdf页面绘制边框 的全部内容, 来源链接: utcz.com/qa/434433.html

回到顶部