Войти

Показать полную графическую версию : Вставить текст и распечатать первую страницу


voha
14-05-2013, 18:28
Здравствуйте уважаемые программисты!

Сразу прошу прощения, если попал не в ту ветку. Помогите! :clapping:

Есть: Каталог с архивами. В каждом архиве есть файл *.doc и куча другого мусора.

Для того, чтобы иметь представление о архивах
Необходимо: 1. в начало файла *.doc вставить строчку с именем архива
2. Распечатать только первую страницу документа.

Дополнительно: если возможно - аналогично с файлом *.pdf

Спасибо за внимание. :)

Georgio
14-05-2013, 19:32
DOC- и PDF-файлы - бинарные, а не текстовые файлы. DOC-файлы, к тому же, - по своей сути специальные ZIP-архивы с расширением .doc. Поэтому только средствами CMD/BAT вставить что-либо в начало файла, не испортив его, нельзя. Вставить текст в конец файла - допустимо, но зтот текст не будет читаться при открытии файла в MS Word или WordPad, хотя каким-то идентификатором может служить.

Iska
14-05-2013, 20:51
voha, как правильно заметил коллега Georgio, в рамках заявленной категории решить Вашу задачу принципиально невозможно. Требуется Automation-клиент: WSH, PoSH, AutoIt, с недавних пор — AutoHotKey и т.п. Печать *.pdf — это вообще сказка.

1. в начало файла *.doc вставить строчку с именем архива »
Типы архивов приведите.

DOC-файлы, к тому же, - по своей сути специальные ZIP-архивы с расширением .doc. »
Отнюдь. Вы путаете с новым форматом, появившемся в Microsoft Office 2007. До того — бинарные compaund-файлы.

voha
15-05-2013, 10:34
Требуется Automation-клиент »
Что-бы Вы посоветовали в рамках поставленной задачи?

Типы архивов приведите »
rar, zip, arj и проч. Это не принципиально.

Iska
16-05-2013, 11:17
Это не принципиально. »
Это очень даже принципиально.

Что-бы Вы посоветовали в рамках поставленной задачи? »
Я бы посоветовал, например, WSH:
Option Explicit

Const WindowsFolder = 0
Const SystemFolder = 1
Const TemporaryFolder = 2

Const WshRunning = 0
Const WshFinished = 1
Const WshFailed = 2

Const wdDoNotSaveChanges = 0
Const wdPromptToSaveChanges = -2
Const wdSaveChanges = -1

Const wdPrintFromTo = 3
Const wdPrintRangeOfPages = 4


Dim strFolder

Dim objFile

Dim objWshShell
Dim objWshExec
Dim objRegExp

Dim strOut
Dim strFileName
Dim strTempFile

Dim objWord


strFolder = "E:\Песочница\0254"

Set objWshShell = WScript.CreateObject("WScript.Shell")
Set objRegExp = WScript.CreateObject("VBScript.RegExp")
Set objWord = Nothing

With WScript.CreateObject("Scripting.FileSystemObject")
If .FolderExists(strFolder) Then
For Each objFile In .GetFolder(strFolder).Files
Select Case LCase(.GetExtensionName(objFile.Name))
Case "rar", "zip", "arj"
WScript.Echo "Archive: " & objFile.Name

Set objWshExec = objWshShell.Exec("""%ProgramFiles%\7-Zip\7z.exe"" l -sccWIN """ & objFile.Path & """ *.doc")

strOut = ""

If objWshExec.Status <> WshFailed Then
Do
strOut = strOut & objWshExec.StdOut.ReadAll()
objWshExec.StdErr.ReadAll()
Loop Until objWshExec.Status = WshFinished

objRegExp.Pattern = "\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} .{5} +\d+ +\d+ +(.+\.doc)"

If objRegExp.Test(strOut) Then
strFileName = objRegExp.Execute(strOut).Item(0).SubMatches(0)
WScript.Echo "Document: " & strFileName

If objWshShell.Run("""%ProgramFiles%\7-Zip\7z.exe"" e -sccWIN """ & objFile.Path & """ -y -o" & .GetSpecialFolder(TemporaryFolder) & " """ & strFileName & """", 1, True) = 0 Then
strTempFile = .GetFile(.BuildPath(.GetSpecialFolder(TemporaryFolder), strFileName)).Path

OpenAndPrint strTempFile, objFile.Path

.DeleteFile strTempFile, True
Else
WScript.Echo "Can't extract [" & strFileName & "] from archive [" & objFile.Path & "]."
End If

WScript.Echo
End If
Else
WScript.Echo "Can't execute [""%ProgramFiles%\7-Zip\7z.exe"" l -sccWIN """ & objFile.Path & """ *.doc]."
End If

Set objWshExec = Nothing
End Select
Next
Else
WScript.Echo "Folder [" & strFolder & "] not found."
End If
End With

If Not objWord Is Nothing Then
objWord.Quit wdDoNotSaveChanges
Set objWord = Nothing
End If

Set objRegExp = Nothing
Set objWshShell = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub OpenAndPrint(strPath2File, strPath2Archive)
If objWord Is Nothing Then
Set objWord = WScript.CreateObject("Word.Application")
End If

With objWord.Documents.Open(strPath2File, False, True, False)
With .Paragraphs.Item(1).Range
.InsertParagraphBefore
.InsertBefore strPath2Archive
End With

.PrintOut True, False, wdPrintFromTo, "", "1", "1"

Do
WScript.Sleep 100
Loop Until objWord.BackgroundPrintingStatus = 0

.Close wdDoNotSaveChanges
End With
End Sub
'=============================================================================




© OSzone.net 2001-2012