私はこのような構造を避けるだろう:
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](https://i.stack.imgur.com/UYHTP.png)
。 「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を変更するだけです。それははるかに簡単です!
私は、このhtml内で定義されたhtmlとスタイルでの作業が動作していないため、このようにしています...フォントは考慮されていません。また、ラインハイトも正しくありません。また、使用するフォントを設定する方法として、この質問に答えていません。なぜ私はあなたが印刷対スクリーンの事を説明しているのかわかりません。それは私の質問で一度も言及されなかった。 – mate0
あなたのHTMLを教えてください。 HTMLがなければ、問題を再現することはできません。チュートリアルの例から分かるように、行の高さ、フォントファミリ、フォントスタイル、フォントサイズが考慮されます。あなたがすぐに提供されていないフォントを使用する場合は、 'FontProvider'を定義する必要があるかもしれないことに注意してください。質問の*焦点*が間違っていたら、すみません。質問が不明だったためかもしれません。余分な情報なしで "それは動作しません"と言う質問は、常に答えにくいです。 –