Сделай шаг, перелистни страницу!

 
Герой легенд

Перевожу в рамках конкурса про Нарнию, возник вопрос:
формат PDF я распознал и конвертировал в MS Word, в нём и работаю. Чтобы бегать по параграфам, хочу сделать ссылки из номеров. Пока что сделал "закладками" – пицот закладок и пицот (больше вдвое-втрое, на самом деле) ссылок на них. Есть как вариант сделать "оглавлением".
Вопросы такие: кто-нибудь что-то подобное делал? как удобнее всего оформлять ссылки? Может, еще есть более удобный третий способ? Может, надо не в ворде, а в чём-то еще работать (чтобы потом было удобнее портировать и пр.)?
Jumangee – может, это обсуждение уже отделить в отдельную "техническую" ветку?


_________________
Эти морские зайцы, эти дохлые медузы отказываются следовать за своим капитаном!
Во всех бочках затычка

Действительно – вопрос не имел никакого отношения к Plansescape Smile
Насколько мне известно, в ворде можно сделать гиперссылку на "#p1", а потом в нужном месте "Вставка"-"Закладка", пишешь "p1". Всё. Единственное, ворд не даёт вставить закладку начинающуюся с цифры, но это можно пережить.

Герой легенд
писал(а): Jumangee
ворд не даёт вставить закладку начинающуюся с цифры

это я уже понял Sad
а потом это в html или еще куда перекинуть – просто? закладки станут гиперссылками?

Меценат

Я перевожу тоже в ворде. Сделал шаблон. Для номера параграфа свой стиль, для перехода свой. В процессе написания макрос для авторасставления переходов.


_________________
Все движется... Иногда даже вперед!
Во всех бочках затычка

Да, так по-идее лучше – потом, при желании, при смене оформления номера параграфа и/или переходов не придётся выискивать их по книге

Герой легенд

Piligrim, у меня макросом ставится закладка. А как остальное? Пришли файл?


_________________
Эти морские зайцы, эти дохлые медузы отказываются следовать за своим капитаном!
Свободный искатель

Гиперссылки могут указывать не только на закладки, но и на заголовки. Делаешь номер параграфа стилем "Заголовок 1", например, и вперед, гиперссылки на них.
Весь свой фаллаут я сделал именно так, если совсем интересно смотри мой doc файл, в нем закладок нет.

Ссылка для ленивых

Сказали спасибо(1): Jumangee
Путник

Я для этой цели накатал два этих макроса. Единственное что нужно сделать, это в зависимости от книги менять запрос в строке поиска
Первый макрос расставляет закладки, второй ставит на них гипрессылки

Sub AddMark()

‘ Ìàêðîñ1 Ìàêðîñ
‘ Ìàêðîñ çàïèñàí 2012/01/21 Admin

nn = 200

‘While Selection.Find.Execute = True
‘i = 0
‘While Selection.Text <Selection> 0
ActiveDocument.Hyperlinks(1).Delete
Wend
Application.Options.AutoFormatAsYouTypeReplaceHyperlinks = False Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = " "
.Replacement.Text = " "
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
For i = nn To 0 Step -1 ‘Ïîèñê ñòðàíö
SS2 = Trim(i)
SS1 = "^m" + SS2 + "^p" Selection.Find.ClearFormatting
With Selection.Find
.Text = SS1
.Replacement.Text = ""
.Forward = False
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = False
End With
‘Ðàññòàíîâêà çàêëàäîê
If Selection.Find.Execute Then
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = SS2
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = False
End With
Selection.Find.Execute With ActiveDocument.Bookmarks
.Add Range:=Selection.Range, Name:="m" + Trim(i)
.DefaultSorting = wdSortByName
.ShowHidden = False
End With
End If
Next i
End Sub

Sub SetLink()

‘ Ìàêðîñ1 Ìàêðîñ
‘ Ìàêðîñ çàïèñàí 2012/01/21 Admin

nn = 200

‘While Selection.Find.Execute = True
‘i = 0
‘While Selection.Text <> "}"
‘ Selection.MoveRight Unit:=wdCharacter, Count:=1
‘ i = i + 1
‘Wend
For i = nn To 0 Step -1 ‘Ïîèñê ñòðàíö
SS2 = Trim(i)
SS1 = "òêðîé ñòðàíèö? " + SS2 + "[!][0-9]"
work = True
While work = True Selection.Find.ClearFormatting
With Selection.Find
.Text = SS1
.Replacement.Text = ""
.Forward = False
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True
End With ‘Ðàññòàíîâêà çàêëàäîê If Selection.Find.Execute Then Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = SS2
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = False
End With
Selection.Find.Execute
ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:="", _
SubAddress:="m" + SS2, ScreenTip:="", TextToDisplay:="@" + Selection.Text
Selection.HomeKey Unit:=wdLine
Else
work = False
End If
Wend
Next i
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "@"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = False
End With
Selection.Find.Execute Replace:=wdReplaceAll End Sub
Во всех бочках затычка

Если честно, не совсем понял что делают макросы. Не поясните?
Плюс, "возьмите" код в тэг [code]

Путник


Sub SetMarks&#40;&#41;
'
' Макрос расставлет закладки в параграфах
'
&nbsp; &nbsp; 'Изменяемая переменная. Определяет кол-во параграфов
&nbsp; &nbsp; nn = 200
&nbsp; &nbsp;
&nbsp; &nbsp; 'While Selection.Find.Execute = True
&nbsp; &nbsp; &nbsp;'i = 0
&nbsp; &nbsp; &nbsp;'While Selection.Text <> "&#125;"
&nbsp; &nbsp; &nbsp; '&nbsp; &nbsp;Selection.MoveRight Unit&#58;=wdCharacter, Count&#58;=1
&nbsp; &nbsp; &nbsp; &nbsp;'&nbsp; i = i + 1
&nbsp; &nbsp; &nbsp;'Wend
&nbsp;' Очитска текста от всех закладок и гиперссылок&nbsp; &nbsp;
Dim oBkm As Bookmark
For Each oBkm In ActiveDocument.Range.Bookmarks
oBkm.Delete
Next
While ActiveDocument.Hyperlinks.Count > 0
&nbsp;ActiveDocument.Hyperlinks&#40;1&#41;.Delete
&nbsp;Wend
&nbsp;Application.Options.AutoFormatAsYouTypeReplaceHyperlinks = False
&nbsp; &nbsp;
&nbsp; &nbsp; 'Эту часть можно удалить. Она заменяет двойные пробелы на одиночные
&nbsp; &nbsp; Selection.Find.ClearFormatting
&nbsp; &nbsp; Selection.Find.Replacement.ClearFormatting
&nbsp; &nbsp; With Selection.Find
&nbsp; &nbsp; &nbsp; &nbsp; .Text = "&nbsp; "
&nbsp; &nbsp; &nbsp; &nbsp; .Replacement.Text = " "
&nbsp; &nbsp; &nbsp; &nbsp; .Forward = True
&nbsp; &nbsp; &nbsp; &nbsp; .Wrap = wdFindContinue
&nbsp; &nbsp; &nbsp; &nbsp; .Format = False
&nbsp; &nbsp; &nbsp; &nbsp; .MatchCase = False
&nbsp; &nbsp; &nbsp; &nbsp; .MatchWholeWord = False
&nbsp; &nbsp; &nbsp; &nbsp; .MatchByte = False
&nbsp; &nbsp; &nbsp; &nbsp; .MatchAllWordForms = False
&nbsp; &nbsp; &nbsp; &nbsp; .MatchSoundsLike = False
&nbsp; &nbsp; &nbsp; &nbsp; .MatchWildcards = False
&nbsp; &nbsp; &nbsp; &nbsp; .MatchFuzzy = False
&nbsp; &nbsp; End With
&nbsp; &nbsp; Selection.Find.Execute Replace&#58;=wdReplaceAll
&nbsp; &nbsp;
&nbsp; &nbsp;
&nbsp; &nbsp;
&nbsp; &nbsp; 'Расстановка закладок.
&nbsp; &nbsp; 'Идёт от конца к началу
&nbsp; &nbsp; &nbsp;For i = nn To 0 Step -1
&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; 'Формируем номер закладки
&nbsp; &nbsp; SS2 = Trim&#40;i&#41;
'Это основная строка. В ней задётся поиск параграфа
'В данном случае номер следует за началом новой страницы
'и заканчивается знаком абзаца
'В зависимости от книги эту строку надо менять
&nbsp; &nbsp; &nbsp; &nbsp;SS1 = "^m" + SS2 + "^p"
&nbsp; &nbsp;
&nbsp; &nbsp; Selection.Find.ClearFormatting
&nbsp; &nbsp; With Selection.Find
&nbsp; &nbsp; &nbsp; &nbsp; .Text = SS1
&nbsp; &nbsp; &nbsp; &nbsp; .Replacement.Text = ""
&nbsp; &nbsp; &nbsp; &nbsp; .Forward = False
&nbsp; &nbsp; &nbsp; &nbsp; .Wrap = wdFindContinue
&nbsp; &nbsp; &nbsp; &nbsp; .Format = False
&nbsp; &nbsp; &nbsp; &nbsp; .MatchCase = False
&nbsp; &nbsp; &nbsp; &nbsp; .MatchWholeWord = False
&nbsp; &nbsp; &nbsp; &nbsp; .MatchByte = False
&nbsp; &nbsp; &nbsp; &nbsp; .MatchAllWordForms = False
&nbsp; &nbsp; &nbsp; &nbsp; .MatchSoundsLike = False
&nbsp; &nbsp; &nbsp; &nbsp; .MatchWildcards = False
&nbsp; &nbsp; &nbsp; &nbsp; .MatchFuzzy = False
&nbsp; &nbsp; End With
&nbsp; &nbsp; 'Это выделение непосредственно самого номера параграфа.
&nbsp; &nbsp; 'Если этого не сделать, служебные знаки
&nbsp; &nbsp; 'могут привести к порче текста
&nbsp; &nbsp; If Selection.Find.Execute Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Selection.Find.ClearFormatting
&nbsp; &nbsp; Selection.Find.Replacement.ClearFormatting
&nbsp; &nbsp; With Selection.Find
&nbsp; &nbsp; &nbsp; &nbsp; .Text = SS2
&nbsp; &nbsp; &nbsp; &nbsp; .Replacement.Text = ""
&nbsp; &nbsp; &nbsp; &nbsp; .Forward = True
&nbsp; &nbsp; &nbsp; &nbsp; .Wrap = wdFindContinue
&nbsp; &nbsp; &nbsp; &nbsp; .Format = False
&nbsp; &nbsp; &nbsp; &nbsp; .MatchCase = False
&nbsp; &nbsp; &nbsp; &nbsp; .MatchWholeWord = False
&nbsp; &nbsp; &nbsp; &nbsp; .MatchByte = False
&nbsp; &nbsp; &nbsp; &nbsp; .MatchAllWordForms = False
&nbsp; &nbsp; &nbsp; &nbsp; .MatchSoundsLike = False
&nbsp; &nbsp; &nbsp; &nbsp; .MatchWildcards = False
&nbsp; &nbsp; &nbsp; &nbsp; .MatchFuzzy = False
&nbsp; &nbsp; End With
&nbsp; &nbsp; Selection.Find.Execute
&nbsp; &nbsp; &nbsp;'А это устанавливается сама закладка&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp;With ActiveDocument.Bookmarks
&nbsp; &nbsp; &nbsp; &nbsp; .Add Range&#58;=Selection.Range, Name&#58;="m" + Trim&#40;i&#41;
&nbsp; &nbsp; &nbsp; &nbsp; .DefaultSorting = wdSortByName
&nbsp; &nbsp; &nbsp; &nbsp; .ShowHidden = False
&nbsp; &nbsp; &nbsp;End With
&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; End If
&nbsp; &nbsp; Next i
&nbsp; End Sub

Вообще можно добавить сообщение если какой-то параграф не будет найден. что иногда бывает, по той причине, что в тексте есть мусор, котрый не был обнаружен.

Добавил через 21 минут 57 секунд:

Этот макрос ставит гиперссылки на параграфы


Sub SetLincs()

‘как в первом макросе
    nn = 200
   
   
   
   
    For i = nn To 0 Step -1
       
   
    SS2 = Trim(i)
    SS1 = “крой страниц? “ + SS2 + “[!][0-9]”
    work = True
   
‘Этот цикл устанавливет все найденные гипрессылки на данный параграф.

   While work = True
   
    Selection.Find.ClearFormatting
     With Selection.Find
        .Text = SS1
        .Replacement.Text = “”
        .Forward = False
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchFuzzy = False
        .MatchWildcards = True
    End With
   
   
   
    ‘
   
    If Selection.Find.Execute Then
             
      Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = SS2
        .Replacement.Text = “”
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = False
        .MatchFuzzy = False
    End With
    Selection.Find.Execute
             
             
     ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:=”“, _
     SubAddress:=“m” + SS2, ScreenTip:=”“, TextToDisplay:=”@” + Selection.Text
     Selection.HomeKey Unit:=wdLine
    Else
    work = False
    End If
   
 
   Wend
     Next i
 
  ‘Для того, чтобы уже найденные гиперссылки не мешали поиску,
  ‘в них ставился знак . Сейчас все гиперссылки расставлены
&nbsp; 'и этот знак удаляется.
&nbsp; Selection.Find.ClearFormatting
&nbsp; &nbsp; Selection.Find.Replacement.ClearFormatting
&nbsp; &nbsp; With Selection.Find
&nbsp; &nbsp; &nbsp; &nbsp; .Text = "

        .Replacement.Text = “”
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = False
        .MatchFuzzy = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
 
  End Sub

Сказали спасибо(1): Jumangee