Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Вставить текст и распечатать первую страницу (http://forum.oszone.net/showthread.php?t=260557)

voha 14-05-2013 18:28 2150100

Вставить текст и распечатать первую страницу
 
Здравствуйте уважаемые программисты!

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

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

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

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

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

Georgio 14-05-2013 19:32 2150133

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

Iska 14-05-2013 20:51 2150164

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

Цитата:

Цитата voha
1. в начало файла *.doc вставить строчку с именем архива »

Типы архивов приведите.

Цитата:

Цитата Georgio
DOC-файлы, к тому же, - по своей сути специальные ZIP-архивы с расширением .doc. »

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

voha 15-05-2013 10:34 2150348

Цитата:

Цитата Iska
Требуется Automation-клиент »

Что-бы Вы посоветовали в рамках поставленной задачи?

Цитата:

Цитата Iska
Типы архивов приведите »

rar, zip, arj и проч. Это не принципиально.

Iska 16-05-2013 11:17 2150902

Цитата:

Цитата voha
Это не принципиально. »

Это очень даже принципиально.

Цитата:

Цитата 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.

Время: 12:20.
© OSzone.net 2001-2025