使用C#MVC我通过PdfResult传递HTML部分视图来创建报告。除了缺少页码之外,这确实提供了所需的内容。
GetDetails
只是调用返回结果列表的服务。然后使用结果列表作为模型调用printlist
视图(见下文)。
RazorPDF是否提供了在报告中放置页码的方法?
public ActionResult PrintReport(DateTime printDate)
{
var printModel = printController.GetDetails(printDate);
var pdfDoc = new PdfResult(printModel , "printlist");
return pdfDoc;
}
查看:
<paragraph style="font-family:Arial;font-size:18;">
<table width="100%" cellpadding="1.0" cellspacing="1.0" widths="5;5">
<row>
<cell borderwidth="0.5" left="false" right="false" top="false" bottom="false">
<chunk style="font-size:14;font-weight:bold;">@ViewBag.Title</chunk>
</cell>
<cell borderwidth="0.5" left="false" right="false" top="false" bottom="false" horizontalalign="Right">
<chunk style="font-size:14;font-weight:bold;">@Model.First().appointment_date.ToString().Substring(0,10)</chunk>
</cell>
</row>
</table>
</paragraph>
<table width="100%" cellpadding="1.0" cellspacing="1.0" widths="4;10;7;14;4;4;4;3;4;4;4;4">
<row>
<cell borderwidth="0.5" left="false" right="false" top="true" bottom="true"><chunk>Time</chunk></cell>
<cell borderwidth="0.5" left="false" right="false" top="true" bottom="true"><chunk>Name</chunk></cell>
<cell borderwidth="0.5" left="false" right="false" top="true" bottom="true"><chunk>Number</chunk></cell>
<cell borderwidth="0.5" left="false" right="false" top="true" bottom="true"><chunk>Reason</chunk></cell>
</row>
@foreach (var item in Model)
{
<row>
<cell>@item.appointmentStart</cell>
<cell>@item.surname,@item.forename</cell>
<cell>@item.customerIdentifier</cell>
<cell>@item.reason</cell>
</row>
}
</table>
答案 0 :(得分:3)
RazorPDF无法在PDF文件中设置页码。这是因为它具有Object - &gt;中可用的属性。 ActionResult - &gt; ViewResultBase - &gt; ViewResult(您可以通过扩展引用并双击RazorPDF在visual studio中查看这些内容。)
要添加页码,您必须在视图中进行计算以确定分页的位置并将其放入。您可以通过将参数传递给视图来表示它是否是用于创建pdf并仅显示当时的页码。
我遇到了类似的问题并尝试了各种软件包(RazorPDF,iTextSharp和HiQPdf)。如果您不限于RazorPDF,我建议您查看HiQPdf。您基本上可以设置一个定义页眉和页脚元素的ActionResult,将视图的html传递给它,它将为您的页眉和页脚提供任何您想要的PDF(如果您设置它们)。对于页码编号,它很简单:
var pdfWorker = new HtmlToPdf();
var html = "Html as string including tags";
var url = "Whatever url you are converting - still works if empty string";
pdfWorker.Document.Footer.Enabled = true;
var pageNumberFont = new Font(new FontFamily("Arial"), 8, GraphicsUnit.Point);
var pageNumberText = new PdfText(x-position, y-position, "Page {CrtPage} of {PageCount}, pageNumberFont);
pdfWorker.Document.Footer.Layout(pageNumberText);
return pdfWorker.ConvertHtmlToPdfDocument(html, url);
我的代码中有一些额外的自定义 - 但这应该是在每页底部为您提供“Page x of y”页脚的基本数量。
编辑:由于解决方案仅限于免费选项,因此我建议您查看iTextSharp。如果你正在使用NuGet,你可以通过NuGet包获得它。
至于使用iTextSharp,开始的好地方是:
答案 1 :(得分:1)
Nick建议的快速回答是NO,RazorPDF不支持自动将页码添加到文档中。
RazorPDF使用较旧版本的iTextSharp,我相信这是最新的免费iTextSharp版本。最新版本(5.5.5)根据AGPL许可证提供。
RazorPDF中的最新iTextSharp版本
package id =“iTextSharp”version =“4.1.2”targetFramework =“net40”
如果渲染HTML不是破解者,您可以查看PDFsharp & MigraDoc。 MigraDoc提供了页面编号功能,如here.
所示希望这会有所帮助。