2016-09-21 5 views
-1

PDF 파일에 텍스트 워터 마크를 추가하는 데 대한 자습서가 없습니다. 당신은 모두 나를 인도 해 주실 수 있습니까, 저는 PDFBOX를 처음 접했습니다.Apache PDFBox를 사용하여 Java에서 pdf에 텍스트 워터 마크를 추가하는 방법은 무엇입니까?

중복되지 않았기 때문에 주석의 링크가 도움이되지 못했습니다. PDF에 이미지가 아닌 텍스트를 추가하고 싶습니다.

+1

가능한 복제 (http://stackoverflow.com/questions/8929954/watermarking-with-pdfbox) –

+0

* 나는이 전에 iText를 시도했지만, iText를 무료로하지 않습니다. 나는 오픈 소스를 원한다. * * - 그러한 주장은 여기서 부적절하다. XXX 라이브러리를 사용하여 작업을 수행하려는 경우 YYY 라이브러리를 사용하지 않는 이유를 설명 할 필요가 없습니다. 대신 당신은 당신이 시도한 것과 당신이 붙어있는 곳을 설명 했어야합니다. 소유권 주장 자체와 관련하여 iText *는 오픈 소스이므로 AGPL 규칙을 준수하는 한 로열티를 지불하지 않고도 사용할 수 있습니다. 마찬가지로 PDFBox는 오픈 소스이기 때문에 Apache License v2.0 규칙을 따르는 한 사용할 수 있습니다. – mkl

+1

소스 코드 다운로드에서 AddMessageToEachPage.java 예제를 살펴보십시오. 그런 다음 남은 문제에 대한 질문을 편집하십시오. –

답변

0

다음은 PDFBox 2.0.2를 사용한 예입니다. 그러면 PDF가로드되고 오른쪽 하단 모서리에 빨간색 투명 글꼴로 텍스트가 작성됩니다. 여러 페이지 PDF 인 경우 모든 페이지에 워터 마크가 나타납니다. 검사 할 필요가있는 추가 null 조건이 있는지 확실하지 않으므로 프로덕션 준비가되지 않았을 수도 있지만 올바른 방향으로 실행해야합니다.

이 특정 코드 블록은 원본 PDF를 수정하지 않지만 Tmp_ (파일 이름)을 출력으로 사용하여 새 PDF를 만듭니다. [PDFBox와 복제 관리]의

 private static void watermarkPDF (File fileStored) { 
    File tmpPDF; 
    PDDocument doc; 
    tmpPDF = new File(fileStored.getParent() + System.getProperty("file.separator") +"Tmp_"+fileStored.getName()); 
    doc = PDDocument.load(fileStored); 
    for(PDPage page:doc.getPages()){ 
     PDPageContentStream cs = new PDPageContentStream(doc, page, AppendMode.APPEND, true, true); 
     String ts = "Some sample text"; 
     PDFont font = PDType1Font.HELVETICA_BOLD; 
     float fontSize = 14.0f; 
     PDResources resources = page.getResources(); 
     PDExtendedGraphicsState r0 = new PDExtendedGraphicsState(); 
     r0.setNonStrokingAlphaConstant(0.5f); 
     cs.setGraphicsStateParameters(r0); 
     cs.setNonStrokingColor(255,0,0);//Red 
     cs.beginText(); 
     cs.setFont(font, fontSize); 
     cs.setTextMatrix(Matrix.getTranslateInstance(0f,0f)); 
     cs.showText(ts); 
     cs.endText(); 
     } 
     cs.close(); 
    } 
    doc.save(tmpPDF); 
} 
+1

* 프로덕션 준비가되지 않았을 수 있습니다 * - 더 많이 만들려면 ** 좌표계의 원점이 왼쪽 아래 일 필요는 없다는 것을 고려하여 위치 계산을 업데이트하십시오 ** B ** PDPAGEContentStream 생성자를 사용하십시오 'resetContext' 매개 변수를 사용하고'true'로 설정하면 ** C ** **는'PDExtendedGraphicsState' 처리를 단순화합니다. 특히 자원을 명시 적으로 간섭하지 않으려면'setGraphicsStateParameters'가 필요하다면 이미 자원에 상태를 추가하십시오. 그리고 OP *가 pdf *에 이미지가 아닌 텍스트를 추가하려고하므로 이미지 추가도 중단됩니다. – mkl

+0

안녕하세요. MKL - 다른 예제를 온라인으로 게시 한 바로 그날에 함께 패치했습니다. 그러나, 내가 수집 한 것부터, 나는 IF 섹션 전체를 제거하고 r0.setNonStrokingAlphaConstant 만 유지함으로써이를 변경할 수 있어야합니다. 그 맞습니까? – MDig

+0

예, ** C ** 항목을 수정해야합니다. – mkl