2017-01-28 8 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); 
} 

実際の絶対位置を設定するために、私は中に次のようにしますPerlの

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

私はiTextPDF 7で行う方法、だから、iTextPDF 7

してJavaにこれを変換する方法を見つけ出すことができませんでしたテキストを絶対位置に設定しますか?

そのテキストオブジェクトの現在の幅を取得しますか?

+1

単にPerlコードを投稿するのではなく、あなたがしたいことを正確に記述してください。 iTextはJava/.Netライブラリであり、iTextユーザーは必ずしもPerl、特にPDF :: API2を知っているとは限りません。 – mkl

答えて

2

非常に高いレベルと低いレベルの両方のコードを提供しています。これは、フォントサイズの計算方法を変更することなく、単語/文字間隔、正当性、複雑なスクリプトなどを使用して、非常に高いレベルのプロパティを設定できるため、高いレベルです。一方、一般的にはバックグラウンドで行われる手作業によるレイアウト作業が多いので、低レベルです。

これは達成しようとしていることに対する1つのアプローチにすぎないことにご注意ください。私は少なくとも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 注意が集中しています。