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
相关产品推荐
相关产品推荐

