Ru-Board.club
← Вернуться в раздел «Программы»

» Программа для автоматического переименования PDF файлов

Автор: amanita
Дата сообщения: 05.09.2005 12:30
Привет!

Есть куча научных статей в пдф формате, надо их авотматически переименовать, по определенной логике. Например нужно найти текст с самым большим размером шрифта и его использовать как как название файла. Вообще какие существуют проги для (полу)автоматической каталогизации и хранения больших баз пдф?
Автор: war2005
Дата сообщения: 08.10.2005 12:56
Вообще программа AcdSEE версии не ниже 4.0 поддерживают автоматическое переименование группы файлов по выбранному алгоритму.

Добавлено:
Или ты хочешь, чтобы имя файла бралось из его содержимого?

Тогда не знаю.

По идее если знаешь алгоритм преобразования текста можно прогу написать.

Но есть или нет - не скажу.
Автор: a_man
Дата сообщения: 29.12.2007 01:25
У меня тот же вопрос: нужна программа для автоматического переименования PDF файлов. Вся информация находится в Document Properties.
Новое название PDF файла по принципу "Author" - "Title".
Автор: Partner1
Дата сообщения: 09.12.2008 11:09
File by OCR только триал
h_t_t_p://www.edocfile.com/filebyocr.htm
Автор: U235
Дата сообщения: 10.12.2008 16:27
Partner1
Я как-то такое делал полгода-год назад AutoIt3 скриптом (+утилита pdftohtml или pdftoxml).
Если найду скрипт - выложу.
Автор: Partner1
Дата сообщения: 11.12.2008 06:42
U235
Выкладывай, пожалуйста!
Автор: U235
Дата сообщения: 13.12.2008 23:25
Partner1
Старый скрипт не нашел, поэтому набросал новый. Лежит (exe+исходник+pdftohtml.exe) тут. На всякий случай делайте копии Ваших pdf.
Скрипт переименовывает (создает копии) pdf, находящиеся в папке со скиптом по максимальному размеру шрифта на первой странице.
Автор: Partner1
Дата сообщения: 15.12.2008 06:59
U235 Спасибо!
Автор: Kreol84cav
Дата сообщения: 07.09.2011 03:14
Доброго времени суток!
Недавно столкнулся с проблемой как ТС из этой темы http://72.233.112.78/topic.cgi?forum=5&topic=16938

Только у меня в первой странице pdf файла картинка, соответственно текст для переименования надо брать со второй страницы файла pdf. Пытался модифицировать ваш скрипт, но у меня ничего не получилось.

Не могли бы вы помочь?
Автор: U235
Дата сообщения: 07.09.2011 07:52
В скрипте au3 заменить
pdftohtml.exe -f 1 -l 1
на
pdftohtml.exe -f 2 -l 2
Если не поможет, тогда выкладывайте образец своего pdf.
Автор: Kreol84cav
Дата сообщения: 07.09.2011 09:39
Менял. Не помогает.
Несколько статей для примера:
http://dl.dropbox.com/u/4526739/1.pdf
http://dl.dropbox.com/u/4526739/2.pdf
http://dl.dropbox.com/u/4526739/3.pdf
Автор: U235
Дата сообщения: 07.09.2011 11:34
Kreol84cav
У меня второй и третий Ваш pdf обработался нормально. (с правкой pdftohtml.exe -f 2 -l 2 )
Вы, надеюсь, не exe запускаете, а именно autoit файл? В out.xml что получается?

Первый файл не обработался, т.к. у него шрифт у авторов больше названия статьи, + есть "лишние" теги в xml.
Система какая (у меня win xp)?
Автор: Kreol84cav
Дата сообщения: 07.09.2011 11:57
U235
Запускаю autoit файл (pdf_rename.au3)
Получается такое http://dl.dropbox.com/u/4526739/screen.jpg

файл out.xml

Система Windows XP.
AutoIt v 3

Когда пытался обрабатывать неизмененным скриптом pdf без картинки в начале- все работало отлично.
Автор: U235
Дата сообщения: 07.09.2011 12:29
Kreol84cav

Вот поменял кое-что, пробуйте (1.pdf файл все равно не обрабатывается).
[more=скрипт]#Include <Array.au3>

$search = FileFindFirstFile("*.pdf")


If $search = -1 Then
MsgBox(0, "Error", "No files/directories matched the search pattern")
Exit
EndIf
$i=0
Dim $file[1]
;_ArrayDisplay($file, "$avArray AFTER _ArrayAdd()")
While 1
$file_n=FileFindNextFile($search)
If @error Then ExitLoop
    _ArrayAdd($file, $file_n )
;    _ArrayDisplay($file, "$avArray AFTER _ArrayAdd()")
    $i=$i+1
WEnd    
FileClose($search)
;_ArrayDisplay($file, "$avArray AFTER _ArrayAdd()")
For $j=1 To $i
RunWait("pdftohtml.exe -f 2 -l 2 -hidden -xml -enc UTF-8 "&$file[$j]&" out",'',@SW_HIDE )
$out = FileOpen("out.xml", 0); find max font size

If $out = -1 Then
MsgBox(0, "Error", "Unable to open xml file.")
Exit
EndIf

$max_font=1
While 1
$line = FileReadLine($out)
If @error = -1 Then ExitLoop
    $line=StringRegExpReplace($line,'<text.*height="','')
        $line=StringRegExpReplace($line,'" font.*','')
        If StringIsInt($line) Then
            $font=Number($line)
            if $font>$max_font Then $max_font=$font
        EndIf    
    Wend
    


FileClose($out)

$out = FileOpen("out.xml", 0); find name document
If $out = -1 Then
MsgBox(0, "Error", "Unable to open xml file.")
Exit
EndIf

$name=''
While 1
$line = FileReadLine($out)
If @error = -1 Then ExitLoop
    If StringRegExp($line,'<text.*height="'&$max_font) Then
        $temp=StringRegExpReplace($line,'<text.*">','')
        $temp=StringRegExpReplace($temp,'</text>','')
     $name=$name&' '&$temp
    EndIf
Wend




FileClose($out)
$name=StringStripWS ( $name, 1)
$name=StringReplace($name,'<b>','')
$name=StringReplace($name,'</b>','')
$name=StringReplace($name,'i>','')
$name=StringReplace($name,'</i>','')
$name=StringStripWS ( $name, 3 )
$name=StringStripCR ( $name)
$name=_Utf8ToAnsi($name)
;$name=_Utf8ToUnicode($name)
;MsgBox(0, "Error", $name)
;MsgBox(0, $name, $file[$j])

If $name<>'' Then FileCopy ( $file[$j], $name&'.pdf' , 1 )
Next





Func _Utf8ToAnsi($utf8string); (c) ViSiToR
Local $len = StringLen($utf8string)
Local $buf = DllStructCreate("byte[" & $len*2 & "];byte[2]")
Local $ret = DllCall("Kernel32.dll", "int", "MultiByteToWideChar", _
"int", 65001, "int", 0, _
"str", $utf8string, "int", -1, _
"ptr", DllStructGetPtr($buf), "int", $len*2+2)
Local $out = DllStructCreate("char[" & $len & "];char")
$ret = DllCall("kernel32.dll", "int", "WideCharToMultiByte", _
"int", 0, "int", 0, _
"ptr", DllStructGetPtr($buf), "int", -1, _
"ptr", DllStructGetPtr($out), "int", $len+1, _
"int", 0, "int", 0)
Return DllStructGetData($out,1)
EndFunc
Func _Utf8ToUnicode($Utf8String) ; (c) ViSiToR
Local $BufferSize = StringLen($Utf8String) * 2
Local $Buffer = DllStructCreate("byte[" & $BufferSize & "]")
Local $Return = DllCall("Kernel32.dll", "int", "MultiByteToWideChar", _
"int", 65001, _
"int", 0, _
"str", $Utf8String, _
"int", StringLen($Utf8String), _
"ptr", DllStructGetPtr($Buffer), _
"int", $BufferSize)
Local $UnicodeBinary = DllStructGetData($Buffer, 1)
$UnicodeHex1 = StringReplace($UnicodeBinary, "0x", "")
$StrLen = StringLen($UnicodeHex1)
Local $UnicodeString
For $i = 1 To $StrLen Step 4
$UnicodeHex2 = StringMid($UnicodeHex1, $i, 4)
$UnicodeHex3 = StringMid($UnicodeHex2,3,2) & StringMid($UnicodeHex2,1,2)
$UnicodeString &= ChrW(Dec($UnicodeHex3))
Next
$Buffer = 0
Return $UnicodeString
EndFunc [/more]
Автор: Kreol84cav
Дата сообщения: 07.09.2011 12:48
U235, спасибо.

К сожалению на Windows XP SP2 результат тот же.
На Windows 7 SP1 генерирует только файл xml.out


Автор: U235
Дата сообщения: 07.09.2011 17:29
Ну тогда даже и не знаю... Попробуйте отладить (раскомментировать MsgBox, добавить свои где надо).
Автор: Kreol84cav
Дата сообщения: 07.09.2011 17:49
Спасибо. Буду пробовать!
Автор: amanita
Дата сообщения: 05.09.2005 12:30
Привет!

Есть куча научных статей в пдф формате, надо их авотматически переименовать, по определенной логике. Например нужно найти текст с самым большим размером шрифта и его использовать как как название файла. Вообще какие существуют проги для (полу)автоматической каталогизации и хранения больших баз пдф?
Автор: war2005
Дата сообщения: 08.10.2005 12:56
Вообще программа AcdSEE версии не ниже 4.0 поддерживают автоматическое переименование группы файлов по выбранному алгоритму.

Добавлено:
Или ты хочешь, чтобы имя файла бралось из его содержимого?

Тогда не знаю.

По идее если знаешь алгоритм преобразования текста можно прогу написать.

Но есть или нет - не скажу.
Автор: a_man
Дата сообщения: 29.12.2007 01:25
У меня тот же вопрос: нужна программа для автоматического переименования PDF файлов. Вся информация находится в Document Properties.
Новое название PDF файла по принципу "Author" - "Title".
Автор: Partner1
Дата сообщения: 09.12.2008 11:09
File by OCR только триал
h_t_t_p://www.edocfile.com/filebyocr.htm
Автор: U235
Дата сообщения: 10.12.2008 16:27
Partner1
Я как-то такое делал полгода-год назад AutoIt3 скриптом (+утилита pdftohtml или pdftoxml).
Если найду скрипт - выложу.
Автор: Partner1
Дата сообщения: 11.12.2008 06:42
U235
Выкладывай, пожалуйста!
Автор: U235
Дата сообщения: 13.12.2008 23:25
Partner1
Старый скрипт не нашел, поэтому набросал новый. Лежит (exe+исходник+pdftohtml.exe) тут. На всякий случай делайте копии Ваших pdf.
Скрипт переименовывает (создает копии) pdf, находящиеся в папке со скиптом по максимальному размеру шрифта на первой странице.
Автор: Partner1
Дата сообщения: 15.12.2008 06:59
U235 Спасибо!
Автор: Kreol84cav
Дата сообщения: 07.09.2011 03:14
Доброго времени суток!
Недавно столкнулся с проблемой как ТС из этой темы http://72.233.112.78/topic.cgi?forum=5&topic=16938

Только у меня в первой странице pdf файла картинка, соответственно текст для переименования надо брать со второй страницы файла pdf. Пытался модифицировать ваш скрипт, но у меня ничего не получилось.

Не могли бы вы помочь?
Автор: U235
Дата сообщения: 07.09.2011 07:52
В скрипте au3 заменить
pdftohtml.exe -f 1 -l 1
на
pdftohtml.exe -f 2 -l 2
Если не поможет, тогда выкладывайте образец своего pdf.
Автор: Kreol84cav
Дата сообщения: 07.09.2011 09:39
Менял. Не помогает.
Несколько статей для примера:
http://dl.dropbox.com/u/4526739/1.pdf
http://dl.dropbox.com/u/4526739/2.pdf
http://dl.dropbox.com/u/4526739/3.pdf
Автор: U235
Дата сообщения: 07.09.2011 11:34
Kreol84cav
У меня второй и третий Ваш pdf обработался нормально. (с правкой pdftohtml.exe -f 2 -l 2 )
Вы, надеюсь, не exe запускаете, а именно autoit файл? В out.xml что получается?

Первый файл не обработался, т.к. у него шрифт у авторов больше названия статьи, + есть "лишние" теги в xml.
Система какая (у меня win xp)?
Автор: Kreol84cav
Дата сообщения: 07.09.2011 11:57
U235
Запускаю autoit файл (pdf_rename.au3)
Получается такое http://dl.dropbox.com/u/4526739/screen.jpg

файл out.xml

Система Windows XP.
AutoIt v 3

Когда пытался обрабатывать неизмененным скриптом pdf без картинки в начале- все работало отлично.

Страницы: 12

Предыдущая тема: si.Mail (siMail)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.