You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QuestPDF添加第二张表格后第一张表格消失的问题处理

QuestPDF多表格显示问题解决方案

问题1:添加第二张表格后第一张消失的原因

QuestPDF中page.Content()方法的设计是每次调用都会重置页面的内容容器,而非追加内容。你先后两次调用page.Content().Table(...),第二次调用会完全覆盖第一次设置的内容,导致第一张表格被替换,最终只显示第二张表格。

问题2:修改代码实现同页显示两张表格

需要将两张表格放入同一个page.Content()容器内,通过Stack布局(默认垂直方向)来依次排列两个表格,确保内容被追加而非替换。

修改后的完整代码

using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
using QuestPDF.Previewer;

namespace HTMLToPDFWithQuestPDF
{
    class Program
    {
        static void Main(string[] args)
        {
            var document = Document.Create(container =>
            {
                container.Page(page =>
                {
                    page.Size(PageSizes.Letter);
                    page.Margin(1, Unit.Centimetre);
                    page.PageColor(Colors.White);
                    page.DefaultTextStyle(x => x.FontSize(10));
                    page.DefaultTextStyle(x => x.FontFamily(Fonts.Calibri));

                    page.Header()
                        .AlignRight()
                        .Text("Appendix 1")
                        .FontFamily("Arial")
                        .FontSize(10)
                        .LineHeight(1.5f)
                        .FontColor(Colors.Green.Lighten1);

                    // 将两张表格放入同一个Content容器的Stack中
                    page.Content().Stack(stack =>
                    {
                        // 第一张表格
                        stack.Item().Table(table =>
                        {
                            table.ColumnsDefinition(columns =>
                            {
                                columns.RelativeColumn();
                                columns.RelativeColumn();
                                columns.RelativeColumn();
                                columns.RelativeColumn();
                            });

                            // 复用Block样式配置
                            table.Cell()
                            .ColumnSpan(4)
                            .Row(1)
                            .Column(1)
                            .Element(Block)
                            .Text("PURCHASE ORDER")
                            .Bold()
                            .FontSize(20);

                            table.Cell().ColumnSpan(2).Row(2).Column(1).Element(Block);
                            table.Cell()
                            .ColumnSpan(4)
                            .Row(2)
                            .Column(1)
                            .Padding(5)
                            .Text(
                                "Barangay: " +
                                "\n" +
                                "Tel. No:"
                                )
                            .LineHeight(1f)
                            .FontSize(10);

                            table.Cell().ColumnSpan(2).Row(2).Column(3).Element(Block);
                            table.Cell()
                            .ColumnSpan(2)
                            .Row(2)
                            .Column(3)
                            .Padding(5)
                            .Text(
                                "City Municipality: " +
                                "\n" +
                                "Province: "
                                )
                            .LineHeight(1f)
                            .FontSize(10);

                            table.Cell().ColumnSpan(2).Row(3).Column(1).Element(Block);
                            table.Cell()
                            .ColumnSpan(2)
                            .Row(3)
                            .Column(1)
                            .Padding(5)
                            .Text(
                                "Supplier: " +
                                "\n" +
                                "Address: "
                                )
                            .LineHeight(1f)
                            .FontSize(10);

                            table.Cell().ColumnSpan(2).Row(3).Column(3).Element(Block);
                            table.Cell()
                            .ColumnSpan(2)
                            .Row(3)
                            .Column(3)
                            .Padding(5)
                            .Text(
                                "P.O. No.: " +
                                "\n" +
                                "Date: "
                                )
                            .LineHeight(1f)
                            .FontSize(10);

                            table.Cell().ColumnSpan(2).Row(4).Column(1).Element(Block);
                            table.Cell().ColumnSpan(2).Row(4).Column(1)
                            .Padding(5)
                            .Text(
                                "TIN:")
                            .FontSize(10);

                            table.Cell().ColumnSpan(2).Row(4).Column(3).Element(Block);
                            table.Cell().ColumnSpan(2).Row(4).Column(3)
                            .Padding(5)
                            .Text(
                                "Mode of Procurement:" +
                                "\n" +
                                "Bidding Negotiated Over the Counter")
                            .FontSize(10);

                            table.Cell().ColumnSpan(4).Row(5).Column(1).Element(Block);
                            table.Cell()
                           .ColumnSpan(4)
                           .Row(5)
                           .Column(1)
                           .Padding(5)
                           .Text(
                                "Gentlemen:" +
                                "\n" +
                                "           Please deliver to this Office the following articles subject to the terms and conditions contained herein.")
                           .FontSize(10);

                            table.Cell().ColumnSpan(2).Row(6).Column(1).Element(Block);
                            table.Cell().ColumnSpan(2).Row(6).Column(1)
                            .Padding(5)
                            .Text(
                                "Place of Delivery: " +
                                "\n" +
                                "Date of Delivery: "
                                )
                            .LineHeight(1)
                            .FontSize(10);

                            table.Cell().ColumnSpan(2).Row(6).Column(3).Element(Block);
                            table.Cell().ColumnSpan(2).Row(6).Column(3)
                            .Padding(5)
                            .Text(
                                "Delivery Term: " +
                                "\n" +
                                "Payment Term: "
                                )
                            .LineHeight(1)
                            .FontSize(10);

                        });

                        // 可选:给两张表格添加垂直间距
                        stack.Item().PaddingVertical(10);

                        // 第二张表格
                        stack.Item().Table(newTable =>
                        {
                            newTable.ColumnsDefinition(columns =>
                            {
                                columns.RelativeColumn();
                                columns.RelativeColumn();
                                columns.RelativeColumn();
                            });

                            newTable.Cell()
                                .ColumnSpan(3)
                                .Row(1)
                                .Column(1)
                                .Element(Block)
                                .Text("Second Table Content")
                                .Bold()
                                .FontSize(16);
                        });
                    });

                    page.Footer()
                    .AlignCenter()
                    .Text(x =>
                    {
                        x.Span("Page ");
                        x.CurrentPageNumber();
                    });

                });
            });

            document.ShowInPreviewer();
        }

        static IContainer Block(IContainer container)
        {
            return container
                .Border(0.5f)
                .ShowOnce()
                .MinWidth(50)
                .MinHeight(25)
                .AlignCenter()
                .AlignMiddle();
        }
    }
}

关键修改点

  1. 将原来两次独立的page.Content().Table(...)调用,合并到同一个page.Content().Stack(...)容器中
  2. 用stack.Item()分别包裹两个表格,实现垂直排列
  3. 可选添加stack.Item().PaddingVertical(10)来给两张表格之间增加间距,提升可读性

内容的提问来源于stack exchange,提问作者Svene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 19:55:53