2013-03-14 22 views
10

ユーザーが写真をアップロードしてフォトブックを作成するWebサイトがあります。また、絶対位置、回転、および配置でテキストを追加することもできます。テキストは新しい行を持つことができます。段落やセルを任意の角度で回転させます。-Itext

私は、後で印刷されるPhotobooks高品質Pdfsの作成を自動化するためにItextライブラリを使用してきました。

ユーザーのアップロードした画像をPDFに追加するのは本当に簡単でしたが、問題はテキストを追加しようとするときです。

理論的には、定義された幅と高さの段落を定義し、ユーザーのテキスト、フォント、フォントスタイル、配置(中央、左、右、正当化)を設定し、回転。

私がItextについて読んだことでは、段落を作成してユーザープロパティを設定し、ColumnTextオブジェクトを使用して絶対位置、幅、高さを設定できます。しかし、1行以上の回転を設定することはできません。回転法が唯一の90

の倍数の度を可能にするので、私は、どちらかのテーブルセルを使用することはできません

追加することなく、いくつかの回転(20度と言う)との段落を追加する方法はあります行ごとにColumnText.showTextAligned()メソッドを使用し、すべての数式を使用してテキストを作成しますか?

----編集:

//Create the template that will contain the text 
PdfContentByte canvas = pdfWriter.getDirectContent(); 
PdfTemplate textTemplate = canvas.createTemplate(imgWidth, imgHeight); //The width and height of the text to be inserted 

ColumnText columnText = new ColumnText(textTemplate); 

columnText.setSimpleColumn(0, 0, imgWidth, imgHeight); 
columnText.addElement(paragraph); 

columnText.go(); 

//Create de image wraper for the template 
Image textImg = Image.getInstance(textTemplate); 

//Asign the dimentions of the image, in this case, the text 
textImg.setInterpolation(true); 
textImg.scaleAbsolute(imgWidth, imgHeight); 
textImg.setRotationDegrees((float) -textComp.getRotation()); //Arbitrary number of degress 
textImg.setAbsolutePosition(imgXPos, imgYPos); 

//Add the text to the pdf 
pdfDocument.add(textImg); 
:08-アゴー-2013 ----

それが誰を助けている場合、これは私がこの問題を解決するために使用されるコードは(ブルーノのおかげで)です

+1

私が使用したコードとの質問を編集。 – BernalCarlos

答えて

10
  • PdfTemplateオブジェクトを作成します。ちょうど長方形。
  • このPdfTemplateColumnTextを描く。回転を心配しないで、列に追加する内容を任意の長方形で塗りつぶすだけです。
  • オブジェクト内にPdfTemplateをラップします。これは、便宜上、数学を避けるためです。これはテキストがラスタライズされることを意味しません。
  • Imageに回転と絶対位置を適用し、ドキュメントに追加します。

あなたの問題は今;-)

PSを解決している:私はアクション帳にiTextのの著者です。両方の私たちの友人(ブルーノ& BernalCarlos)へ

+0

あなたは正しいです!問題が解決しました。どうもありがとうございます。 – BernalCarlos

+0

@BrunoLowagieは、iText in Action(2nd Ed。)の3.3.1章で 'ColumnText.setSimpleColumn()'と '.setText(myPhrase)'を使うときにテキストを回転させるのに最も良い方法でしょうか? – Ben

+0

この質問が[StackOverflowのベストiText質問](https://leanpub.com/itext_so)でどのように答えられたかを見てみましょう。実際には、あなたの質問は、この質問に対するEDITで答えられます。唯一の違いは、BernalCarlosはコンポジットモードで 'ColumnText'を使用しますが、テキストモードを使用していることです。違いは無料の電子ブックで説明されています。 –

1

感謝 自分のプロジェクトで「RTL」を使用するユーザーのための私の最終的なコードはここにある:

// step 1 
Document document = new Document(); 
document.setPageSize(PageSize.A4); 

// step 2 
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destination_file)); 
CreateBorder event = new CreateBorder(); 
writer.setPageEvent(event); 

// step 3 
document.open(); 

// step 4 
int imgWidth=400; 
int imgHeight=50; 
//Create the template that will contain the text 
PdfContentByte canvas = writer.getDirectContent(); 
PdfTemplate textTemplate = canvas.createTemplate(imgWidth, imgHeight); 
//The width and height of the text to be inserted 

ColumnText columnText = new ColumnText(textTemplate); 
columnText.setSimpleColumn(0, 0, imgWidth, imgHeight); 
columnText.setRunDirection(PdfWriter.RUN_DIRECTION_RTL); 
columnText.addElement(new Paragraph("محاسبه بار غیر متعادل", font_IranSemiBold)); 
columnText.go(); 

//Create de image wraper for the template 
Image textImg = Image.getInstance(textTemplate); 

//Asign the dimentions of the image, in this case, the text 
textImg.setInterpolation(true); 
textImg.scaleAbsolute(imgWidth, imgHeight); 
textImg.setRotationDegrees(90); //Arbitrary number of degress 
textImg.setAbsolutePosition(50, 200); 

//Add the text to the pdf 
document.add(textImg); 

// step 5 
document.close(); 
関連する問題