2017-01-28 5 views
0

나는 Avery 템플릿 28878과 같이 구멍이 뚫린 카드에 인쇄 할 수있는 .pdf 파일을 생성하는 오래된 Perl 스크립트가 있습니다. 이 스크립트를 Java로 변환하고 iTextPDF 7을 선택했습니다. 지금까지 (절대 위치를 사용하여) 문제없이 10 개의 "카드"를 생성 할 수 있습니다.iTextPDF 7 절대 위치에 텍스트 추가

절대 위치에서 각 "카드"에 텍스트를 추가하고 글꼴 크기의 너비에 따라 해당 텍스트의 글꼴 크기를 설정하려고합니다. 글꼴 크기 부분에 관해서는

, 나는 이전 Perl 스크립트에서 다음을 수행하고 있고 실제로 절대 위치를 설정하려면 PDF : API2와 꽤 잘

# Font size 16 width = 184.832 
$nameText->font($fonts->{'times'}, $nameFontSize); 
while(int($nameText->advancewidth($name)) > 185){ 
    $nameFontSize--; 
    $nameText->font($fonts->{'times'}, $nameFontSize); 
} 

작동, 난에서 다음을 수행 펄

my $nameText = $pdfPage->text(); 
$nameText->translate(($xCoord + 151), ($yCoord + 73)); 
$nameText->text_center($name); 

나는 7

그래서 iTextPDF 자바이를 변환하는 방법을 알아낼 수 없었다, 어떻게 iTextPDF 7,536,913와 I을텍스트를 절대 위치로 설정 하시겠습니까?

해당 텍스트 개체의 현재 너비를 가져 옵니까?

+1

단순히 Perl 코드를 게시하는 것이 아니라 원하는 것을 정확하게 설명하십시오. iText는 Java/.Net 라이브러리이므로, iText 사용자는 반드시 Perl 및 특히 PDF :: API2에 익숙하지 않습니다. – mkl

답변

2

매우 높은 수준과 낮은 수준의 코드를 제공하고 있습니다. 글꼴 크기 계산에 대한 접근 방식을 수정하지 않고도 단어/문자 간격, 정렬, 복잡한 스크립트 사용 등 매우 높은 수준의 속성을 설정할 수 있기 때문에 높은 수준입니다. 반면에 일반적으로 뒤에서 수행되는 많은 수작업 레이아웃 작업을 수행하기 때문에 레벨이 낮습니다.

달성하려는 목표 중 하나 일뿐입니다. 나는 적어도 두 가지 다른 것들을 생각할 수 있습니다. 가서 iText7 샘플을 찾아 영감을 찾을 수 있습니다.

PdfDocument pdfDocument = new PdfDocument(new PdfWriter("...")); 
pdfDocument.addNewPage(); 
int pageNumber = 1; 
PdfPage page = pdfDocument.getPage(pageNumber); 

String text = "Hello World! This is an answer to a SO question"; 
Paragraph paragraph = new Paragraph(text). 
     setMargin(0). 
     setMultipliedLeading(1). 
     setFont(PdfFontFactory.createFont(FontConstants.TIMES_ROMAN)); 

float fontSize = 50; 
paragraph.setFontSize(fontSize); 
paragraph.setBackgroundColor(Color.RED); // Just to see that text is aligned correctly 
float allowedWidth = 185; 

Canvas canvas = new Canvas(new PdfCanvas(page), pdfDocument, page.getMediaBox()); 
RootRenderer canvasRenderer = canvas.getRenderer(); 
while (paragraph.createRendererSubTree().setParent(canvasRenderer).layout(new LayoutContext(new LayoutArea(pageNumber, new Rectangle(allowedWidth, fontSize * 2)))).getStatus() != LayoutResult.FULL) { 
    paragraph.setFontSize(--fontSize); 
} 
float xCoord = 151; 
float yCoord = 73; 

paragraph.setWidth(allowedWidth); 
canvas.showTextAligned(paragraph, xCoord, yCoord, TextAlignment.CENTER); 
canvas.close(); 
pdfDocument.close(); 

이 출력 모습입니다 : 우리가 텍스트를 볼 수 빨간색 배경을 추가 한 enter image description here 주를 중심으로한다.