2014-11-28 4 views
1

셀 안의 이미지 위에 (아래가 아님) 텍스트를 놓는 데 문제가 있습니다.셀 안의 이미지 위에 텍스트를 추가하는 방법은 무엇입니까?

Image img = Image.GetInstance(imagePatch); 
img.Alignment = Image.UNDERLYING; 
img.ScaleToFit(img.Width, img.Height); 
img.ScaleAbsoluteWidth(ptable.TotalWidth); 
pcell.AddElement(img); 
pcell.addElement(new Paragraph("text", font)); 
img.SetAbsolutePosition(0, ptable.TotalHeight);` 

을하지만 텍스트는 이미지 아래 대신 그 위에 보여줍니다

내 코드는이 보인다.

어떻게해야합니까? 이미지 경계선에서 텍스트 내용까지 패딩을 설정할 수있는 방법이 있습니까?

+0

시도의 중복으로 폐쇄 될 위험이()'가있다. – Sinatr

+0

나는 아무 일도 일어나지 않았다. ( –

+0

아마'DirectContentUnder'를 사용해야 할까? [here] (http://itextpdf.com/sandbox/images/BackgroundImage)를 보아라. – Sinatr

답변

1

실제 요구 사항에 따라 원하는 것을 달성하는 방법은 여러 가지가 있습니다.

접근법 1 : 첫 번째 방법은 WatermarkedImages1 예에서 설명

. 이 예에서는 PdfTemplate을 만들고 여기에 이미지를 추가하고 해당 이미지 위에 작성된 일부 텍스트를 추가합니다. 그런 다음이 PdfTemplate을 이미지 안에 넣고 그 이미지를 워터 마크와 함께 셀에 추가 할 수 있습니다. 두 번째 방법은 WatermarkedImages2 예에서 설명 2.A

public Image getWatermarkedImage(PdfContentByte cb, Image img, String watermark) throws DocumentException { 
    float width = img.getScaledWidth(); 
    float height = img.getScaledHeight(); 
    PdfTemplate template = cb.createTemplate(width, height); 
    template.addImage(img, width, 0, 0, height, 0, 0); 
    ColumnText.showTextAligned(template, Element.ALIGN_CENTER, 
      new Phrase(watermark, FONT), width/2, height/2, 30); 
    return Image.getInstance(template); 
} 

접근법 :

모든 마법을 수행하는 방법이다. 이 경우 각 이미지를 PdfPCell에 추가합니다. 이 PdfPCell은 페이지 너비에 맞게 이미지의 크기를 조정합니다. 모든 이미지는 더 많거나 적은 같은 크기가있는 경우이 방법을 사용합니다

PdfPCell cell; 
cell = new PdfPCell(Image.getInstance(IMAGE1), true); 
cell.setCellEvent(new WatermarkedCell("Bruno")); 
table.addCell(cell); 
cell = new PdfPCell(Image.getInstance(IMAGE2), true); 
cell.setCellEvent(new WatermarkedCell("Dog")); 
table.addCell(cell); 
cell = new PdfPCell(Image.getInstance(IMAGE3), true); 
cell.setCellEvent(new WatermarkedCell("Fox")); 
table.addCell(cell); 
cell = new PdfPCell(Image.getInstance(IMAGE4), true); 
cell.setCellEvent(new WatermarkedCell("Bruno and Ingeborg")); 
table.addCell(cell); 

:

class WatermarkedCell implements PdfPCellEvent { 
    String watermark; 

    public WatermarkedCell(String watermark) { 
     this.watermark = watermark; 
    } 

    public void cellLayout(PdfPCell cell, Rectangle position, 
     PdfContentByte[] canvases) { 
     PdfContentByte canvas = canvases[PdfPTable.TEXTCANVAS]; 
     ColumnText.showTextAligned(canvas, Element.ALIGN_CENTER, 
      new Phrase(watermark, FONT), 
      (position.getLeft() + position.getRight())/2, 
      (position.getBottom() + position.getTop())/2, 30); 
    } 
} 

이 세포 이벤트는 다음과 같이 사용할 수 있습니다 워터 마크를 추가하려면, 우리는 세포 이벤트를 사용 페이지에 이미지를 맞추는 것에 대해 걱정하지 않으려는 경우

접근 2.B :

대신의 이미지가 포함 된 셀의 셀 이벤트의 TEXTCANVAS에 텍스트를 추가, 당신은 또한의 셀 이벤트의 BACKGROUNDCANVAS에 이미지를 추가 할 수 있습니다 텍스트가 포함 된 셀

헤드 업 : 귀하의 질문에`img.SetAbsolutePosition을 언급 How to add text to an image?