如何在彼此旁边显示图像和文本

时间:2014-09-11 06:10:28

标签: java pdf itext

您好我正在尝试创建一个发票,其中公司徽标和地址彼此相邻显示。公司徽标显示在左侧,文本显示在其下方。我试图将徽标旁边的文字显示在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();
    }

}

2 个答案:

答案 0 :(得分:13)

人们通常使用PdfPTable来实现这一目标。例如,参见ImageNextToText示例:

enter image description here

这是创建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;


}