2017-09-28 32 views
3

PDField의 setValue 메소드를 호출하고 특수 문자가 포함 된 값을 설정하려고 할 때 문제가 있습니다. 내 값이 U + 00A0으로 나는 다음과 같은 예외가 무엇입니까 문자가 포함 된 경우 상세PDFBox U + 00A0은이 글꼴의 인코딩에서 사용할 수 없습니다.

field.setValue("TEST-BY  (TEST)") 

가 : java.lang.IllegalArgumentException가 :

을에 의한 U + 00A0이 제공되지 입니다 글꼴의 인코딩 :

전체 stracktrace을 WinAnsiEncoding는 여기에서 찾을 수 있습니다 : Stacktrace

현재 PDType1Font.TIMES_ROMAN을 글꼴로 설정했습니다. 이 문제를 해결하기 위해 다른 사용 가능한 글꼴을 사용해 보았습니다. 같은 문제가 지속되었습니다.

이 대답은 다음 제안을 찾았습니다 https://stackoverflow.com/a/22274334/7434590하지만 우리는 setValue를 사용하고 바이트를 조작 할 수있는 showText/drawText 메소드가 아니기 때문에 setValue는 문자열 만 매개 변수로 받아들이므로이 접근법을 사용할 수 없습니다.

참고 :이 문제를 해결하기 위해 문자를 다른 것으로 바꿀 수 없으며 setValue 메서드에서 글꼴 문자로 지원되는 모든 종류를 설정할 수 있어야합니다.

+0

'WinAnsiEncoding'을 사용하지 않는 글꼴이 있습니까? 연결된 질문은 문제와 관련이 없습니다. 잘못된 인코딩을 사용하는 것입니다. 귀하의 질문은 그 글꼴에 존재하지 않는 문자 사용을 주장하는 것입니다. 문자를 변경하거나 글꼴을 변경하십시오. – Kayaman

+0

어떤 PDFBox 버전을 사용하십니까? – mkl

+1

내가 사용하는 버전은 2.0.7입니다. – assuna

답변

1

당신은 글꼴을 포함해야하고 사용하지 것이다 WinAnsiEncoding :이 코드는 setValue()를 호출하기 전에 실행해야한다는

PDFont formFont = PDType0Font.load(doc, new FileInputStream("c:/windows/fonts/somefont.ttf"), false); // check that the font has what you need; ARIALUNI.TTF is good but huge 
PDResources res = acroForm.getDefaultResources(); // could be null, if so, then create it with the setter 
String fontName = res.add(formFont).getName(); 
String defaultAppearanceString = "/" + fontName + " 0 Tf 0 g"; // adjust to replace existing font name 
textField.setDefaultAppearance(defaultAppearanceString); 

참고.

CreateSimpleFormWithEmbeddedFont.java에 대한 자세한 내용은 소스 코드 다운로드의 예를 참조하십시오.