Ich versuche, HTML -Inhalte mit OpenXML in Word zu konvertieren. /p>
Wenn es sich um Links zu Orten im selben Dokument handelt. Kennung für den Dokumentenort, zu dem er navigieren sollte. Das einzige Problem ist, dass Wort es eher als externer Link als als intern interpretiert. Dies:
Es öffnet direkt das "Platzieren". In diesem Dokument "Abschnitt" zeigt korrekt darauf, wo es sollte. />
Es wird die "Datei" oder die externe Website geöffnet "Abschnitt, da es die Hyperlinkpunkte an einen Ort außerhalb des Dokuments erfasst < /p>
So führe ich die Konvertierung durch: < /p>
public override System.IO.Stream Convert()
{
var memoryStream = new MemoryStream();
if (!string.IsNullOrEmpty(DocumentContent.Header))
DocumentContent.Header = Section.Remove(Document.Converter.Format.Word, DocumentContent.Header);
if (!string.IsNullOrEmpty(DocumentContent.Footer))
DocumentContent.Footer = Section.Remove(Document.Converter.Format.Word, DocumentContent.Footer);
string html = DocumentContent.Body;
html = FixOptionTagBadFormatter(html);
const string altChunkID = "AltChunkId1";
WordprocessingDocumentType documentType = ((WordSettings)Settings).IsTemplate ? WordprocessingDocumentType.Template : WordprocessingDocumentType.Document;
using (var myDoc = WordprocessingDocument.Create(memoryStream, documentType))
{
MainDocumentPart mainPart = myDoc.MainDocumentPart;
if (mainPart == null)
{
mainPart = myDoc.AddMainDocumentPart();
new DocumentFormat.OpenXml.Wordprocessing.Document(new List { new Body() }).Save(mainPart);
}
AlternativeFormatImportPart chunk = mainPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.Xhtml, altChunkID);
System.IO.Stream chunkStream = chunk.GetStream(FileMode.Create, FileAccess.Write);
string encoding = GetEncodingDocument(html);
using (var stringStream = new StreamWriter(chunkStream, Encoding.GetEncoding(encoding)))
{
stringStream.Write(html);
}
var altChunk = new AltChunk { Id = altChunkID };
mainPart.Document.Body.InsertAt(altChunk, 0);
if (DocumentContent.CoverPage != null)
{
AddCoverPage(mainPart, DocumentContent.CoverPage, encoding);
}
SectionProperties sectionProperties = new SectionProperties();
mainPart.Document.Body.Append(sectionProperties);
if (DocumentContent.Footer != null && DocumentContent.Header != null)
{
HeaderReference headerReference = new HeaderReference { Type = HeaderFooterValues.Default, Id = "rId1" };
sectionProperties.Append(headerReference);
// Add an empty footer to each section
FooterReference footerReference = new FooterReference() { Type = HeaderFooterValues.Default, Id = "rId2" };
sectionProperties.Append(footerReference);
// Add empty header and footer
HeaderPart headerPart = mainPart.AddNewPart("rId1");
headerPart.Header = new Header();
FooterPart footerPart = mainPart.AddNewPart("rId2");
footerPart.Footer = new Footer();
string htmlHeader = DocumentContent.Header;
string htmlFooter = DocumentContent.Footer;
ChangeHeaderAndFooter(myDoc, headerReference.Id, footerReference.Id, htmlHeader, htmlFooter);
}
AddPageMargin(mainPart);
mainPart.Document.Save();
return memoryStream;
}
}
private string GetEncodingDocument(string html)
{
string encoding = "utf-8";
string[] texto = html.Split(new string[] { "
Der Rest des Codes bezieht sich auf die Header und die Fußzeile des Dokuments, daher denke ich nicht, dass er für das Problem relevant ist. < /p>
ist da Eine Möglichkeit, die Umwandlung so zu erzwingen, so dass die Hyperlinks im Inhaltsverzeichnis als interne Links anstelle von externen Inhalten erkannt werden?
OpenXML: Inhaltsverzeichnis Hyperlinks in Wort als externe Links anstelle von internen ⇐ HTML
-
- Similar Topics
- Replies
- Views
- Last post