2017-11-25 10 views
0

PDFBOX에 문제가 있습니다.내 html 필드에서 PDFBOX 작성 문서

public class DelegationsPdf{ 
public Delegations getPDF(Delegations delegations) throws IOException{ 

    PDDocument delegation = new PDDocument(); 
    PDDocumentCatalog catalog = delegation.getDocumentCatalog(); 
    PDAcroForm pdAcroForm = catalog.getAcroForm(); 

    PDPage page = new PDPage(); 
    delegation.addPage(page); 
    page = delegation.getPage(0); 

    PDPageContentStream content = new PDPageContentStream(delegation, page); 
    content.beginText(); 
     content.setFont(PDType1Font.TIMES_ROMAN, 20); 
     content.setLeading(14.5f); 
     content.newLineAtOffset(275, 750); 
     content.showText("Delegations"); 
    content.endText(); 

    content.beginText(); 
     content.newLineAtOffset(50 ,650); 
     content.setFont(PDType1Font.TIMES_ROMAN, 12); 
     content.showText("Worker:"); 
    content.endText(); 

    // FILL THE FIELD 
    content.beginText(); 
     PDField name = pdAcroForm.getField(delegations.getName()); 
     content.newLineAtOffset(100 ,650); 
     content.setFont(PDType1Font.TIMES_ROMAN, 12); 
      pdAcroForm.getFields().add(name); 
    content.endText(); 

    content.close(); 
    delegation.save("C:/delegation.pdf"); 
    delegation.close(); 
    return delegations; 
} 

그래서 내 이유를 설명 필드에서 코드 "/ 필드 채우기"나던 일을 제대로 알려주세요 :

그래서 나는 간단한 코드를 생성? 내 대표단 클래스에서 이름에 대한 정보를 얻습니다. 나 좀 도와 줄 수있어? 이걸 실행하고 버튼을 클릭하면 NULL과 관련된 오류가 발생합니다.

+2

물론입니다. 'pdAcroForm.getField (delegations.getName());'문서에 필드가 없으므로 아무 것도 반환하지 않습니다. Btw 코드가 혼란 스럽습니다. PDDocument 객체는 "document"또는 "delegationDocument"이지만 "delegation"은 명명되지 않아야합니다. PDField는 "이름"이 아닌 "필드"라고해야합니다. –

+1

https://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/에서 제안하는 양식을 만드는 방법을 보여줍니다. . –

+0

오 예, 필드를 추가해야한다는 것을 알았습니다. 이름이 나에 의해 변경되었습니다. 왜냐하면 나는 단지 무엇이 잘못되었는지를 알고 싶어했습니다. 그래서 .. 템플릿을 만들 때 양식을 만들고 거기에 추가해야합니다 (예 : apache svn-FillFormField?). 그러나 각 필드의 위치를 ​​어떻게 추가 할 수 있습니까? – Kondziowsky

답변

1

마지막으로 문제가 해결되었습니다.

먼저, HTML 양식에서 채울 값을 "다운로드"할 때 pdfbox에 필드 (양식)를 작성한 다음 채울 필요가 있다는 것을 알아야했습니다.

두 번째로 특수 문자 (UTF8)의 경우 PDType0Font.load()를 사용해야합니다.

감사합니다.