Я пытаюсь объединить несколько документов в один, а затем открыть документ результатов и обработать его дальше.Объединенный документ с использованием AltChunks имеет внутренний текст пустой
«ChunkId» - свойство, которое увеличивается каждый раз, когда вызывается этот метод, чтобы получить уникальный идентификатор. Я следовал примеру от this site. Это код, который используется для объединения нескольких документов (с использованием altchunks): `
private void MergeDocument(string mergePath, bool appendPageBreak)
{
if (!File.Exists(mergePath))
{
Log.Warn(string.Format("Document: \"{0}\" was not found.", mergePath));
return;
}
ChunkId++;
var altChunkId = "AltChunkId" + ChunkId;
var mainDocPart = DestinationDocument.MainDocumentPart;
if (mainDocPart == null)
{
DestinationDocument.AddMainDocumentPart();
mainDocPart = DestinationDocument.MainDocumentPart;
if (mainDocPart.Document == null)
mainDocPart.Document = new Document { Body = new Body() };
}
try
{
var chunk = mainDocPart.AddAlternativeFormatImportPart(
AlternativeFormatImportPartType.WordprocessingML, altChunkId);
if (chunk != null)
using (var ms = new FileStream(mergePath, FileMode.Open))
{
chunk.FeedData(ms);
}
else
{
Log.Error(string.Format("Merge - Failed to create chunk document based on \"{0}\".", mergePath));
return; // failed to create chunk document, return from merge method
}
}
catch (Exception e)
{
Log.Error(string.Format("Merge - Failed to insert chunk document based on \"{0}\".", mergePath));
return; // failed to create chunk document, return from merge method
}
var altChunk = new AltChunk { Id = altChunkId };
//append the page break
if (appendPageBreak)
try
{
AppendPageBreak(mainDocPart);
Log.Info(string.Format("Successfully appended page break."));
}
catch (Exception ex)
{
Log.Error(string.Format("Eror appending page break. Message: \"{0}\".", ex.Message));
return; // return if page break insertion failed
}
// insert the document
var last = mainDocPart.Document
.Body
.Elements()
.LastOrDefault(e => e is Paragraph || e is AltChunk);
try
{
if (last == null)
mainDocPart.Document.Body.InsertAt(altChunk, 0);
else
last.InsertAfterSelf(altChunk);
Log.Info(string.Format("Successfully inserted new doc \"{0}\" into destination.", mergePath));
}
catch (Exception ex)
{
Log.Error(string.Format("Error merging document \"{0}\". Message: \"{1}\".", mergePath, ex.Message));
return; // return if the merge was not successfull
}
try
{
mainDocPart.Document.Save();
}
catch (Exception ex)
{
Log.Error(string.Format("Error saving document \"{0}\". Message: \"{1}\".", mergePath, ex.Message));
}
}`
Если открыть объединенный документ с словом я могу видеть его содержание (таблицы, текст, пункты ..), но если я open, если из кода снова сказано, что внутренний текст - «" (пустая строка). Мне нужен этот внутренний текст, чтобы отразить то, что содержит документ, потому что мне нужно заменить некоторые заполнители, такие как «@@ name @@» другим текстом, и я не могу, если внутренний текст пуст.
Это InnerXml объединенного документа,
Это, как я открываю объединенный документ:
DestinationDocument = WordprocessingDocument.Open(Path.GetFullPath(destinationPath), true);
Как я могу читать внутренний текст документа ? Или как я могу объединить эти документы в один, чтобы эта проблема больше не возникала?
Спасибо, работал как шарм. Единственная проблема, которую нужно решить, - это возможность вставки разрыва страницы после документа с помощью DocumentBuilder. Хороший сэр @Flowerking, еще раз спасибо: D – Simonca
знаете ли вы способ конвертировать файл .rtf в файл .docx? Мне нужно объединить файл .rtf с .docx, а DocumentBuilder - файлы .docx. – Simonca