5

XMLWorker を使用して HTML 文字列を PDF ドキュメントに解析していますが、生成される PDF の行間隔を制御する方法が見つかりません。

Document document = new Document(PageSize.LETTER, 72f, 72f, 108f, 90f);
MemoryStream stream1 = new MemoryStream();
PdfWriter pdfWriter = PdfWriter.GetInstance(document, stream1);

document.Open();

//parse HTML into document
XMLWorkerHelper.GetInstance().ParseXHtml(pdfWriter, document, new StringReader(summary.Content));

「summary.Content」は、データベース フィールドからの HTML 文字列です。

さて、最近 ITextSharp ライブラリを 5.5.5.0 にアップグレードし、新しい XMLWorker ライブラリにアップグレードしました。上記のコードを使用すると、行間隔 (PDF で言えば「先頭」) は、以前に生成された PDF よりもはるかに小さくなります。行間が以前と同じに見えるようにする必要があります。

作成した段落に先頭を設定できることを読みましたが、単に ParseXHtml() を呼び出すだけでは役に立ちません。ITextSharp の既定のサイズは、フォント サイズの 1.5 倍です。

ここで、この行を使用して XML Worker に同梱されている default.css を使用できるitextsupport ドキュメントを読みました。

CSSResolver cssResolver = XMLWorkerHelper.getInstance().getDefaultCssResolver(true);

デフォルトの CSS は、古い PDF と同じリードで PDF を生成するのではないかと考えましたが、次のコードは、ParseXHtml() を使用した場合と同じ出力 PDF になりました。

var sr = new StringReader(summary.Content);

HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(true);
IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, pdfWriter)));

XMLWorker worker = new XMLWorker(pipeline, true);
XMLParser xmlParse = new XMLParser(true, worker);

document.Open();

xmlParse.Parse(sr);

生成する PDF ドキュメントの行の高さ (行間、行間) を制御する必要があります。誰かが私を正しい方向に向けるのを手伝ってくれますか? 私はいくつかのオプションを試しています。これらのいずれかは意味がありますか?

  • さまざまな HTML タグの line-height を定義するディレクトリに CSS ファイルを作成し、それをストリームで読み取り、それを に渡しparseXHtml(PdfWriter writer, Document doc, InputStream in, InputStream inCssFile)ます。
  • 行の高さを指定するドキュメントのフォントを定義しますか? 私は見ましたが、これを行う方法が見つかりませんでした。
4

1 に答える 1