Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: как скопировать картинку в doc файл Добавлено: 12.05.04 02:59  

Автор вопроса:  Sania | ICQ: 347442784 

Ребята я новичек подкажите пожалуйта как

в VB скопировать картинку в doc файл чтобы рисунок не разлаживался на шеснадцатеричный код в несколько листов.

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 dNW



Вопросов: 30
Ответов: 683
 Профиль | | #1 Добавлено: 12.05.04 07:16
То есть ты хочешь просто сменить расширение файла на .doc ?

Ответить

Номер ответа: 2
Автор ответа:
 Alexander N



Вопросов: 21
Ответов: 44
 Web-сайт: sasha.samogon.info
 Профиль | | #2
Добавлено: 12.05.04 13:24

А как вытащить картинку из *.doc'а? Очень надо, помогите!

Ответить

Номер ответа: 3
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #3
Добавлено: 12.05.04 16:20

Извлечение картинок из doc-файлов

Афанасьев Владимир

Верстальщик. Ведущий проекта http://www.spiker.ru Окончил Московский Полиграфический институт (инженер-механик). В полиграфии с 1980 г.

Иногда случается, что заказчики приносят информацию, подготовленную ими в редакторе Microsoft Word. И, хотя в любом препресс-бюро на таких смотрят волком, выгонять заказчика не всегда представляется возможным. Приходится объяснять и... переверстывать (за счет заказчика, естественно). И тут мы сталкиваемся с задачей извлечения файлов картинок из этого продукта всеми нами "любимой" фирмы. Описанная ниже методика позволяет сделать это без какой-либо потери качества. Впрочем, подобное годится и для других файлов MS Office 97, включая почтовые форматы Outlook.

Для начала нам необходимо иметь какой-либо шестнадцатиричный редактор, лучше всего – HIEW.EXE для DOS (или UltraEdit для Windows).

Пользуясь им, открываем файл DOC, и переключаемся в 16-ричный режим. Далее делаем следующее (все примеры даны в расчете на hiew.exe):

1. Если нужный нам файл был помещен в виде JPG, то сразу можем начинать искать начало внедренного JPG-файла. А поскольку хранится он в исходном виде, то искать надо последовательность байт FF D8 FF при помощи волшебной клавиши F7.

Есть, конечно, вариант – искать текстовую сигнатуру "JFIF", а затем отсчитывать от нее назад 6 байт. Главное - найти начало. Затем устанавливаем маркер на первый FF из FF D8 FF и нажимаем еще одну клавишу: * ("звездочку") на правой цифровой клавиатуре для начала пометки. После этого еще раз нажимаем F7 и задаем другую маску для поиска - FF D9 A0. Эта комбинация определяет конец файла JPEG. Но только в том случае, если это не последний JPEG, внедренный в .DOC-файл. Если же вдруг HIEW не смогла найти указанную комбинацию, значит, вы пытаетесь извлечь последний JPEG. Тогда надо задавать для поиска немного другой набор байт: FF D9 00 00. Обнаружив первый или второй вариант окончания файла, следует установить маркер на байт D9 и нажать еще раз "звездочку". Будет цветом выделен блок, в котором, собственно, и содержится файл JPEG. Возможно, это и не тот, что вам нужен, но определить это можно будет после сохранения его на диск и просмотра. Сохранить его можно нажатием кнопки F2. В открывшемся меню остается задать имя файла и подтвердить сохранение. Отменить пометку нажатием "звездочки". Все.

Если нужно извлечь несколько файлов, то указанные процедуры надо последовательно повторить несколько раз, не забывая отменять пометку блока клавишей *.

2. Если же дело касается документа, помещенного в документ Word в виде файла TIFF или BMP, то все выглядит примерно так же, как для JPEG, только сигнатуры будут другие. Ведь Word-97 при внедрении TIFF и BMP преобразует их в формат PNG. Значит, после открытия документа редактором HIEW, следует задавать поиск (F7) начала файла по сигнатуре ЙPNG (89 50 4E 47). Затем – пометка начала по буковке "Й" (89) с помощью клавиши "звездочка" на правой цифровой клавиатуре, еще раз F7 – и задание маски для поиска конца файла в виде "42 60 82". После обнаружения – установить маркер на код 82 и, еще раз нажав клавишу "звездочка", фиксируем пометку блока. Затем сохраняем выделенный блок в файл при помощи F2. При необходимости сконвертировать полученный PNG-файл в любой другой формат можно практически любой программой, работающей с изображениями (PV.EXE, ALCHEMY.EXE, IrfanView.EXE, PhotoShop и т.д.), поскольку PNG довольно распространенный формат.

3. В том случае, когда файл встроен в документ непосредственно в формате .BMP (например, какой-нибудь из почтовых форматов, или PPT из PowerPoint), то больших проблем тоже нет.

Первым делом ищем сигнатуру "BM". Обычно перед этой сигнатурой имеются нули. Установив маркер на букву "B", начинаем пометку блока (cерая "звездочка"). Затем берем 4 байта после "BM" и изучаем их. Они представляют собой размер встроенного файла. Только согласно системе представления данных в компьютерах PC размер записан "наоборот". То есть, если мы имеем, например, последовательность АС 1A 02 00, то, прочитав байты в обратном порядке, получим значение 00021AAC. Это значение нужно при помощи 16-ричного калькулятора сложить с адресом, по которому расположено начало найденной сигнатуры "BM". Затем, нажав F5, вызываем задание адреса перехода, вводим полученный в результате вычислений адрес, и, оказавшись в необходимом нам месте, заканчиваем пометку блока "звездочкой" и сохраняем выделенный блок при помощи F2 в файл BMP.

4. Для извлечения файлов типа GIF нужно, открыв исходный файл редактором HIEW, задать по F7 маску поиска "GIF8". После обнаружения, установки маркера на начало сигнатуры и начала выделения серой "звездочкой", задать поиск по сигнатуре конца файла 00 3B. Дальше как обычно: завершение пометки "звездочкой" и сохранение файла клавишей F2.

По материалам сайта ua3xco

Источник: http://www.marketer.ru/

--------------------------------------------------------

JPEG

FF D8 'FF E0 00 10 4A 46 49 46 (яШяа JFIF)

FF D9 (яЩ) ?

--------------------------------------------------------

GIF

47 49 46 38 (GIF8)

00 3B ( ;) ?

--------------------------------------------------------

PNG

89 50 4E 47 0D 0A 1A 0A (‰PNG) ‰PNG

49 45 4E 44 AE 42 60 82 (B`‚) IEND®B`‚

--------------------------------------------------------

BMP

42 4D (BM)

длина вычисляется в 4 байтах с 3 позиции от начала

--------------------------------------------------------

WMF

D7 CD C6 9A

длина вычисляется в 4 байтах с 29 позиции от начала

--------------------------------------------------------

ICO

00 00 01 00 XX 00 XX XX XX 00 00 00 00 00

длина вычисляется в 8 байтах с (6+16*Nрис) позиции от начала

--------------------------------------------------------

CUR

00 00 02 00 XX 00 XX XX XX 00 XX 00 XX 00

длина вычисляется в 8 байтах с (6+16*Nрис) позиции от начала

--------------------------------------------------------

--------------------------------------------------------

TIFF - не доработан

49 49 2A (II* ) ?

или 4D 4D 2A

00 00 00 00 00 00 ( ) ?

--------------------------------------------------------

Ответить

Номер ответа: 4
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #4
Добавлено: 12.05.04 16:21

и пример есть, вытаскивает картинки не только из doc файлов но и из бинарников exe, dll, карт к простеньким игрушкам, и т.д. ...

Ответить

Номер ответа: 5
Автор ответа:
 Sania



ICQ: 347442784 

Вопросов: 18
Ответов: 7
 Профиль | | #5 Добавлено: 14.05.04 02:31

Ребята спасибо что вы откликнулись, правда я не ожидал.

Но это не совсем то.

Я столкнулся с такой проблемой. Если в Visual Basic’е картинку из PictureBox сохранить

так (SavePicture pikture1, "1.bmp") то картинка в файле 1.bmp будет нормальной, а если так (SavePicture pikture1, "1.doc") то если я открою файл 1.doc в Word’e будет какаета билеперда из непонятного текста. А мне нужна картинка как если бы я просто вставлял картинку в Word копированием и вставкой.

Нет ли просто какой ни будь функции или может где то поменять какой параметр. Заранее спасибо.

Ответить

Номер ответа: 6
Автор ответа:
 Evgeny D



Вопросов: 10
Ответов: 33
 Профиль | | #6 Добавлено: 14.05.04 15:57

Так не делается, в .doc файлах помима видимой информации хранится еще и служебная.

Добавить в Preference: Microsoft Word xxx Object Library

Вот пример для Excel (нашел у себя в архивчике), действуй по аналогии:

Dim objExcel As Excel.Application 'заводится переменная для редактора Excel

Dim objBook As Excel.Workbook 'заводится переменная для открытия документа

Dim objSheet As Excel.Worksheet 'заводится переменная для страницы

Dim inf As String

Private Sub cmdExit_Click()

'выгружаем Excel из памяти

objExcel.Quit

End

End Sub

Private Sub Form_Load()

inf = "Petrenko Andrey (Silver Flamingo)" & vbCrLf & "Email: silver_100182@kspu.kharkov.com"

lblAutor.Caption = inf

'открывает редактор Excel но он невидим

Set objExcel = CreateObject("Excel.Application")

'открытие файла с базой

Set objBook = objExcel.Workbooks.Open(App.Path & "\" & "baza.xls")

'открывает первую страницу документа Excel

Set objSheet = objBook.Worksheets(1)

'передаётся управление процедуре

GetBaza

End Sub

Private Sub GetBaza()

Dim i%, a% 'заводятся переменные значения Integer

i = 1

a = 1

'добавляются пункты в ComboBox

'objSheet.Cells(горизонталь, вертикаль)

'заводится цикл на проверку яйчеек до тех пор

'пока не будет достигнута пустая яйчейка

Do While objSheet.Cells(i, 1) <> ""

'добавляет пункт в ComboBox учитывая значения переменной "i"

'в которой хранится номер яйчейки

cmbWord.AddItem objSheet.Cells(i, 1)

'прибавляет 1 для того чтобы перейти на следующую

'яйчейку по горизонтали

i = i + 1

Loop

'добавляются пункты в ListBox

Do While objSheet.Cells(a, 1) <> ""

lstWord.AddItem objSheet.Cells(a, 1)

a = a + 1

Loop

End Sub

Private Sub cmbWord_Click()

'к обекту Label "lblCmbWord" присваивается текст пункта

'выбранного из ComboBox'a

lblCmbWord.Caption = cmbWord.Text

End Sub

Private Sub lstWord_Click()

'к обекту Label "lblLstWord" присваивается текст пункта

'выбранного из ListBox'a

lblLstWord.Caption = lstWord.Text

End Sub

'Petrenko Andrey (Silver Flamingo)

'Email: silver_100182@kspu.kharkov.com

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам