在NReco.PdfGenerator中如何自定义页码序列(首页1、次页3)
实现NReco.PdfGenerator自定义页码(第1页显示Page 1,第2页显示Page 3)
要实现这种非连续的自定义页码效果,核心是通过JavaScript动态修改页脚的页码显示值,利用NReco.PdfGenerator支持页眉/页脚HTML中嵌入脚本的特性来实现。具体操作如下:
修改页脚HTML,加入自定义逻辑
替换原有的PageFooterHtml配置,加入JavaScript代码来控制页码的显示规则:
public void GenerateHtmlToPdf() { var htmlContent = String.Format("<body>Hello world: {0}</body>", DateTime.Now); var htmlToPdf = new NReco.PdfGenerator.HtmlToPdfConverter(); // 自定义页脚:实现第1页显示Page 1,第2页及以后显示Page (当前页码+1) htmlToPdf.PageFooterHtml = @" <table style=""border-bottom: 1px solid black; width: 100%""> <tr> <td class=""section""></td> <td style=""text-align:right"">Page <span id=""customPage""></span></td> </tr> </table> <script> // 获取默认替换的当前页码值 var currentPage = parseInt(document.querySelector('.page').textContent); var displayNumber; // 根据页码设置显示值:第1页显示1,第2页显示3,后续页以此类推 if (currentPage === 1) { displayNumber = 1; } else { displayNumber = currentPage + 1; } // 将计算后的页码赋值给自定义显示元素 document.getElementById('customPage').textContent = displayNumber; // 隐藏默认的页码元素,避免重复显示 document.querySelector('.page').style.display = 'none'; </script>"; var pdfBytes = htmlToPdf.GeneratePdf(htmlContent); // 后续处理PDF字节流(如保存到文件、返回给客户端等) // ... }
关键逻辑说明
- NReco会自动将
<span class="page"></span>替换为当前的实际页码数字,我们通过JS获取这个值进行计算 - 针对第1页直接使用原页码,第2页及以后的页码在原数值基础上加1,满足第2页显示
Page 3的需求 - 新增
customPage元素用来展示最终的自定义页码,同时隐藏默认的.page元素避免重复内容
如果你的需求仅针对前两页(后续页码不需要调整),可以修改JS中的判断逻辑为:
if (currentPage === 1) { displayNumber = 1; } else if (currentPage === 2) { displayNumber = 3; } else { // 后续页码保持默认值 displayNumber = currentPage; }
内容的提问来源于stack exchange,提问作者Ahmad F
相关产品推荐
相关产品推荐

