您好我正在尝试创建一个发票,其中公司徽标和地址彼此相邻显示。公司徽标显示在左侧,文本显示在其下方。我试图将徽标旁边的文字显示在FAR RIGHT但它没有来。请帮助。
public class Test {
/** Path to the resulting PDF */
public static final String RESULT = "C:/ex/test.pdf";
/**
* Main method.
* @param args no arguments needed
* @throws DocumentException
* @throws IOException
*/
public static void main(String[] args) throws IOException, DocumentException {
new ComCrunchifyTutorials().createPdf(RESULT);
}
/**
* Creates a PDF with information about the movies
* @param filename the name of the PDF file that will be created.
* @throws DocumentException
* @throws IOException
*/
public void createPdf(String filename)
throws IOException, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(filename));
document.open();
Image image = Image.getInstance("C:/Users/user/Desktop/New folder (3)/shoes/shoes/web/images/abc.jpg");
image.scaleAbsolute(150f, 50f);//image width,height
Paragraph p = new Paragraph();
Phrase pp = new Phrase(200);
p.add(new Chunk(image, 0, 0));
pp.add(" a text after the image.");
p.add(pp);
document.add(p);
document.close();
}
}
答案 0 :(得分:13)
人们通常使用PdfPTable
来实现这一目标。例如,参见ImageNextToText示例:
这是创建PDF的代码和包含两列的表:
public void createPdf(String dest) throws IOException, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
PdfPTable table = new PdfPTable(2);
table.setWidthPercentage(100);
table.setWidths(new int[]{1, 2});
table.addCell(createImageCell(IMG1));
table.addCell(createTextCell("This picture was taken at Java One.\nIt shows the iText crew at Java One in 2013."));
document.add(table);
document.close();
}
这是使用图像创建单元格的代码。请注意,true
参数将导致图像缩放。由于我们已经定义第一列占第二列宽度的一半,因此图像的宽度将占整个表宽度的三分之一。
public static PdfPCell createImageCell(String path) throws DocumentException, IOException {
Image img = Image.getInstance(path);
PdfPCell cell = new PdfPCell(img, true);
return cell;
}
这是使用文本创建单元格的一种方法。有许多不同的方法可以实现相同的结果。只需尝试使用文本模式和复合模式。
public static PdfPCell createTextCell(String text) throws DocumentException, IOException {
PdfPCell cell = new PdfPCell();
Paragraph p = new Paragraph(text);
p.setAlignment(Element.ALIGN_RIGHT);
cell.addElement(p);
cell.setVerticalAlignment(Element.ALIGN_BOTTOM);
cell.setBorder(Rectangle.NO_BORDER);
return cell;
}
答案 1 :(得分:1)
在我的情况下,我正在使用现有功能,并且必须在单元格中执行此操作。所以这就是我做的事情
public PdfPCell buildDesiredCell() throws Exception {
PdfPCell cell = new PdfPCell();
PdfPTable headerTable = new PdfPTable(2);
headerTable.setWidthPercentage(100f);
PdfPCell leftCell = new PdfPCell();
String imagePath;
imagePath = D:\....;//specify any path
Image img = Image.getInstance(imagePath);
img.scaleAbsoluteHeight(120f);
img.scaleAbsoluteWidth(120f);
img.setAlignment(Element.ALIGN_LEFT);
leftCell.addElement(img);
leftCell.setBorder(Rectangle.NO_BORDER);
headerTable.addCell(leftCell);
PdfPCell rightCell = new PdfPCell();
Paragraph addText= new Paragraph(" This is required text", smallStandardFont);
rightCell .addElement(addText);
rightCell .setBorder(Rectangle.NO_BORDER);
rightCell .setPaddingLeft(5);
headerTable.addCell(rightCell);
cell.setBorder(Rectangle.NO_BORDER);
cell.addElement(headerTable);
return cell;
}