Создание PDF-файла из HTML с динамическим верхним и нижним колонтитулом с использованием AJAX — создание PDF-файла преры ⇐ C#
Создание PDF-файла из HTML с динамическим верхним и нижним колонтитулом с использованием AJAX — создание PDF-файла преры
У меня проблема с созданием PDF. сценарий: я создаю PDF из HTML. Мне нужно динамически создавать отдельные HTML-коды для областей нижнего колонтитула и заголовка. Проблема: после получения основного HTML-контента в соответствии с моим черновиком через ajax-запрос я загружаю файл на сервер для нижнего колонтитула. Открываю скачанный файл и меняю в нем текст с помощью Заменить. Потом загружаю в указанную мной папку с новым именем. После загрузки файла в папку страница обновляется, и процесс создания PDF-файла прерывается. Ниже я дам вам свои js-коды и методы в контроллере. Какое решение мне следует реализовать? Строка, в которой возникает проблема: await System.IO.File.WriteAllTextAsync(footerFilePath, footerContent); JS-коды:
function loadTemplateContent(pdfTemplateID) { var fDocumentGUID = $('#documentGUID').val(); $.ajax({ URL: '/_Ajax/GetPDFTemplateContent', данные: { pdfTemplateID: pdfTemplateID, fDocumentGUID: fDocumentGUID }, успех: функция (данные) { исходное содержание = данные; CKEDITOR.instances['TemplateContent'].setData(данные); //footerContent = data.footer; } }); } метод:
[HttpGet] общедоступная асинхронная задача GetPDFTemplateContent (int pdfTemplateID, Guid? fDocumentGUID) { шаблон вар = ждут _serviceManager.PDFTemplates.GetByIdAsync(pdfTemplateID); если (шаблон == ноль) { вернуть Json(string.Empty); //возвращаем Json(new {header = string.Empty, content = string.Empty, footer = string.Empty }); } строковое содержимое = template.TemplateContent; строка footerContent = string.Empty; если (fDocumentGUID.HasValue) { вар fDocument = ждут _serviceManager.FDocuments.GetEntityAsync(a => a.GUID == fDocumentGUID.Value); если (fDocument!= ноль) { var selectedDataVW = ждут _serviceManager.VW_FDocuments.GetEntityAsync(a => a.GUID == fDocumentGUID.Value); var customerAdress = _serviceManager.Customers.GetValue(a => a.GUID == selectedDataVW.CustomerGUID, «Адрес»); вар ответственныйМембер = ждут _serviceManager.VW_Members.GetEntityAsync(a => a.MemberID == selectedDataVW.ResponsibleMemberID); вар obligatoryMemberNames = ждут _MemberDataService.GetMemberIDsWithNamesAndTypes(fDocument.ObligatoryMemberIDs, false); вар (infoMemberNames, infoMemberTypeNames) = ждут _MemberDataService.GetMemberIDsWithNamesAndTypes (fDocument.InfoMemberIDs, true); content = content.Replace("$$FDocNo$$", selectedDataVW.FDocNo); content = content.Replace("$$FDocDate$$", selectedDataVW.FDocDate.ToShortDateString()); content = content.Replace("$$CustomerName$$", selectedDataVW.CustomerName); content = content.Replace("$$CustomerAdress$$", customerAdress); content = content.Replace("$$ResponsibleMember$$", ответственныйMember.NameSurname); content = content.Replace("$$ResponsibleMemberTitle$$", ответственныйMember.MemberTypeName); content = content.Replace("$$InfoMember$$", infoMemberNames); content = content.Replace("$$InfoMemberTitle$$", infoMemberTypeNames); content = content.Replace("$$ТоплантияКатиланлар$$", obligatoryMemberNames.MemberNameSurname); } } //нижний колонтитул строка footerUrl = $"https://tkba.tdub.org.tr/lib/Templates/ ... FooterText}"; footerContent = ждут _PdfService.DownloadContent(footerUrl); строка formattedDate = DateTime.Now.ToString("ггггММддЧЧммссффф"); вар AllowFooters = новый список { "Footer_1.html", "Footer_3.html" }; если (allowedFooters.Contains(template.FooterText)) { var FooterFileName = $"{template.FooterText}-{formattedDate}.html"; строка footerFilePath = Path.Combine(_env.WebRootPath, «изображения/Загрузки», FooterFileName); вар fDocument = ждут _serviceManager.FDocuments.GetEntityAsync(a => a.GUID == fDocumentGUID.Value); вар (infoMemberNames, infoMemberTypeNames) = ждут _MemberDataService.GetMemberIDsWithNamesAndTypes (fDocument.InfoMemberIDs, true); footerContent = footerContent.Replace("$$InfoMember$$", infoMemberNames); footerContent = footerContent.Replace("$$InfoMemberTitle$$", infoMemberTypeNames); ждут System.IO.File.WriteAllTextAsync(footerFilePath, footerContent); //footerContent = FooterFileName; } //нижний колонтитул // возвращаем Json (новый { успех = true, контент = контент, нижний колонтитул = footerContent }); вернуть Json (содержимое); } Когда я выбираю один из черновиков, включенных в список выбора, содержимое соответствующего черновика загружается, затем я загружаю поле нижнего колонтитула черновика с URL-адреса на сервере и заменяю соответствующие поля. После этого я хочу загрузить текущий нижний колонтитул в папку. После загрузки в папку я хочу получить здесь имя текущего нижнего колонтитула и продолжить метод создания PDF-файла. моя проблема; После создания и загрузки файла страница обновляется. Таким образом, я не могу создать свой HTML-контент в формате PDF.
решено: если включена горячая перезагрузка, страница обновляется при загрузке файлов. Проблема была решена путем отключения этой функции в vs studio.
У меня проблема с созданием PDF. сценарий: я создаю PDF из HTML. Мне нужно динамически создавать отдельные HTML-коды для областей нижнего колонтитула и заголовка. Проблема: после получения основного HTML-контента в соответствии с моим черновиком через ajax-запрос я загружаю файл на сервер для нижнего колонтитула. Открываю скачанный файл и меняю в нем текст с помощью Заменить. Потом загружаю в указанную мной папку с новым именем. После загрузки файла в папку страница обновляется, и процесс создания PDF-файла прерывается. Ниже я дам вам свои js-коды и методы в контроллере. Какое решение мне следует реализовать? Строка, в которой возникает проблема: await System.IO.File.WriteAllTextAsync(footerFilePath, footerContent); JS-коды:
function loadTemplateContent(pdfTemplateID) { var fDocumentGUID = $('#documentGUID').val(); $.ajax({ URL: '/_Ajax/GetPDFTemplateContent', данные: { pdfTemplateID: pdfTemplateID, fDocumentGUID: fDocumentGUID }, успех: функция (данные) { исходное содержание = данные; CKEDITOR.instances['TemplateContent'].setData(данные); //footerContent = data.footer; } }); } метод:
[HttpGet] общедоступная асинхронная задача GetPDFTemplateContent (int pdfTemplateID, Guid? fDocumentGUID) { шаблон вар = ждут _serviceManager.PDFTemplates.GetByIdAsync(pdfTemplateID); если (шаблон == ноль) { вернуть Json(string.Empty); //возвращаем Json(new {header = string.Empty, content = string.Empty, footer = string.Empty }); } строковое содержимое = template.TemplateContent; строка footerContent = string.Empty; если (fDocumentGUID.HasValue) { вар fDocument = ждут _serviceManager.FDocuments.GetEntityAsync(a => a.GUID == fDocumentGUID.Value); если (fDocument!= ноль) { var selectedDataVW = ждут _serviceManager.VW_FDocuments.GetEntityAsync(a => a.GUID == fDocumentGUID.Value); var customerAdress = _serviceManager.Customers.GetValue(a => a.GUID == selectedDataVW.CustomerGUID, «Адрес»); вар ответственныйМембер = ждут _serviceManager.VW_Members.GetEntityAsync(a => a.MemberID == selectedDataVW.ResponsibleMemberID); вар obligatoryMemberNames = ждут _MemberDataService.GetMemberIDsWithNamesAndTypes(fDocument.ObligatoryMemberIDs, false); вар (infoMemberNames, infoMemberTypeNames) = ждут _MemberDataService.GetMemberIDsWithNamesAndTypes (fDocument.InfoMemberIDs, true); content = content.Replace("$$FDocNo$$", selectedDataVW.FDocNo); content = content.Replace("$$FDocDate$$", selectedDataVW.FDocDate.ToShortDateString()); content = content.Replace("$$CustomerName$$", selectedDataVW.CustomerName); content = content.Replace("$$CustomerAdress$$", customerAdress); content = content.Replace("$$ResponsibleMember$$", ответственныйMember.NameSurname); content = content.Replace("$$ResponsibleMemberTitle$$", ответственныйMember.MemberTypeName); content = content.Replace("$$InfoMember$$", infoMemberNames); content = content.Replace("$$InfoMemberTitle$$", infoMemberTypeNames); content = content.Replace("$$ТоплантияКатиланлар$$", obligatoryMemberNames.MemberNameSurname); } } //нижний колонтитул строка footerUrl = $"https://tkba.tdub.org.tr/lib/Templates/ ... FooterText}"; footerContent = ждут _PdfService.DownloadContent(footerUrl); строка formattedDate = DateTime.Now.ToString("ггггММддЧЧммссффф"); вар AllowFooters = новый список { "Footer_1.html", "Footer_3.html" }; если (allowedFooters.Contains(template.FooterText)) { var FooterFileName = $"{template.FooterText}-{formattedDate}.html"; строка footerFilePath = Path.Combine(_env.WebRootPath, «изображения/Загрузки», FooterFileName); вар fDocument = ждут _serviceManager.FDocuments.GetEntityAsync(a => a.GUID == fDocumentGUID.Value); вар (infoMemberNames, infoMemberTypeNames) = ждут _MemberDataService.GetMemberIDsWithNamesAndTypes (fDocument.InfoMemberIDs, true); footerContent = footerContent.Replace("$$InfoMember$$", infoMemberNames); footerContent = footerContent.Replace("$$InfoMemberTitle$$", infoMemberTypeNames); ждут System.IO.File.WriteAllTextAsync(footerFilePath, footerContent); //footerContent = FooterFileName; } //нижний колонтитул // возвращаем Json (новый { успех = true, контент = контент, нижний колонтитул = footerContent }); вернуть Json (содержимое); } Когда я выбираю один из черновиков, включенных в список выбора, содержимое соответствующего черновика загружается, затем я загружаю поле нижнего колонтитула черновика с URL-адреса на сервере и заменяю соответствующие поля. После этого я хочу загрузить текущий нижний колонтитул в папку. После загрузки в папку я хочу получить здесь имя текущего нижнего колонтитула и продолжить метод создания PDF-файла. моя проблема; После создания и загрузки файла страница обновляется. Таким образом, я не могу создать свой HTML-контент в формате PDF.
решено: если включена горячая перезагрузка, страница обновляется при загрузке файлов. Проблема была решена путем отключения этой функции в vs studio.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение