Я пытаюсь преобразовать контент HTML в Word с использованием openxml.
Проблема, с которой я сталкиваюсь, заключается в том, что гиперссылки в содержании таблицы обнаруживаются с помощью Word как «существующий файл или веб -страница». /p>
Когда они должны быть ссылками на местоположения в одном и том же документе. Идентификатор для места расположения документа, к которому он должен перейти. Единственная проблема заключается в том, что слово интерпретирует его как внешнюю ссылку, а не внутреннюю. это:
Он напрямую открывает "место В этом документе "раздел и правильно указывает на то, где он должен. />
открывает «Файл или внешний веб -сайт «Раздел, потому что он обнаруживает точки гиперссылки в месте за пределами документа < /p>
Вот как я выполняю конверсию: < /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[] { "
Остальная часть кода связана с заголовком и нижним колонтитулом документа, поэтому я не думаю, что это имеет отношение к проблеме. < /p>
Есть Способ установить конверсию так, чтобы гиперссылки в содержимого таблицы распознавались как внутренние ссылки вместо внешних?
Подробнее здесь: https://stackoverflow.com/questions/794 ... ks-instead
OpenXML: содержимое гиперссылки в Word, обнаруженные как внешние ссылки вместо внутренних ⇐ Html
Программисты Html
1739171104
Anonymous
Я пытаюсь преобразовать контент HTML в Word с использованием openxml.
Проблема, с которой я сталкиваюсь, заключается в том, что гиперссылки в содержании таблицы обнаруживаются с помощью Word как «существующий файл или веб -страница». /p>
Когда они должны быть ссылками на местоположения в одном и том же документе. Идентификатор для места расположения документа, к которому он должен перейти. Единственная проблема заключается в том, что слово интерпретирует его как внешнюю ссылку, а не внутреннюю. это:
Он напрямую открывает "место В этом документе "раздел и правильно указывает на то, где он должен. />
открывает «Файл или внешний веб -сайт «Раздел, потому что он обнаруживает точки гиперссылки в месте за пределами документа < /p>
Вот как я выполняю конверсию: < /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[] { "
Остальная часть кода связана с заголовком и нижним колонтитулом документа, поэтому я не думаю, что это имеет отношение к проблеме. < /p>
Есть Способ установить конверсию так, чтобы гиперссылки в содержимого таблицы распознавались как внутренние ссылки вместо внешних?
Подробнее здесь: [url]https://stackoverflow.com/questions/79420637/openxml-table-of-contents-hyperlinks-in-word-detected-as-external-links-instead[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия