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

C# ASP.NET中基于选中项数量设置iTextSharp PDF页面方向问题

解决iTextSharp中根据选中数量切换PDF页面方向的问题

你的代码始终输出纵向PDF,主要是两个原因导致的:

  • 初始化Document时直接用了PageSize.A4.Rotate()(横向),之后调用SetPageSize设置的自定义尺寸(850f, 1100f)并不是标准的纵向A4尺寸,而且iTextSharp中如果已经完成文档初始化(尤其是后续打开了PdfWriter),动态修改页面尺寸可能不会生效。
  • 标准纵向A4的尺寸是PageSize.A4,不需要自定义数值,你设置的850x1100和iTextSharp默认的A4纵向尺寸(595x842)不符,导致即使执行了代码也达不到预期效果。

修正后的代码方案

最直接可靠的方式是根据选中数量在初始化Document时就确定正确的页面方向,这样可以避免后续动态修改的问题:

int selectedCount = checkboxlistfirst.Items.Cast<System.Web.UI.WebControls.ListItem>().Count(li => li.Selected);

Document pdfDoc;
if (selectedCount <= 2)
{
    // 选中项≤2时,使用纵向A4页面
    pdfDoc = new Document(PageSize.A4, 0, 0, 5, 0);
}
else
{
    // 选中项>2时,使用横向A4页面
    pdfDoc = new Document(PageSize.A4.Rotate(), 0, 0, 5, 0);
}

// 后续的PDF写入逻辑(比如打开PdfWriter、添加内容等)
// 示例:
// PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
// pdfDoc.Open();
// // 添加内容...
// pdfDoc.Close();

为什么这个方案有效?

  • 直接在创建Document对象时就指定了正确的页面尺寸和方向,避免了后续动态修改可能带来的不生效问题。
  • 使用iTextSharp内置的PageSize.A4(纵向)和PageSize.A4.Rotate()(横向),保证尺寸是标准的打印尺寸,不会出现自定义尺寸导致的方向异常。

如果你确实需要在创建Document后动态修改方向(比如文档中间需要切换),需要确保在调用pdfDoc.Open()之前执行SetPageSize,并且使用标准尺寸:

Document pdfDoc = new Document(); // 先创建默认文档
int selectedCount = checkboxlistfirst.Items.Cast<System.Web.UI.WebControls.ListItem>().Count(li => li.Selected);

if (selectedCount <= 2)
{
    pdfDoc.SetPageSize(PageSize.A4);
}
else
{
    pdfDoc.SetPageSize(PageSize.A4.Rotate());
}
pdfDoc.SetMargins(0, 0, 5, 0); // 设置边距

// 之后再打开文档和Writer

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:06:04