我想在PDF的每个页面上放置一个标题。 标题的文本部分已完成,但我无法找到放置图像的方法。
public static class Header extends PdfPageEventHelper {
public void onEndPage(PdfWriter writer, Document document) {
try{
PdfContentByte cb = writer.getDirectContent();
/*
Some code to place my text in the header
*/
Image imgSoc = Image.getInstance("C:\\...\\Logo.jpg");
imgSoc.scaleToFit(110,110);
imgSoc.setAbsolutePosition(390, 720);
ColumnText ct = new ColumnText(cb);
ct.addText(new Chunk(imgSoc,0,0));
ct.go();
}catch(Exception e){
e.printStackTrace();
}
}
}
我不确定我是否正确地做到了这一点。
答案 0 :(得分:2)
实现此目的的一种方法是将标题创建为表格:
PdfPTable table = new PdfPTable(1);
Image imgSoc = Image.getInstance("C:\\...\\Logo.jpg");
imgSoc.scaleToFit(110,110);
PdfPCell cell = new PdfPCell(imgSoc , true);
cell.setBorder(0);
table.addCell(cell);
float[] columnWidths = new float[] { 100};
table.setWidthPercentage(100f);
table.setWidths(columnWidths);
ColumnText ct = new ColumnText(cb);
ct.addElement(table);
ct.setSimpleColumn(36, 0, 559, 806); //Position goes here
ct.go();
答案 1 :(得分:2)
使用表格已有两个答案。
表格可以非常有助于创建不同标题部分的动态布局(文档标题,文档版本,页码,徽标......)。
但是如果你不需要它,已经拥有像OP一样的所有东西,你可以简单地将图像添加到固定大小的固定位置:
public static class Header extends PdfPageEventHelper {
public void onEndPage(PdfWriter writer, Document document) {
try
{
PdfContentByte cb = writer.getDirectContent();
/*
Some code to place some text in the header
*/
Image imgSoc = Image.getInstance("C:\\...\\Logo.jpg");
imgSoc.scaleToFit(110,110);
imgSoc.setAbsolutePosition(390, 720);
cb.addImage(imgSoc);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
PS :如果您真的在所有页面上使用相同的徽标,则最好只将图像文件读入Image
实例一次(例如在构造函数或{{1}中) }),将该实例保存在变量中并一次又一次地重复使用它。这样,您只能在PDF中包含一次图像数据。
答案 2 :(得分:1)
您可以使用iText表格,根据用户的选择,您可以向左或向右显示您的徽标。
Chunk header = new Chunk("your header text", headerFont);
Image logo = Image.getInstance("../../..");
// your image path
logo.scaleAbsolute(80f, 80f);
logo.scalePercent(100);
table = new PdfPTable(3);
table.setWidthPercentage(100);
PdfPCell detailCell = new PdfPCell(new Phrase(header));
detailCell.setBorder(Rectangle.NO_BORDER);
detailCell.setHorizontalAlignment(alignment);
detailCell.setVerticalAlignment(Element.ALIGN_TOP);
PdfPCell logoRightCell = new PdfPCell();
logoRightCell.setFixedHeight(80);
logoRightCell.setBorder(Rectangle.NO_BORDER);
logoRightCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
PdfPCell logoLeftCell = new PdfPCell();
logoLeftCell.setFixedHeight(80);
logoLeftCell.setBorder(Rectangle.NO_BORDER);
logoLeftCell.setHorizontalAlignment(Element.ALIGN_LEFT);
if (true) {
String logoAlign = "left";
if (logoAlign.compareTo("Left") == 0) {
logo.setAlignment(Element.ALIGN_LEFT);
logoLeftCell.addElement(logo);
} else {
logo.setAlignment(Element.ALIGN_RIGHT);
logoRightCell.addElement(logo);
}
}
String headerAlign = "Center";
if (headerAlign.compareTo("Center") == 0) {
table.setWidths(new int[] { 2, 7, 2 });
table.addCell(logoLeftCell);
table.addCell(detailCell);
table.addCell(logoRightCell);
} else if (headerAlign.compareTo("Left") == 0) {
table.setWidths(new int[] { 7, 2, 2 });
table.addCell(detailCell);
table.addCell(logoLeftCell);
table.addCell(logoRightCell);
} else {
table.setWidths(new int[] { 2, 2, 7 });
table.addCell(logoLeftCell);
table.addCell(logoRightCell);
table.addCell(detailCell);
}
//
table.setTotalWidth(document.getPageSize().getWidth()
- document.leftMargin() - document.rightMargin());
table.writeSelectedRows(0, -1, document.leftMargin(), document
.getPageSize().getHeight() - document.topMargin() + 20,
writer.getDirectContent());
}
document.add(table);