gpt4 book ai didi

c# - 将 iTextSharp 与 MVC 结合使用

转载 作者:行者123 更新时间:2023-11-30 22:45:41 27 4
gpt4 key购买 nike

我有一个关于使用 iTextSharp 的两部分问题。我已经构建了一个简单的 MVC 应用程序来在 SQL Server 数据库中存储有关“经验教训”的信息。当用户查看类(class)的详细信息时,我希望他们能够将类(class)另存为 PDF。我有一些工作代码,但 1) 我不确定我的方法是否合理,以及 2) MVC 应用程序使用 TinyMCE 富文本编辑器,当我将富文本放入 PDF 时,html 标签被显示。如何让 PDF 符合 html 格式(粗体、无序列表、段落等)?

下面是我用来生成 PDF 的代码。如果我的处理方式不正确,我将不胜感激。

谢谢。

public FilePathResult GetPDF(int id)
{
Lesson lesson = lessonRepository.GetLesson(id);

string pdf = @"C:\Projects\Forms\LessonsLearned\PDF\template_test.pdf";
string outputFilePath = @"C:\Temp\pdf_output\test_template_filled.pdf";

PdfReader pdfReader = null;

try
{

pdfReader = new PdfReader(pdf);

using (FileStream pdfOutputFile = new FileStream(outputFilePath, FileMode.Create))
{
PdfStamper pdfStamper = null;
try
{
pdfStamper = new PdfStamper(pdfReader, pdfOutputFile);

AcroFields acroFields = pdfStamper.AcroFields;

acroFields.SetField("title", lesson.Title);
acroFields.SetField("owner", lesson.Staff.FullName);
acroFields.SetField("date", lesson.DateEntered.ToShortDateString());
// field with rich text
acroFields.SetField("situation", Server.HtmlDecode(lesson.Situation));
acroFields.SetField("description", Server.HtmlDecode(lesson.Description));

pdfStamper.FormFlattening = true;

}
finally
{
if (pdfStamper != null)
{
pdfStamper.Close();
}
}
}
}
finally
{
pdfReader.Close();
}

return File(outputFilePath, "application/pdf", "Lesson_" + lesson.ID + ".pdf");

}

最佳答案

我要更改的方法的唯一主要组成部分是返回数据的方式。现在您使用的是固定文件路径,这意味着两个人同时发出请求将导致其中一个人出错。由于您不保存文件供以后使用,我会完全跳过 FileStream 并使用 MemoryStream。然后,您可以使用 FileStreamResult 返回 MIME 类型为 application/pdf 的流。

对于第二部分,您会遇到一些麻烦。 PDF 和 HTML 没有关系,因此 HTML 标签(只是纯文本)在 PDF 文档中没有特殊含义。如果您想将用户 HTML(由您的富文本控件生成)转换为合适的 PDF 富文本,您需要在中间使用 HTML 解析器。

iText 包含 HTMLWorker 类,这是一个部分 HTML 解析器(意味着它不会处理所有 html 标签或结构),旨在返回 PDF 兼容 block 。您也可以使用类似 HTMLAgilityPack 的东西可以更好地控制转换哪些标签,但您必须自己进行翻译。您还可以检查您的 Rich Edit 控件,看看它是否可以以更易于解析的格式返回 Rich Text。

关于c# - 将 iTextSharp 与 MVC 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2930222/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com