2014-10-12 6 views
0

내 응용 프로그램에서 바코드 이미지를 기존 PDF 문서에 추가해야합니다. 0 바이트로 수정 된 PDF를 작성할 수 있습니다. 나는 iText를 처음 사용한다. 이 코드에서 이슈를 찾을 수 없으며 분석 할 시간이 없습니다.기존 문서에 이미지 추가

PdfReader reader = null ; 
PdfStamper pdfStamper = null ; 
PdfWriter writer = null ; 

reader = new PdfReader("....\\barcode.pdf"); 
pdfStamper = new PdfStamper(reader, new FileOutputStream(); 

Barcode128 code128 = new Barcode128(); 
String barcodeValue = "" ; 
code128.setCode(barcodeValue); 
PdfContentByte contentByte = null ; 

for(int i = 1 ; i <= reader.getNumberOfPages() ; i ++){ 
     contentByte = pdfStamper.getUnderContent(i); 
     code128.setAltText(""); 
     code128.setBarHeight((float) (10)); 

     Image image = code128.createImageWithBarcode(contentByte, null, null); 
     image.setAbsolutePosition(23f, 20f); 
     image.setBackgroundColor(CMYKColor.WHITE); 

     image.setWidthPercentage(75); 
     contentByte.fill(); 
     contentByte.addImage(image); 
     contentByte.fill(); 
} 
PdfDocument pdfDocument = contentByte.getPdfDocument(); 
writer = PdfWriter.getInstance(pdfDocument, new FileOutputStream()); 

reader.close(); 
pdfStamper.close(); 
writer.close(); 

답변

4

오류로 가득 차서 코드를 작성하는 데 시간을 할애하지 못했습니다. 귀하의 질문조차도 잘못되었습니다! "기존 PDF에 이미지를 추가하려면 어떻게합니까?" 그러나 코드를 읽을 때 실제로는 기존 PDF의 모든 페이지에 바코드를 추가하려고합니다. 바코드를 만든 다음 이미지로 변환합니다. 바코드를 Form XObject로 추가하지 않는 이유는 무엇입니까? 또한 contentByte.fill()을 사용하는 이유가 완전히 명확하지 않습니다. 또한 이미지를 하드 코딩 된 위치에 추가합니다. 그게 현명한거야? 당신이 볼 수 있듯이 StampBarcode

PdfReader reader = new PdfReader(src); 
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); 
int n = reader.getNumberOfPages(); 
Rectangle pagesize; 
for (int i = 1; i <= n; i++) { 
    PdfContentByte over = stamper.getOverContent(i); 
    pagesize = reader.getPageSize(i); 
    float x = pagesize.getLeft() + 10; 
    float y = pagesize.getTop() - 50;  
    BarcodeEAN barcode = new BarcodeEAN(); 
    barcode.setCodeType(Barcode.EAN8); 
    String s = String.valueOf(i); 
    s = "00000000".substring(s.length()) + s; 
    barcode.setCode(s); 
    PdfTemplate template = 
      barcode.createTemplateWithBarcode(over, BaseColor.BLACK, BaseColor.BLACK); 
    over.addTemplate(template, x, y); 
} 
stamper.close(); 
reader.close(); 

, 나는 페이지 번호를 보여줍니다 EAN8 바코드를 사용했다 (패딩 : 내가 16 페이지와 PDF의 각 페이지에 바코드를 추가하는 예제를 작성했습니다

0으로). 바코드를 추가 할 페이지의 페이지 크기를 기준으로 xy 값을 계산합니다. Image 개체를 만들지 않습니다. 대신 PdfTemplate 개체를 사용합니다. add_barcode.pdf

당신이 볼 수 있듯이, 모든 페이지의 왼쪽 상단 모서리에있는 바코드가있다 :

은 결과 PDF입니다.

추가 참고 :

사람이 대답을 downvote하기 위해 신경을했다. 나는 왜 그런지 이해하지 못한다. 내가 생각할 수있는 유일한 이유는 이미지 대신 바코드를 추가하는 방법을 설명 할 때 내 대답이 너무 좋았다는 점입니다. 그 일이 어떻게 이루어 졌는지 설명하겠습니다. addTemplate() 메서드를 addImage() 메서드로 바꾸면 충분합니다.

for (int i = 1; i <= n; i++) { 
    PdfContentByte over = stamper.getOverContent(i); 
    pagesize = reader.getPageSize(i); 
    float x = pagesize.getLeft() + 10; 
    float y = pagesize.getTop() - 50; 
    Image img = Image.getInstance("image" + i + ".jpg"); 
    img.setAbsolutePosition(x, y); 
    over.addImage(img); 
}