我试图访问驻留在wwwRoot中的两个文件夹。这些文件夹是“BlankPDFFiles”和“FilledPDFFiles”。我试图获取驻留在BlankPDFFiles文件夹中的空白PDF文件,并在文件中写入一些数据,然后将其保存到FilledPDFFiles文件夹中。这是我的解决方案的结构:
当我尝试访问空白PDF文件时,出现以下错误:
下面是我的代码
public class PDFController : Controller
{
private readonly IEmployeeService _employeeService;
public readonly IConfiguration _configuration;
public readonly ILogger _logger;
private readonly IWebHostEnvironment _environment;
public PDFController(IEmployeeService employeeService, IConfiguration configuration, ILogger<PDFController> logger, IWebHostEnvironment environment)
{
_employeeService = employeeService;
_configuration = configuration;
_logger = logger;
_environment = environment;
}
public async Task<IActionResult> Index()
{
await PopulatePDFDoc();
return View();
}
public async Task PopulatePDFDoc()
{
AckPackage.Data.PDFPopulate.DocPDF doc = new Data.PDFPopulate.DocPDF();
string pdfLic = _configuration["PDFLicense"].ToString();
string filledPDF = Path.Combine(_environment.WebRootPath, "FilledPDFFiles");
string blankPDF = Path.Combine(_environment.WebRootPath, "BlankPDFFiles");
EmployeeInfo employee = await _employeeService.GetEmployeeByEmployeeNumber(up.EmployeeId);
await doc.popolatePDFDoc(pdfLic, filledPDF, blankPDF, employee);
}
这是我在populatePDFDoc方法中的内容:
public async Task popolatePDFDoc(string PDFLic, string filledPDF, string blankPDF, EmployeeInfo employee)
{
string pathToFile = filledPDF + "_Package"+ "_" + employee.EmployeeNumber;
bool validLicense = BitMiracle.Docotic.LicenseManager.HasValidLicense;
**using (PdfDocument pdf = new PdfDocument(blankPDF))**
{
foreach (PdfControl control in pdf.GetControls())
{
switch (control.Name)
{
case "EmpID":
((PdfTextBox)control).Text = employee.EmployeeNumber;
break;
case "Last Name":
((PdfTextBox)control).Text = employee.LastName;
break;
}
}
pdf.Save(pathToFile);
}
我在popolatePDFDoc中的此行收到错误
using (PdfDocument pdf = new PdfDocument(blankPDF))
我正在使用第三方供应商工具来填充PDF文件。
1条答案
按热度按时间jvlzgdj91#
这与PDF库供应商无关,可能是因为您的Web应用程序的
exe
是从blankPDF
指向的路径之外的目录运行的。通过在异常发生之前的某个地方调用
Environment.CurrentDirectory
并在其上放置断点来查看它,可以查看应用程序运行的目录。如果您正在本地开发并遇到此错误,则应用程序可能正在文件夹
C:\AllITProjects\AckPackage\bin\Debug\net7.0
中运行。wwwroot
文件夹并不总是可以从应用程序写入,这取决于您运行应用程序的方式。但是,项目文件夹总是可以写入的,因为项目文件夹是应用程序exe
所在的位置。因此,以下是将PDF文件夹移动到项目文件夹的步骤,这将确保它们保持可写状态:1.将
BlankPDFFiles
和FilledPDFFiles
文件夹从wwwroot
文件夹中移出,并移入项目文件夹(.csproj
文件所在的文件夹)。2.在记事本中打开
.csproj
文件,并添加以下行,告诉编译器在编译时复制PDF文件夹:3.将
filledPDF
和blankPDF
更改为使用_environment.ContentRootPath
:4.您必须在专门为
filledPDF
路径中的PDF提供服务的控制器中创建一个操作,因为它将不再驻留在wwwroot
文件夹中。如果您需要更多帮助,尤其是步骤4,请告诉我。