Я вручную конвертировал статьи в синтаксис Markdown в течение нескольких дней, и это становится довольно утомительным. Некоторые из них - 3 или 4 страницы, курсив и другой выделенный текст. Есть ли более быстрый способ конвертировать (.rtf |.doc) файлы для очистки синтаксиса Markdown, который я могу использовать?
Быстрое преобразование (.rtf |.doc) файлов в синтаксис Markdown с помощью PHP
Ответ 1
Если вы оказались на mac, textutil
делает хорошую работу по преобразованию doc, docx и rtf в html, а pandoc отлично справляется с преобразованием полученного html в уценку:
$ textutil -convert html file.doc -stdout | pandoc -f html -t markdown -o file.md
У меня есть script, который я собрал вместе назад, который пытается использовать textutil, pdf2html и pandoc, чтобы конвертировать все, что я бросаю на нем на уценку.
Ответ 2
ProgTips имеет возможное решение с макросом Word ( источник скачать):
A простой макрос (загрузка источника) для автоматического преобразования самых тривиальных вещей. Этот макрос делает:
- Заменить жирный шрифт и курсив
- Заменить заголовки (маркированный заголовок 1-6)
- Заменить пронумерованные и маркированные списки
Это очень багги, я считаю, что он висит на больших документах, однако я НЕ заявляя, что это стабильный релиз!:-) Экспериментальное использование только, перекодировать и повторно использовать его по своему усмотрению, опубликовать комментарий, если вы нашли лучшее решение.
Источник: ProgTips
Источник макроса
Установка
- откройте WinWord,
- нажмите Alt + F11, чтобы открыть редактор VBA,
- щелкните правой кнопкой мыши первый проект в браузере проекта
- выберите insert- > module
- вставьте код из файла
- закрыть макро-редактор
- go tools > macro > макросы; запустите макрос с именем MarkDown
Источник: ProgTips
Источник
Макро источник для безопасного хранения, если ProgTips удаляет сообщение или сайт уничтожается:
'*** A simple MsWord->Markdown replacement macro by Kriss Rauhvargers, 2006.02.02.
'*** This tool does NOT implement all the markup specified in MarkDown definition by John Gruber, only
'*** the most simple things. These are:
'*** 1) Replaces all non-list paragraphs to ^p paragraph so MarkDown knows it is a stand-alone paragraph
'*** 2) Converts tables to text. In fact, tables get lost.
'*** 3) Adds a single indent to all indented paragraphs
'*** 4) Replaces all the text in italics to _text_
'*** 5) Replaces all the text in bold to **text**
'*** 6) Replaces Heading1-6 to #..#Heading (Heading numbering gets lost)
'*** 7) Replaces bulleted lists with ^p * listitem ^p* listitem2...
'*** 8) Replaces numbered lists with ^p 1. listitem ^p2. listitem2...
'*** Feel free to use and redistribute this code
Sub MarkDown()
Dim bReplace As Boolean
Dim i As Integer
Dim oPara As Paragraph
'remove formatting from paragraph sign so that we dont get **blablabla^p** but rather **blablabla**^p
Call RemoveBoldEnters
For i = Selection.Document.Tables.Count To 1 Step -1
Call Selection.Document.Tables(i).ConvertToText
Next
'simple text indent + extra paragraphs for non-numbered paragraphs
For i = Selection.Document.Paragraphs.Count To 1 Step -1
Set oPara = Selection.Document.Paragraphs(i)
If oPara.Range.ListFormat.ListType = wdListNoNumbering Then
If oPara.LeftIndent > 0 Then
oPara.Range.InsertBefore (">")
End If
oPara.Range.InsertBefore (vbCrLf)
End If
Next
'italic -> _italic_
Selection.HomeKey Unit:=wdStory
bReplace = ReplaceOneItalic 'first replacement
While bReplace 'other replacements
bReplace = ReplaceOneItalic
Wend
'bold-> **bold**
Selection.HomeKey Unit:=wdStory
bReplace = ReplaceOneBold 'first replacement
While bReplace
bReplace = ReplaceOneBold 'other replacements
Wend
'Heading -> ##heading
For i = 1 To 6 'heading1 to heading6
Selection.HomeKey Unit:=wdStory
bReplace = ReplaceH(i) 'first replacement
While bReplace
bReplace = ReplaceH(i) 'other replacements
Wend
Next
Call ReplaceLists
Selection.HomeKey Unit:=wdStory
End Sub
'***************************************************************
' Function to replace bold with _bold_, only the first occurance
' Returns true if any occurance found, false otherwise
' Originally recorded by WinWord macro recorder, probably contains
' quite a lot of useless code
'***************************************************************
Function ReplaceOneBold() As Boolean
Dim bReturn As Boolean
Selection.Find.ClearFormatting
With Selection.Find
.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Font.Bold = True
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
bReturn = False
While Selection.Find.Execute = True
bReturn = True
Selection.Text = "**" & Selection.Text & "**"
Selection.Font.Bold = False
Selection.Find.Execute
Wend
ReplaceOneBold = bReturn
End Function
'*******************************************************************
' Function to replace italic with _italic_, only the first occurance
' Returns true if any occurance found, false otherwise
' Originally recorded by WinWord macro recorder, probably contains
' quite a lot of useless code
'********************************************************************
Function ReplaceOneItalic() As Boolean
Dim bReturn As Boolean
Selection.Find.ClearFormatting
With Selection.Find
.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Font.Italic = True
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
bReturn = False
While Selection.Find.Execute = True
bReturn = True
Selection.Text = "_" & Selection.Text & "_"
Selection.Font.Italic = False
Selection.Find.Execute
Wend
ReplaceOneItalic = bReturn
End Function
'*********************************************************************
' Function to replace headingX with #heading, only the first occurance
' Returns true if any occurance found, false otherwise
' Originally recorded by WinWord macro recorder, probably contains
' quite a lot of useless code
'*********************************************************************
Function ReplaceH(ByVal ipNumber As Integer) As Boolean
Dim sReplacement As String
Select Case ipNumber
Case 1: sReplacement = "#"
Case 2: sReplacement = "##"
Case 3: sReplacement = "###"
Case 4: sReplacement = "####"
Case 5: sReplacement = "#####"
Case 6: sReplacement = "######"
End Select
Selection.Find.ClearFormatting
Selection.Find.Style = ActiveDocument.Styles("Heading " & ipNumber)
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
bReturn = False
While Selection.Find.Execute = True
bReturn = True
Selection.Range.InsertBefore (vbCrLf & sReplacement & " ")
Selection.Style = ActiveDocument.Styles("Normal")
Selection.Find.Execute
Wend
ReplaceH = bReturn
End Function
'***************************************************************
' A fix-up for paragraph marks that ar are bold or italic
'***************************************************************
Sub RemoveBoldEnters()
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Font.Italic = True
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Font.Bold = False
Selection.Find.Replacement.Font.Italic = False
With Selection.Find
.Text = "^p"
.Replacement.Text = "^p"
.Forward = True
.Wrap = wdFindContinue
.Format = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Font.Bold = True
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Font.Bold = False
Selection.Find.Replacement.Font.Italic = False
With Selection.Find
.Text = "^p"
.Replacement.Text = "^p"
.Forward = True
.Wrap = wdFindContinue
.Format = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
'***************************************************************
' Function to replace bold with _bold_, only the first occurance
' Returns true if any occurance found, false otherwise
' Originally recorded by WinWord macro recorder, probably contains
' quite a lot of useless code
'***************************************************************
Sub ReplaceLists()
Dim i As Integer
Dim j As Integer
Dim Para As Paragraph
Selection.HomeKey Unit:=wdStory
'iterate through all the lists in the document
For i = Selection.Document.Lists.Count To 1 Step -1
'check each paragraph in the list
For j = Selection.Document.Lists(i).ListParagraphs.Count To 1 Step -1
Set Para = Selection.Document.Lists(i).ListParagraphs(j)
'if it a bulleted list
If Para.Range.ListFormat.ListType = wdListBullet Then
Para.Range.InsertBefore (ListIndent(Para.Range.ListFormat.ListLevelNumber, "*"))
'if it a numbered list
ElseIf Para.Range.ListFormat.ListType = wdListSimpleNumbering Or _
wdListMixedNumbering Or _
wdListListNumOnly Then
Para.Range.InsertBefore (Para.Range.ListFormat.ListValue & ". ")
End If
Next j
'inserts paragraph marks before and after, removes the list itself
Selection.Document.Lists(i).Range.InsertParagraphBefore
Selection.Document.Lists(i).Range.InsertParagraphAfter
Selection.Document.Lists(i).RemoveNumbers
Next i
End Sub
'***********************************************************
' Returns the MarkDown indent text
'***********************************************************
Function ListIndent(ByVal ipNumber As Integer, ByVal spChar As String) As String
Dim i As Integer
For i = 1 To ipNumber - 1
ListIndent = ListIndent & " "
Next
ListIndent = ListIndent & spChar & " "
End Function
Источник: ProgTips
Ответ 3
Если вы открыты для использования формата .docx
, вы можете использовать этот PHP скрипт, который я собрал вместе, который будет извлекать XML, запускать некоторые преобразования XSL и выводить довольно приличный эквивалент Markdown:
https://github.com/matb33/docx2md
Обратите внимание, что он предназначен для работы из командной строки и является довольно простым в его интерфейсе. Однако он выполнит свою работу!
Если script работает недостаточно для вас, я рекомендую вам отправить мне ваши файлы .docx
, чтобы я мог воспроизвести вашу проблему и исправить ее. Зарегистрируйте проблему в GitHub или свяжитесь со мной напрямую, если хотите.
Ответ 4
Pandoc - хороший инструмент для преобразования в командной строке, но опять же, вам сначала нужно будет ввести ввод в формат, который Pandoc может читать, что
- уценки
- reStructuredText
- текстильный
- HTML
- LaTeX
Ответ 5
У нас была та же проблема, что и конвертирование документов Word в уценку. Некоторые из них были более сложными и (очень) большими документами, с математическими уравнениями и изображениями и т.д. Поэтому я сделал этот script, который преобразуется с использованием нескольких различных инструментов: https://github.com/Versal/word2markdown
Поскольку он использует цепочку из нескольких инструментов, он немного более подвержен ошибкам, но это может быть хорошей отправной точкой, если у вас есть более сложные документы. Надеюсь, это может быть полезно!:)
Update: В настоящее время он работает только в Mac OS X, и вам нужно установить некоторые требования (Word, Pandoc, HTML Tidy, git, node/npm). Для правильной работы вам также нужно открыть пустой документ Word и выполнить следующие действия: File- > Save As Webpage- > Compatibility- > Encoding- > UTF-8. Затем эта кодировка сохраняется по умолчанию. Подробнее о настройке см. В README.
Затем запустите это в консоли:
$ git clone [email protected]:Versal/word2markdown.git
$ cd word2markdown
$ npm install
(copy over the Word files, for example, "document.docx")
$ ./doc-to-md.sh document.docx document_files > document.md
Затем вы можете найти Markdown в document.md
и изображениях в каталоге document_files
.
Возможно, сейчас это немного сложно, поэтому я хотел бы приветствовать любые вклады, которые облегчают эту работу или делают эту работу в других операционных системах!:)
Ответ 6
Вы пробовали этот? Не уверен в функциональности, но он работает для простых текстов. http://markitdown.medusis.com/
Ответ 7
В рамках курса рубинового университета я разработал инструмент, который может преобразовывать файлы word openoffice (.odt) в уценку. Необходимо сделать много предположений, чтобы превратить его в правильное форматирование. Например, трудно определить размер текста, который должен считаться заголовком. Однако единственное, что вы можете потерять при этом преобразовании, - это форматирование любого текста, который выполняется, всегда добавляется к документу уценки. Инструмент, который я разработал, поддерживает списки, жирный и курсивный текст, и он имеет синтаксис для таблиц.
http://github.com/bostko/doc2text Попробуйте, пожалуйста, дайте мне свои отзывы.