【发布时间】:2014-03-27 01:43:57
【问题描述】:
我有 MVC 应用程序,我可以在其中拨打电话并在 PDF 上打印一条记录。我现在需要做的是将模型中的所有记录打印到 PDF 文件中,每页一条记录。我的记录正在通过 HTML 视图和 Razor 引擎进行格式化。我该如何做到这一点?
这是我实际创建 PDF 的代码 -
private void CreatePDF(string HTMLData, string fileName)
{
StringReader reader = new StringReader(HTMLData);
//Create PDF document
Document doc = new Document(PageSize.A4, 36, 36, 36, 36);
HTMLWorker parser = new HTMLWorker(doc);
StyleSheet styles = new StyleSheet();
styles.LoadTagStyle(HtmlTags.TABLE, HtmlTags.SIZE, "6pt");
styles.LoadTagStyle(HtmlTags.H3, HtmlTags.SIZE, "10pt");
styles.LoadTagStyle(HtmlTags.H5, HtmlTags.SIZE, "6pt");
parser.SetStyleSheet(styles);
PdfWriter.GetInstance(doc, new FileStream(fileName, FileMode.Create));
doc.Open();
try
{
//Parse Html and dump the result in PDF file
parser.Parse(reader);
}
catch (Exception ex)
{
//Display parser errors in PDF.
Paragraph paragraph = new Paragraph("Error!" + ex.Message);
Chunk text = paragraph.Chunks[0] as Chunk;
if (text != null)
{
text.Font.Color = BaseColor.RED;
}
doc.Add(paragraph);
}
finally
{
doc.Close();
}
}
这是生成带有一条记录的单个 PDF 的调用函数 -
var oOrder = _unitOfWork.OrderRepository.Get.Where(m => m.Id == id).FirstOrDefault();
if (oOrder != null)
{
OrderViewModel vm = new OrderViewModel() { Order = oOrder, Customer = _unitOfWork.CustomerRepository.Find(oOrder.CustomerId) };
GetEntityViewModelLists(vm);
string receipt = RenderRazorViewToString(ControllerContext, "_Receipt", vm);
var fileName = "Order Receipt_" + oOrder.Id + ".pdf";
var filepath = System.IO.Path.GetTempPath();
var filePath = filepath + fileName;
CreatePDF(receipt, filePath);
return new FileStreamResult(new FileStream(filePath, FileMode.Open, FileAccess.Read), "application/pdf");
【问题讨论】:
标签: c# itextsharp