fix: 修复 Better-EN5 侧 EnbxReader 类型错误 + PptxImporter Relationship 命名空间修复

This commit is contained in:
雾启工作室
2026-06-28 12:14:46 +08:00
parent 8c9c62fb74
commit 0c189d203d
4 changed files with 25 additions and 17 deletions

View File

@@ -12,6 +12,7 @@ namespace BetterEN5.Services.Conversion
private static readonly XNamespace A = "http://schemas.openxmlformats.org/drawingml/2006/main";
private static readonly XNamespace P = "http://schemas.openxmlformats.org/presentationml/2006/main";
private static readonly XNamespace R = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
private static readonly XNamespace Rel = "http://schemas.openxmlformats.org/package/2006/relationships";
private int _nextId;
@@ -33,9 +34,11 @@ namespace BetterEN5.Services.Conversion
ExtractMediaFiles(pptx, doc);
var slideRels = GetSlideRelations(pptx, pres);
var presPartUri = PackUriHelper.CreatePartUri(new Uri("/ppt/presentation.xml", UriKind.Relative));
foreach (var (relId, target, slideNum) in slideRels)
{
var slidePart = pptx.GetPart(PackUriHelper.CreatePartUri(new Uri(target, UriKind.Relative)));
var resolvedUri = PackUriHelper.ResolvePartUri(presPartUri, new Uri(target, UriKind.Relative));
var slidePart = pptx.GetPart(resolvedUri);
var slideXml = XDocument.Load(slidePart.GetStream());
var slide = new SmfSlide { Id = $"slide_{slideNum}" };
@@ -100,7 +103,7 @@ namespace BetterEN5.Services.Conversion
if (relsPart != null)
{
var rels = XDocument.Load(relsPart.GetStream());
var rel = rels.Root?.Elements("Relationship")
var rel = rels.Root?.Elements(Rel + "Relationship")
.FirstOrDefault(r => (string)r.Attribute("Id") == embed);
if (rel != null)
{
@@ -228,7 +231,7 @@ namespace BetterEN5.Services.Conversion
var relsPart = GetSlideRelsPart(pptx, slide.Id);
if (relsPart == null) return;
var rels = XDocument.Load(relsPart.GetStream());
var rel = rels.Root?.Elements("Relationship")
var rel = rels.Root?.Elements(Rel + "Relationship")
.FirstOrDefault(r => (string)r.Attribute("Id") == embed);
if (rel == null) return;
@@ -731,7 +734,7 @@ namespace BetterEN5.Services.Conversion
var relsUri = PackUriHelper.CreatePartUri(new Uri("/_rels/.rels", UriKind.Relative));
var relsPart = pptx.GetPart(relsUri);
var rels = XDocument.Load(relsPart.GetStream());
var officeRel = rels.Root?.Elements("Relationship")
var officeRel = rels.Root?.Elements(Rel + "Relationship")
.FirstOrDefault(r => (string)r.Attribute("Type") ==
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument");
if (officeRel == null) throw new InvalidDataException("未找到 Office Document 关系");
@@ -774,7 +777,7 @@ namespace BetterEN5.Services.Conversion
}
}
var relDict = rels.Root?.Elements("Relationship")
var relDict = rels.Root?.Elements(Rel + "Relationship")
.Where(r => (string)r.Attribute("Type") == slideType)
.ToDictionary(r => (string)r.Attribute("Id"), r => (string)r.Attribute("Target"));