Я использую Telerik: компонент RadEditor для Asp. Net до сохранить открытый XML и html отчет , мне нужно скачать файл формата слова из этот html отчет с использованием библиотеки DocumentFormat.Open XML от Microsoft , код, который я использовал, работает успешно, но не видит изображение после загрузки файла слова.
Я попробовал приведенные ниже ссылки, но изображение также не отображается.
https://docs.microsoft.com/en-us/office/open-xml/how-to-insert-a-picture-into-a-word-processing-document
https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.wordprocessing.altchunk?view=openxml-2.8.1
Добавить HTML Строка для открытия XML (* .docx) документа
Как вставить не встроенное изображение в текстовый документ с помощью VB6?
Добавление изображения в текстовый документ
Мой код выглядит следующим образом:
protected void btnsavetoword_Click(object sender, EventArgs e)
{
try
{
clsReportTemplateBO objexist = new clsReportTemplateBO();
objexist.RefNo = hdnRefNo.Value;
objexist.CreatedBy = clsUser.UserName;
List<clsReportTemplateBO> objReport = clsReportTemplateBL.GetSavedReports(objexist);
if (objReport.Count > 0)
{
string ReportText = edrReport.Content;
ReportText = ReportText.Replace(objReport[0].HeaderHTML, "");
ReportText = ReportText.Replace(objReport[0].FooterHTML, "");
objexist.ReportCode = objReport[0].ReportCode;
foreach (clsReportTemplateBO datarow in objReport)
{
if (datarow.ReportFormat == "Word")
{
objexist.PatientReportId = datarow.PatientReportId;
}
}
if (objReport.Count == 2)
{
string PatientReportId = objexist.PatientReportId;
ConverttoWord(objexist.ReportCode, PatientReportId, ReportText);
rdWMngr.RadAlert("Report saved successfully", 400, 150, "Report", null, clsConstants.SucccessMessage);
}
else if (objReport.Count == 1 && objReport[0].ReportFormat == "HTML")
{
objexist.ReportName = objReport[0].ReportName;
objexist.HID = objReport[0].HID;
objexist.CreatedBy = clsUser.UserName;
objexist.ReportFormat = "Word";
objexist.RefNo = hdnRefNo.Value;
if (clsReportTemplateBL.SavePatientReport(objexist))
{
string PatientReportId = objexist.PatientReportId;
ConverttoWord(objexist.ReportCode, PatientReportId, ReportText);
rdWMngr.RadAlert("Report saved successfully", 400, 150, "Report", null, clsConstants.SucccessMessage);
}
}
else if (objReport.Count == 1 && objReport[0].ReportFormat == "Word")
{
string PatientReportId = objexist.PatientReportId;
ConverttoWord(objexist.ReportCode, PatientReportId, ReportText);
rdWMngr.RadAlert("Report saved successfully", 400, 150, "Report", null, clsConstants.SucccessMessage);
}
}
else
{
clsReportTemplateBO obj = new clsReportTemplateBO();
string ReportCode = HttpContext.Current.Session["ReportCode"].ToString();
obj = clsReportTemplateBL.GetReportTemplate(ReportCode);
obj.ReportName = ReportName;
obj.ReportCode = ReportCode;
obj.HID = HID;
obj.CreatedBy = clsUser.UserName;
obj.ReportFormat = "Word";
obj.RefNo = hdnRefNo.Value;
string ReportText = edrReport.Content;
ReportText = ReportText.Replace(obj.HeaderHTML, "");
ReportText = ReportText.Replace(obj.FooterHTML, "");
if (clsReportTemplateBL.SavePatientReport(obj))
{
string PatientReportId = obj.PatientReportId;
ConverttoWord(ReportCode, PatientReportId, ReportText);
rdWMngr.RadAlert("Report saved successfully", 400, 150, "Report", null, clsConstants.SucccessMessage);
}
}
}
catch
{
rdWMngr.RadAlert("Report saved failed", 400, 150, "Report", null, clsConstants.ErrorMessage);
}
}
Метод ConvertToWord выглядит следующим образом:
protected void ConverttoWord(string ReportCode, string PatientReportId, string ReportText)
{
string domain = HttpContext.Current.Request.Url.Authority;
string RefNo = hdnRefNo.Value;
int PatientReportDetailId = clsReportTemplateBL.SavePatientReportDetail(PatientReportId, RefNo, domain, clsUser.UserName);
string sourceFile = HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["ReportFormatPath"].ToString() + ReportCode + ".docx");
string destFile = HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["SavedReportPath"].ToString() + RefNo + PatientReportDetailId.ToString() + ".docx");
System.IO.FileInfo file = new System.IO.FileInfo(sourceFile);
System.IO.FileInfo dest = new System.IO.FileInfo(destFile);
if (file.Exists)
{
if (dest.Exists)
{
rdWMngr.RadAlert("File already converted. Try to download from Saved Report", 400, 150, "Saved Report", null, clsConstants.WarningMessage);
}
else
{
File.Copy(sourceFile, destFile);
}
exporttoword(destFile, ReportText);
}
else
{
rdWMngr.RadAlert("File not exist on " + sourceFile, 400, 150, "Saved Report", null, clsConstants.WarningMessage);
}
}
Метод ExportToWord выглядит следующим образом:
private void exporttoword(string FilePath, string ReportText)
{
using (WordprocessingDocument myDoc = WordprocessingDocument.Open(FilePath, true))
{
string altChunkId = "AltChunkId1";
MainDocumentPart mainPart = myDoc.MainDocumentPart;
AlternativeFormatImportPart chunk = mainPart.AddAlternativeFormatImportPart("application/xhtml+xml"/*AlternativeFormatImportPartType.Html*/, altChunkId);
//string stamp = "~/images/Menu/EStamp.png"; //Location of image that I need to insert into word when i save
using (Stream chunkStream = chunk.GetStream(FileMode.Create, FileAccess.Write))
{
using (StreamWriter streamWriter = new StreamWriter(chunkStream))
{
streamWriter.Write(ReportText);
}
}
AltChunk altChunk = new AltChunk();
altChunk.Id = altChunkId;
// this inserts altChunk after the last Paragraph
mainPart.Document.Body
.InsertAfter(altChunk, mainPart.Document.Body.Elements<Paragraph>().Last());
mainPart.Document.Save();
}
//Download
System.IO.FileInfo file = new System.IO.FileInfo(FilePath);
if (file.Exists)
{
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.WriteFile(file.FullName);
Response.End();
}
else
{
rdWMngr.RadAlert("Error", 400, 150, "Saved Report", null, clsConstants.WarningMessage);
}
}
Как вставить изображение в файл слова, когда мне нужно загрузить его, используя библиотеку DocumentFormat.Open XML в Asp. Net?