2016-07-07 3 views
1

iText에 이상한 문제가 있습니다. & PdfTemplate.iText PdfTemplate 글꼴 크기 문제

전체 페이지 번호를 페이지 바닥 글에 인쇄하려면 PdfTemplate & 이미지를 사용하고 있습니다. 나는 PdfTemplate을 만들고, 템플릿에서 이미지를 만들고 이미지를 청크에 넣는다. 그 청크는 부모가 어떤 구성 요소이든 테이블/문구/단락에 추가된다.

PdfTemplate tmp = PdfTemplate.createTemplate(writer, 20, 10); 

Image img = null; 
try 
{ 
    img = Image.getInstance(tmp); 
} 
catch (BadElementException e) 
{ 
} 

return new Chunk(img, 0, 0); 

이 청크는 페이지 (예 : 구문)에 추가됩니다. 생성 된 PdfTemplate은 나중에 가져 오기 위해 목록에 저장됩니다.

그런 다음 pageEventHelper (onCloseDocument)에서,이처럼 ColumnText의 도움으로 총 페이지 수와 템플릿을 채우기 :

:

PdfTemplateRecord rec = pagenums.get(i); 
PdfTemplate tmp = rec.getTemplate(); 
Font font = CreatorHelper.getCurrentFont(rec.getFontContext()); 
if (font == null) 
{ 
    font = new Font(defaultFont, 8f); 
} 

ColumnText columnText = new ColumnText(tmp); 
columnText.setSimpleColumn(new Phrase(Integer.toString(pagenum), font), 0, -tmp.getHeight(), tmp.getWidth(), 0, 0, Element.ALIGN_LEFT); 
columnText.setUseAscender(false); 
try 
{ 
    columnText.go(); 
} 
catch (DocumentException e) 
{ 
    log.error("Failed to render total page number", e); 
} 

모든 것은 두 가지를 제외하고 잘 작동하고

) 1. setSimpleColumn을주의 깊게 확인하면 0 대신 Y 위치를 -tmp.getHeight() (예 : -10)로 설정해야합니다. Y를 0으로 설정하면 텍스트가 줄을 ... 아마도 나는 이미지 추가로 뭔가를 엉망으로 만들었지 만, 모르지만 모르겠다.

2.) 글꼴 크기 조정에 문제가 있습니다. 이상하지만 글꼴 크기가 10f보다 큰 경우 일반 텍스트와 템플릿의 텍스트가 동일하면 그러나 글꼴 크기가 10f보다 작 으면 서식 파일의 텍스트가 작아집니다. 몇 가지 이미지

when font size is 6f

when font size is 8f

when font size is 9f

when font size if 10f

when font size if 14f

(이 순서 이미지, 폰트 사이즈 : 6 층, 8 층 9F, 10F, 도 14f에서, "페이지 1"은 "of"뒤에 오는 숫자는 템플리트와 함께 제공됨)

9f 글꼴 크기에서 볼 수 있듯이 템플리트 텍스트는 일반 텍스트보다 약간 작지만 10f 이후 두 텍스트는 동일합니다.

글꼴 크기 조정과 관련하여 PdfTemplate과 요소 사이에 규칙이 있는지 검색했지만 찾지 못했습니다.

도움이 필요하십니까?

감사합니다.

+0

불행히도 코드에서 사용하는 많은 알 수없는 메서드가 있으므로 페이지에 내용을 추가하는 방법이 분명하지 않으므로 코드에서 쉽게 문제를 재현 할 수 없습니다. 문제의 원인이 알려지지 않은 코드 조각의 일부로 인해 발생한다고 가정합니다. – mkl

+0

큰 변화이지만 PDF에서 두 번 통과하도록 전환 할 수는 없습니까? 첫 번째 패스는 PDF를 만들고, 두 번째 페이지는 페이지에 둡니다. 그것은 정말로 사물을 단순화합니다. [코드의 세 번째 블록을 참조하십시오] (http://stackoverflow.com/a/9845722/231316) –

+0

안녕하세요! 총 페이지가 정확히 어디 있는지 알지 못하기 때문에 두 번 통과 할 수 없습니다. PDF는 템플릿 (XML)에서 생성되며 totalPages는 어디에서나 (문서 본문에서도)있을 수 있습니다. @ mkl : 글쎄, 2000 라인 정도이기 때문에 전체 생성기 코드를 붙여 넣을 수는 없지만,이 "unknown"메소드에 특별한 것은 없다. CreatorHelper.getCurrentFont (rec.getFontContext()); – user1536873

답변

0

이전 게시물 부활 죄송합니다 : 이것은 일관성 글꼴 크기와 관련 페이지 번호 [1 페이지 중 1 페이지] 나를 위해 작동하지 않았다 동일한 글꼴 크기를 얻을 수있는 단락을 제거

영업 이익의 주석입니다 을 (유사한 이미지 스케일링 문제에서).

this post here을 참조하면 무엇이 잘못되었을 수 있는지 보여줍니다.

BUT : (템플릿)없이 제 PDF는 폰트 "조지아"(ANSI 인코딩)의 "임베디드 집합"을 포함한다. 그것은 글꼴을 사용하는 올바른 방법입니다. 두 번째 PDF 그러나이 포함 - 조지아 (ANSI)의 임베디드 일부를 - 조지아 (CID/신원 H)의 내장 일부를 - 조지아 포함되지 (ANSI) - 조지아 - 굵게 포함되지 (ANSI)

은 처음 두 글꼴은 OK, 그러나 다음 두 가지 글꼴이 포함 된 가 아니기 때문에, 내 Adobe Reader가 내 운영 체제에 글꼴 그루지야을 지켜 볼 수밖에 없었습니다.

희망 사항 :

P.S. 템플리트에 내용을 추가 할 때 템플리트의 내용이 독립적 인 글 C을 가질 수 있도록 Phrase를 추가하는 중에 폰트를 설정할 수 있습니다.