3

私はiTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(TextReader reader, StyleSheet style)htmlテーブルをpdfドキュメントに変換するために使用しています。一部の行には大量のデータが含まれており、現在のページに収まらない可能性があるため、iTextSharpは新しいページを作成し、そこに行を配置します。行が次のページに収まらない場合は、正しく分割されます。

これらのページ分割を使用しないように指示する方法はありますか?これがどのように見えるかです:

行はiTextSharpによって次のページにドロップされます

4

3 に答える 3

5

私にとってうまくいったトリックは、の結果を調べてParseToList()、タイプの要素を探すことですPdfPTable。表示された場合は、そのSplitLateプロパティを に設定しますFalse。以下は、かなり簡単に C# に変換できる VB です。

Dim Elements = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(SR, Nothing)
For Each El In Elements
    If TypeOf El Is PdfPTable Then
        DirectCast(El, PdfPTable).SplitLate = False
    End If
    Doc.Add(El)
Next
于 2011-06-23T21:02:34.347 に答える
3

クリス・ハースの答えは素晴らしいです-私にとってはうまくいきました。C# の例を次に示します。

        string template = File.ReadAllText(@"C:\my_template.html");
        var htmlText = Engine.Razor.RunCompile(template, Guid.NewGuid().ToString(), model: GetViewModel());

        TextReader reader = new StringReader(htmlText);
        var document = new Document(PageSize.A4, 30, 30, 30, 30);

        using (var stream = new MemoryStream())
        {
            PdfWriter.GetInstance(document, stream);

            document.Open();
            var pages = HTMLWorker.ParseToList(reader, new StyleSheet());
            foreach (var page in pages)
            {
                if (page is PdfPTable)
                {
                    (page as PdfPTable).SplitLate = false;
                }
                document.Add(page as IElement);
            }

            document.Close();

            File.WriteAllBytes(@"C:\my_template.pdf", stream.ToArray());
        }
于 2016-01-22T11:03:47.857 に答える
0

テーブルの行は「アトミック」であり、特定のページをオーバーフローすると CROPPED になると確信しています。

上の画像の PDF は、次のページのその行に続きますか?

于 2011-06-23T20:53:24.857 に答える