2013-04-18 3 views
1

Как вставить документ в документ Word через OpenXML SDK, но показывать контент, а не значок слова? Такое, как мы делаем это вручную в слове: Вставить объект из файла -> БЕЗ проверки «Dispaly as icon»?Вставить документ слова в другой БЕЗ значка

Я нашел это article, но он использует значок. Я также пытался использовать OpenXML SDK Productivity Tool, но показывает только сгенерированные двоичные данные.

EDITED: Я использую следующий код:

DrawAspect = OleDrawAspectValues.Content 

, а затем я добавить часть изображения:

var imagePart = mainDocumentPart.AddNewPart<ImagePart>("image/x-emf", imagePartId); 
GenerateImagePart(imagePart); 

Но мое изображение часть - это просто массив байтов значок Уорда , Итак, в этом случае происходит следующее: когда я открываю сгенерированный документ, он показывает внедренный документ как значок, но когда я дважды щелкаю этот встроенный документ, редактирую его и сохраняю изменения, встроенный документ отображается как контент, поэтому, возможно, возможно каким-то образом показать этот контент без редактирования встроенного документа? Должен ли я использовать вместо массива байтов значка слова массив байтов скриншота doc? Не уверен, что я описал это ясно, поэтому, пожалуйста, задайте

ответ

2

Существует красивый API-интерфейс обложки (Document Builder 2.2) вокруг открытого xml, специально разработанного для объединения документов, с гибкостью выбора абзацев для слияния и т. Д. Вы можете скачать его из here.

С помощью этого инструмента вы можете вставить абзац другого документа слова или документа целиком в соответствии с вашим требованием.

Документация и скриншоты о том, как ее использовать, - here.

Надеюсь, это поможет.

+0

AFAIK, Document Builder объединяет документы - я имею в виду вставляет содержимое одного к другому, но мне нужно вставить его, так что вы можете дважды щелкнуть и редактировать его –

+0

Ok Извините, я пропустил ваш вопрос. Пожалуйста, проверьте аналогичный ответ [здесь] (http://stackoverflow.com/a/3322259/860243) для вас полезно – Flowerking

3

Боюсь, что вы просите, это почти невозможно. Единственное различие между файлом слова между значком и встроенным файлом - это изображение. Если вы не используете значок Word, достаточно просто сделать снимок экрана, который вы вставляете и вставляете, вместо графического значка.

Я загрузил пример, который я взял из файла Word, который я сделал. Нашел этот маленький камень в папке /media внутри файла .docx.

Итак, ваш единственный выбор в разрешении этого вопроса, если вы не можете жить с помощью значка, - это как-то захватить изображение слова-файла, который вы хотите внедрить, и вставить это вместо изображения значка.

Как бы вы поступили, это не может быть красивым. Прежде всего, открытый xml sdk не содержит такой функции. Я тоже немного поиграл с офисным взаимодействием, но не повезло.

Я вижу только два возможных способа достижения этого.

Первый - через Interop. Вам нужно будет установить «притворный принтер», как те, которые печатаются в формате PDF вместо отправки на принтер. Однако это необходимо для печати в формате изображения. Формат файла в папке «Медиа» был .emf, но я не уверен, что это требование.

В любом случае, если вышеописанное возможно, вы можете встроить эту картинку, в значительной степени используя пример, который вы связываете с Microsoft, и просто измените этот размер «значка», который теперь будет изображением документа.

Вторая возможность заключается в том, чтобы открыть документ слова как процесс, установить размер документа на 72% (или, что то, что делает документ единственным на экране на рабочем столе), и захватить экран печати и сократить его к простому документу и его использованию в качестве изображения для встраивания.

Для записи я не рекомендую вам делать что-либо из вышеперечисленного, но thoose - это единственные варианты, которые я вижу.

Если у кого-то есть лучшее решение, я все уши.

Наконец, если вы решите, что хотите продолжить, я буду рад составить пример варианта номер 2, если вы ответите и скажете, что вам это понравится.

  • Каспар

enter image description here

+0

Спасибо за ваш ответ, но я не думаю, что второй вариант хорош enaugh, 'case this приложение должно обрабатывать много документов в потоках, поэтому для запуска текстового процесса это не очень хорошая идея. Я тоже играл с рисовальным аспектом (извините, не упоминал об этом), и я нашел интересным, что если вы укажете его на «Контент», то ПОСЛЕ редактирования встроенного документа и его сохранения вы получите контент в своем вместо документа. Вопрос заключается в том, как добиться этого без редактирования встроенного документа. Также я думаю, что ваша первая идея стоит подумать, thanx –

+0

Не могли бы вы немного подробнее остановиться? Я не уверен, что понимаю. Я понимаю, что, хотя вы вставляете документ, то, что вы видите на самом деле, когда вы открываете основной документ, - это просто изображение, представляющее этот документ. Я не думаю, что это возможно, но, возможно, вы можете обмануть слово, чтобы сгенерировать изображение при открытии документа. Это было бы просто странно, поскольку слово генерирует изображение и вставляет его сам, когда вы вставляете текстовый файл и не используете значок. Опять же, я не уверен, что понимаю, что вы говорите, поэтому, пожалуйста, уточните :) –

+0

Пожалуйста, см. Мое редактирование –