Работа с .docx (Open XML SDK) есть вопросы
От: G0ga  
Дата: 03.02.11 11:17
Оценка:
Задача — сформировать отчет с картинками. Картинок много, все формируются программой.
Вопрос как загрузить их всех в документ не сохраняя на ЖД.
Представленный код ошибок не вызывает, но картинки пропадают.
MemoryStream ms = new MemoryStream();
img.Save(ms, ImageFormat.Png);
ImagePart imagePart = _document.MainDocumentPart.AddImagePart(ImagePartType.Png);
ms.Flush();
imagePart.FeedData(ms);

Чего здесь не хватает.
Re: Работа с .docx (Open XML SDK) есть вопросы
От: Angler Россия  
Дата: 04.02.11 10:07
Оценка:
Здравствуйте, G0ga, Вы писали:


G>Чего здесь не хватает.


Необходимо проверить, что ты в Blip-е устанавливаешь идентичное relationID, которое можно получить для созданного imagePart методом GetIdOfPart из ParentPart.
Или если картинки нужно просто обновить, можно использовать старый relationID и воспользоваться перегруженым методом:
public ImagePart AddImagePart(
    ImagePartType partType,
    string id
)

в который и передавать сущ. relationID
Re[2]: Работа с .docx (Open XML SDK) есть вопросы
От: G0ga  
Дата: 04.02.11 11:09
Оценка:
Здравствуйте, Angler, Вы писали:

A>Здравствуйте, G0ga, Вы писали:



G>>Чего здесь не хватает.


A>Необходимо проверить, что ты в Blip-е устанавливаешь идентичное relationID, которое можно получить для созданного imagePart методом GetIdOfPart из ParentPart.

A>Или если картинки нужно просто обновить, можно использовать старый relationID и воспользоваться перегруженым методом:
A>
A>public ImagePart AddImagePart(
A>    ImagePartType partType,
A>    string id
A>)
A>

A>в который и передавать сущ. relationID

С этим проблем нет. Как только правлю код на загрузку картинки через файл все работает.
Складывается ощущение, что Stream картинки закрывается до того, как данные запишутся в файл.
И много, что интересного заметил:
— если использовать один и тот-же FileStream для записи изображения и для загрузки в документ нельзя (эффект такой же, если делать через MemoryStream). Можно только если закрыть его а, потом заново открыть.
— любой Stream, после операции FeedData, нельзя ни прочитать ни записать т.е сразу в "корзину".
В общем вопросов еще больше становиться.
P.S.
А самый главный хочется адресовать разработчикам OpenXML SDK — Зачем изменили набор инструментов? Старый был более приближен к жизни. И куда пропал Content Control ToolKit?
А сейчас приходиться переименовывать .docx в .zip и разбирать в ручную. Пакету OpenXmlSDK уже не первый год, можно уже расширить набор утилит, а также ....
что-то меня понесло
Re[3]: Работа с .docx (Open XML SDK) есть вопросы
От: Романов Михаил Удмуртия https://mihailromanov.wordpress.com/
Дата: 05.02.11 07:48
Оценка:
Здравствуйте, G0ga, Вы писали:

G> — если использовать один и тот-же FileStream для записи изображения и для загрузки в документ нельзя (эффект такой же, если делать через MemoryStream). Можно только если закрыть его а, потом заново открыть.

В смысле, что два разных приемника одновременно читают один поток? Тогда логично — как они будут это делать, ведь у каждого своя позиция в потоке.
Или вы про последовательные операции? Тогда тоже логично — после того как один приемник полностью прочитал поток, указатель потока нужно переставить на начало. Для произвольного потока это не возможно, поэтому делать такие операции должен разработчик, который поставляет поток. В том же FileStream можно просто вызвать Seek. Или он тоже не работает?

G>А самый главный хочется адресовать разработчикам OpenXML SDK — Зачем изменили набор инструментов? Старый был более приближен к жизни. И куда пропал Content Control ToolKit?

У CCT отдельный сайт на codeplex http://dbe.codeplex.com/. Он обновляется чаще, чем OpenXML SDK (но релизы не последние — лучше брать в исходниках).
Re[4]: Работа с .docx (Open XML SDK) есть вопросы
От: G0ga  
Дата: 14.02.11 13:58
Оценка:
Здравствуйте, Романов Михаил, Вы писали:

РМ>Здравствуйте, G0ga, Вы писали:


G>> — если использовать один и тот-же FileStream для записи изображения и для загрузки в документ нельзя (эффект такой же, если делать через MemoryStream). Можно только если закрыть его а, потом заново открыть.

РМ>В смысле, что два разных приемника одновременно читают один поток? Тогда логично — как они будут это делать, ведь у каждого своя позиция в потоке.
РМ>Или вы про последовательные операции? Тогда тоже логично — после того как один приемник полностью прочитал поток, указатель потока нужно переставить на начало. Для произвольного потока это не возможно, поэтому делать такие операции должен разработчик, который поставляет поток. В том же FileStream можно просто вызвать Seek. Или он тоже не работает?

Собственно не это беспокоило меня, а исходная задача загрузить не сохраняя на ЖД т.е. непосредственно MemoryStream => ImagePart.

G>>А самый главный хочется адресовать разработчикам OpenXML SDK — Зачем изменили набор инструментов? Старый был более приближен к жизни. И куда пропал Content Control ToolKit?

РМ>У CCT отдельный сайт на codeplex http://dbe.codeplex.com/. Он обновляется чаще, чем OpenXML SDK (но релизы не последние — лучше брать в исходниках).

Спасибо за ссылку.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.