2013-10-31 6 views
1

양식 항목을 미리 채우도록 PDF 문서를 편집하려고했습니다. 나는 그것을 (일종의) 일하고있다. 추가하고있는 텍스트가 잘 들어갑니다. 그러나 이미 있던 다른 텍스트는 "& % £! £!"기호로 바뀌 었습니다. 아래 코드의 "contentStream"섹션과 관련이 있습니다. " 의 setFont 안녕하세요 리처드 "텍스트 더 이상 표시됩니다 도와주세요!PDFBox에서 텍스트를 뒤섞기

!"나는 그것을 제거하면 라인. 페이지는이 점을 제외하고 ... OK 남아 "

package pdfboxtest; 

import java.awt.Color; 
import java.util.List; 
import org.apache.pdfbox.pdmodel.PDDocument; 
import org.apache.pdfbox.pdmodel.PDPage; 
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream; 

public class PDFFormFiller { 

    private static final String R40_NEW_FORM_PATH = "c:\\temp\\hmrc-r40.pdf"; 
    private static final String R40_COMPLETED_FORM_PATH = "c:\\temp\\hmrc-r40-complete.pdf"; 

    public static void main(String[] args) throws Exception { 
     PDDocument doc = PDDocument.load(R40_NEW_FORM_PATH); 

     addTextToPage(doc); 

     doc.save(R40_COMPLETED_FORM_PATH); 
     doc.close(); 
    } 

    private static void addTextToPage(PDDocument doc) throws Exception { 
     List pages = doc.getDocumentCatalog().getAllPages(); 
     PDPage firstPage = (PDPage) pages.get(0); 
     PDPageContentStream contentStream = new PDPageContentStream(doc, firstPage, true, true); 

     contentStream.setFont(PDType1Font.HELVETICA_BOLD, 24); 
     contentStream.beginText(); 
     contentStream.setNonStrokingColor(Color.BLACK); 
     contentStream.moveTextPositionByAmount(100, 200); 
     contentStream.drawString("HELLO RICHARD!!"); 
     contentStream.endText(); 
     contentStream.close(); 

    } 
} 

This is the top of the form before I add text elsewhere And after I've added text elsewhere, this bit of text goes nuts! I did not edit this bit though

+0

Longshot하지만 그렇게 시스템에서 글꼴을로드 해 보았습니까? PDFont font = PDTrueTypeFont.loadTTF (문서, "C : \\ Windows \\ Fonts \\ segoepr.ttf"); – Levenal

+0

그건 확실히 찔러 볼 가치가있었습니다! 고맙지 만 운은 없다 :-( –

+0

이것은 [이 답변] (http://stackoverflow.com/questions/19322553/adding-header-to-existing-pdf)에서 해결 방법을 설명한 PDFBox 문제로 인한 것일 수 있습니다. -file-using-pdfbox/19512650 # 19512650) – mkl

답변

1

의견에서 이미 가정했듯이 PDFBox로 인해 입니다. 문제 this answer에 대한 해결 방법을 설명했습니다.이 문제는 여전히 PDFBox 버전 1.8.2에 있지만 버전 1.8.3 및 2.0.0에서는 수정되었습니다 (cf. PDFBOX-1753. 귀하의 경우에는

는 해결 방법은 addTextToPage 방법을 다음과 같이 변경합니다

private static void addTextToPage(PDDocument doc) throws IOException { 
    List pages = doc.getDocumentCatalog().getAllPages(); 
    PDPage firstPage = (PDPage) pages.get(0); 
    PDPageContentStream contentStream = new PDPageContentStream(doc, firstPage, true, true); 

    firstPage.getResources().getFonts(); // <<<<<< 

    contentStream.setFont(PDType1Font.HELVETICA_BOLD, 24); 
    contentStream.beginText(); 
    contentStream.setNonStrokingColor(Color.BLACK); 
    contentStream.moveTextPositionByAmount(100, 200); 
    contentStream.drawString("HELLO RICHARD!!"); 
    contentStream.endText(); 
    contentStream.close(); 
} 

추가 된 라인에 new PDPageContentStream 잊어하지만 setFont 카운트가 수행 된 초기화를 실행합니다. 위에서 참조한 답변에서 자세한 내용을 확인할 수 있습니다. PDFBox 개발에 대한 정보를 원할 수 있습니다.

+0

멋지다! 감사합니다. 내가 StackOverflow에서 검색을했음을 확신 할 수는 있지만, 저에게 잘 준 답변을 평가하지 않았을 것입니다. 작은 문제! –