[SPRING] 이미지에 텍스트를 추가하는 방법은 무엇입니까?
SPRING이미지에 텍스트를 추가하는 방법은 무엇입니까?
내 프로젝트에서 iText를 사용하여 PDF 문서를 생성합니다.
페이지의 높이가 500pt (1 사용자 단위 = 1 포인트)이고, 페이지에 텍스트를 쓰고 이미지가 뒤따라 간다고 가정합니다.
콘텐츠와 이미지가 450pt 미만을 필요로하는 경우 텍스트가 이미지보다 우선합니다. 내용과 이미지가 450pt를 초과하면 텍스트는 다음 페이지로 전달됩니다.
내 질문은 : 이미지를 작성하기 전에 남은 사용 가능한 공간을 얻으려면 어떻게해야합니까?
해결법
-
==============================
1.먼저, 텍스트와 이미지를 페이지에 추가 할 때 iText는 텍스트 내용과 이미지의 순서를 변경합니다. 다음을 사용하여이를 피할 수 있습니다.
먼저, 텍스트와 이미지를 페이지에 추가 할 때 iText는 텍스트 내용과 이미지의 순서를 변경합니다. 다음을 사용하여이를 피할 수 있습니다.
writer.setStrictImageSequence(true);
"커서"의 현재 위치를 알고 싶다면 getVerticalPosition () 메서드를 사용할 수 있습니다. 불행하게도,이 메소드는 그리 우아하지 않습니다. 새 라인을 추가하거나 (true 인 경우) 현재 라인에서 위치를 제공하는 부울 매개 변수가 필요합니다 (false 인 경우).
나는 왜 당신이 수직 입장을 취하고 싶은지 이해하지 못합니다. 캡션 뒤에 이미지가 있고 캡션과 이미지를 같은 페이지에 넣기를 원하기 때문입니까?
이 경우 텍스트와 이미지를 표 셀 안에 넣고 iText에 행을 분할하지 않도록 지시 할 수 있습니다. 이 경우 iText는 내용이 현재 페이지에 맞지 않으면 텍스트와 이미지를 올바른 순서로 다음 페이지로 전달합니다.
최신 정보:
덧글에 추가 된 추가 정보에 따라 OP가 워터 마킹 된 이미지를 추가하려고합니다.
실제 요구 사항에 따라이를 달성하기위한 두 가지 접근 방법이 있습니다.
접근법 1 :
첫 번째 접근법은 WatermarkedImages1 예제에서 설명합니다. 이 예제에서 우리는 이미지를 추가 할 PdfTemplate과 그 이미지 위에 쓰여진 텍스트를 생성합니다. 그런 다음이 PdfTemplate을 이미지 안에 넣고 단일 document.add () 문을 사용하여 해당 이미지를 워터 마크와 함께 추가 할 수 있습니다.
이것은 모든 마법을 수행하는 방법입니다 :
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); }
다음은 이미지를 추가하는 방법입니다.
PdfContentByte cb = writer.getDirectContentUnder(); document.add(getWatermarkedImage(cb, Image.getInstance(IMAGE1), "Bruno")); document.add(getWatermarkedImage(cb, Image.getInstance(IMAGE2), "Dog")); document.add(getWatermarkedImage(cb, Image.getInstance(IMAGE3), "Fox")); Image img = Image.getInstance(IMAGE4); img.scaleToFit(400, 700); document.add(getWatermarkedImage(cb, img, "Bruno and Ingeborg"));
보시다시피, 우리에게는 하나의 매우 큰 이미지 (내 아내와 저의 사진)가 있습니다. 이 이미지가 페이지에 맞도록 크기를 조정해야합니다. 이것을 피하려면 두 번째 접근법을 살펴보십시오.
접근법 2 :
두 번째 방법은 WatermarkedImages2 예제에서 설명합니다. 이 경우 각 이미지를 PdfPCell에 추가합니다. 이 PdfPCell은 이미지를 페이지의 너비에 맞도록 크기를 조정합니다. 워터 마크를 추가하려면 셀 이벤트를 사용합니다.
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); } }
이 셀 이벤트는 다음과 같이 사용할 수 있습니다.
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);
모든 이미지의 크기가 동일하거나 더 크거나 페이지에 이미지를 맞추는 것에 대해 걱정하지 않으려는 경우이 방법을 사용합니다.
고려:
분명히, 두 가지 접근 방식은 디자인 선택 때문에 다른 결과를 낳습니다. 결과 PDF를 비교하여 차이점을 확인하십시오 : watermark_template.pdf 대 watermark_table.pdf
from https://stackoverflow.com/questions/26814958/how-to-add-text-to-an-image by cc-by-sa and MIT license