2017-12-22 56 views
0

itext7セットのフォントとサイズ

これは私が

//define style 
PdfFont fontRegular = FindFontInForm(pdf, new PdfName("OpenSans")); 
Style regular = new Style(); 
regular.SetFont(fontRegular).SetFontSize(9); 

//convert html IList<IElement> lst = HtmlConverter.ConvertToElements(val); 
Paragraph p = (Paragraph)lst[0]; p.AddStyle(regular); 

//size of field, need to put html paragraph on top of it 
PdfArray position = toSet.GetWidgets()[0].GetRectangle(); 
float width = (float)(position.GetAsNumber(2).GetValue() - position.GetAsNumber(0).GetValue()); 
float height = (float)(position.GetAsNumber(3).GetValue() - position.GetAsNumber(1).GetValue()); 
Rectangle rect = new Rectangle((float)position.GetAsNumber(0).GetValue(), (float)position.GetAsNumber(1).GetValue(), width, height);    

//canvas to add paragraph 
Canvas canvasField = new Canvas(canvas, pdf, rect); 
canvasField.Add(p); 
canvas.Rectangle(rect); 

である。しかしフォントが適用されません。

また、フォントとサイズをスパンhtml要素のスタイルで設定できますか?

答えて

1

私はこのような構造を避けるだろう:

PdfFont fontRegular = FindFontInForm(pdf, new PdfName("OpenSans")); 
Style regular = new Style(); 
regular.SetFont(fontRegular).SetFontSize(9); 
//convert html IList<IElement> lst = HtmlConverter.ConvertToElements(val); 
Paragraph p = (Paragraph)lst[0]; p.AddStyle(regular); 

HTMLをPDFに変換するときにこれは直感に反するです。

代わりに、CSSを使用して、フォント、サイズ、およびスパン要素のスタイルを定義します。 iText 7を使用すると、異なるMediaQueriesを定義することもできます。たとえば、HTMLブラウザに表示されたときに特定のスタイルセットをHTMLで使用したいが、HTMLをPDFに変換する際に別のスタイルセットを使用する場合は、print.cssファイルで作業できます。

これはすべてHTML to PDF tutorialで説明されています。

chapter 2では、CSSを使用してスタイルを定義する方法を学習します。この例を見てみましょう:あなたは、テキストが小さいフォントサイズを持っている「この映画についての続きを読む」ことがわかり

enter image description here

。 「IMDB」は異なるフォントカラーを持っているとします。

<div class="imdb">Read more about this movie on 
    <a href="www.imdb.com/title/tt4680182">IMDB</a></div> 

そして、CSSはこのように定義されました:あなたが見ることができるように

.imdb { 
    font-size: 0.8em; 
} 
a { 
    color: green; 
} 

は、<div>が定義されているclass属性imdbを持っているのHTMLは、このように定義されたためだ

CSSのフォントサイズを小さくする必要があります。 <a>タグのCSSは、テキストの色が緑色であることを定義しています。

これはすべて、標準のHTMLとCSSの機能です。 iText固有のものは何もありません。この場合、ブラウザに表示される内容はすべてPDFにも表示されます。

iTextのコードは、このように簡単です:それはこのように簡単することができた場合

HtmlConverter.convertToPdf(new File(src), new File(dest)); 

は、なぜあなたは物事が複雑になるだろうか?

Chapter 3は、画面に表示される内容とPDFに表示される内容との違いを作成する場合の対処方法を説明します。これを達成するためにprint.cssを使用しています(HTMLファイルを印刷すると、PDFはどうなるかを模倣します)。あなたのHTMLで

、あなたはこのようなものかもしれません:

<head> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <link rel="stylesheet" type="text/css" href="css/sxsw.css"/> 
    <link rel="stylesheet" media="print only" href="css/sxsw_print.css"> 
</head> 

sxsw.cssブラウザでHTMLを表示するときに使用されるCSSです。ブラウザからHTMLを印刷するときにprint.cssが使用されます。このHTMLには、iTextに特有のものは何もありません。これは、どのHTML開発者にとっても共通の機能です。

iTextでは、前述の1行だけを使用する場合は、sxsw.cssが使用されます。あなたの代わりにprint.cssを使用する場合は、ConvertorProperties変更する必要があります:私たちはMediaType.PRINTからMediaDeviceDescriptionを変更しているので、今

ConverterProperties properties = new ConverterProperties(); 
properties.setBaseUri(baseUri); 
MediaDeviceDescription mediaDeviceDescription = 
    new MediaDeviceDescription(MediaType.PRINT); 
properties.setMediaDeviceDescription(mediaDeviceDescription); 
HtmlConverter.convertToPdf(
    new FileInputStream(src), new FileOutputStream(dest), properties); 

を、print.cssスタイルが使用されます。

iText要素が必要な場合は、特定の四角形に追加できるようにコードが少しだけ異なります。それはchapter 1で説明しています:

List<IElement> elements = 
    HtmlConverter.convertToElements(new FileInputStream(src), properties); 

あなたは自分自身を頼むかもしれない:は、なぜ私はそれ私の方法で行うことはできませんか?なぜ、私のコードにフォントサイズ、スタイルなどを定義してはいけないのですか?

答えは簡単です:あなたのコードは維持するのが難しいでしょう!あなたの雇用主があなたに変更を適用するよう依頼した場合、コードを変更してコンパイルする必要があります。

公式のチュートリアルで説明したようにすれば、簡単です。あなたのコードを変更する必要があります。 CSSを変更するだけです。それははるかに簡単です!

+0

私は、このhtml内で定義されたhtmlとスタイルでの作業が動作していないため、このようにしています...フォントは考慮されていません。また、ラインハイトも正しくありません。また、使用するフォントを設定する方法として、この質問に答えていません。なぜ私はあなたが印刷対スクリーンの事を説明しているのかわかりません。それは私の質問で一度も言及されなかった。 – mate0

+0

あなたのHTMLを教えてください。 HTMLがなければ、問題を再現することはできません。チュートリアルの例から分かるように、行の高さ、フォントファミリ、フォントスタイル、フォントサイズが考慮されます。あなたがすぐに提供されていないフォントを使用する場合は、 'FontProvider'を定義する必要があるかもしれないことに注意してください。質問の*焦点*が間違っていたら、すみません。質問が不明だったためかもしれません。余分な情報なしで "それは動作しません"と言う質問は、常に答えにくいです。 –

関連する問題