Вставить текст и распечатать первую страницу
Здравствуйте уважаемые программисты!
Сразу прошу прощения, если попал не в ту ветку. Помогите! :clapping:
Есть: Каталог с архивами. В каждом архиве есть файл *.doc и куча другого мусора.
Для того, чтобы иметь представление о архивах
Необходимо: 1. в начало файла *.doc вставить строчку с именем архива
2. Распечатать только первую страницу документа.
Дополнительно: если возможно - аналогично с файлом *.pdf
Спасибо за внимание. :)
|
DOC- и PDF-файлы - бинарные, а не текстовые файлы. DOC-файлы, к тому же, - по своей сути специальные ZIP-архивы с расширением .doc. Поэтому только средствами CMD/BAT вставить что-либо в начало файла, не испортив его, нельзя. Вставить текст в конец файла - допустимо, но зтот текст не будет читаться при открытии файла в MS Word или WordPad, хотя каким-то идентификатором может служить.
|
voha, как правильно заметил коллега Georgio, в рамках заявленной категории решить Вашу задачу принципиально невозможно. Требуется Automation-клиент: WSH, PoSH, AutoIt, с недавних пор — AutoHotKey и т.п. Печать *.pdf — это вообще сказка.
Цитата:
Цитата voha
1. в начало файла *.doc вставить строчку с именем архива »
|
Типы архивов приведите.
Цитата:
Цитата Georgio
DOC-файлы, к тому же, - по своей сути специальные ZIP-архивы с расширением .doc. »
|
Отнюдь. Вы путаете с новым форматом, появившемся в Microsoft Office 2007. До того — бинарные compaund-файлы.
|
Цитата:
Цитата Iska
Требуется Automation-клиент »
|
Что-бы Вы посоветовали в рамках поставленной задачи?
rar, zip, arj и проч. Это не принципиально.
|
Это очень даже принципиально.
Цитата:
Цитата voha
Что-бы Вы посоветовали в рамках поставленной задачи? »
|
Я бы посоветовал, например, 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
'=============================================================================
|
Время: 12:20.
© OSzone.net 2001-2025