fix: 修复 Better-EN5 侧 EnbxReader 类型错误 + PptxImporter Relationship 命名空间修复
This commit is contained in:
@@ -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"));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user