我有一个函数FillPdf()
,我用它来填充可编辑的pdf。现在我已经定义了它的参数类型,但我有三种不同的形式,每种形式都有不同的模型,所以我想要的是我的FillPdf()
接收相应的模型并使用它的数据。如何实现这一点。
FillPdf.cs
public static bool FillPdf(M2HDetail m2HUserDetails)
{
try
{
if (PdfFileSettingViewModel.M2HAuthorizationFormLocation == null)
return false;
var pdfReader = new PdfReader(PdfFileSettingViewModel.M2HAuthorizationFormLocation);
var sb = new StringBuilder();
foreach (DictionaryEntry de in pdfReader.AcroFields.Fields)
{
sb.Append(de.Key.ToString() + Environment.NewLine);
}
var newFile = Path.Combine(PdfFileSettingViewModel.TempFolderLocation, string.Format("{0}_{1}.pdf", "M2HForm",SessionItems.UserId));
System.IO.File.Copy(PdfFileSettingViewModel.M2HAuthorizationFormLocation, newFile);
var pdfStamper = new PdfStamper(pdfReader, new FileStream(newFile, FileMode.Create));
var pdfFormFields = pdfStamper.AcroFields;
var totalFields = pdfFormFields.Fields.Count;
var myParams = new List<string>();
#region # SetPdfFields #
pdfFormFields.SetField("Text1", m2HUserDetails.LastName);
pdfFormFields.SetField("Text2", m2HUserDetails.FirstName);
pdfStamper.FormFlattening = false;
#endregion
pdfStamper.Close();
return true;
}
catch (Exception ex)
{
var files = System.IO.Directory.GetFiles(PdfFileSettingViewModel.TempFolderLocation);
foreach (var file in files)
{
System.IO.File.Delete(file);
}
return false;
}
}
来电者功能
public ActionResult AuthorizationForm(M2HDetail model)
{
var isFillPdfSuccess = PdfFiller.FillPdf(model);
return View();
}
现在我希望我可以使用相同的pdf方法,如下所示:
public ActionResult AuthorizationFormHippa(HippaAuthForm model)
{
var isFillPdfSuccess = PdfFiller.FillPdf(model);
return View();
}
此外,我希望我的pdf方法可以将参数作为模型,如下所示:
public static bool FillPdf(ModelForm model)
{
}
请建议如何实现这一目标。因为将来我可以有3个以上的表格,每次我必须用不同的参数类型编写相同的方法。
答案 0 :(得分:2)
我个人会创建一个通用接口
#include
然后让所有模型实现此接口
public interface IPdfContent
{
// Add your common properties here
}
现在,对于public class HippaAuthForm : IPdfContent
{
}
课程,您可以执行此操作:
PdfFill
由于public static bool FillPdf(IPdfContent m2HUserDetails)
{
...
}
现在期待FillPdf
,您现在可以将任何实现Interface
的人传递给它。现在,您可以创建新模型而无需进行任何工作。
只需实现界面!
这也可以让你模拟你的模型,你可以更容易进行单元测试,因为你现在已经有了DI。
答案 1 :(得分:-1)
我认为你的标题有解决问题的线索。
你要做的就是,
PdfDetailsModel
。此模型类应具有FillPdf()
方法中必须具有的信息。 PdfDetailsModel
的特定模型类。此特定类将包含提供请求所需的其他信息。我们称之为PdfDetailsHippaAuthModel
。PdfDetailsHippaAuthModel
传递给接受基类对象的FillPdf
方法。FillPdf()
取决于基类,因此对任何派生实例都很满意。