Быстрое преобразование (.rtf | .doc) файлов в синтаксис Markdown с помощью PHP

Я вручную конвертировал статьи в синтаксис Markdown в течение нескольких дней, и это становится довольно утомительным. Некоторые из них – 3 или 4 страницы, курсив и другой выделенный текст. Есть ли более быстрый способ конвертировать (.rtf | .doc) файлы для очистки синтаксиса Markdown, который я могу использовать?

Solutions Collecting From Web of "Быстрое преобразование (.rtf | .doc) файлов в синтаксис Markdown с помощью PHP"

Если вы попали на mac, textutil отлично справляется с преобразованием doc, docx и rtf в html, а pandoc делает хорошую работу по преобразованию полученного html в уценку:

 $ textutil -convert html file.doc -stdout | pandoc -f html -t markdown -o file.md 

У меня есть сценарий, который я собрал некоторое время назад, который пытается использовать textutil, pdf2html и pandoc, чтобы конвертировать все, что я бросаю в него, для уценки.

У ProgTips есть возможное решение с макросом Word (загрузка источника) :

Простой макрос (загрузка источника) для автоматического преобразования самых тривиальных вещей. Этот макрос делает:

  • Заменить жирный шрифт и курсив
  • Заменить заголовки (маркированный заголовок 1-6)
  • Заменить пронумерованные и маркированные списки

Это очень багги, я считаю, что он висит на больших документах, однако я НЕ заявляю, что это стабильный релиз в любом случае! 🙂 Экспериментальное использование только, перекодируйте и повторно используйте его, как вам нравится, опубликуйте комментарий, если вы нашли лучшее решение.

Источник: ProgTips

Источник макроса

Монтаж

  • открыть WinWord,
  • нажмите Alt + F11, чтобы открыть редактор VBA,
  • щелкните правой кнопкой мыши первый проект в браузере проекта.
  • выберите модуль insert->
  • вставить код из файла
  • закрыть макроредактор
  • go tools> macro> macros; запустите макрос с именем 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's a bulleted list If Para.Range.ListFormat.ListType = wdListBullet Then Para.Range.InsertBefore (ListIndent(Para.Range.ListFormat.ListLevelNumber, "*")) 'if it's 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

Если вы открыты для использования формата .docx , вы можете использовать этот скрипт PHP, который я собрал вместе, который будет извлекать XML, запускать некоторые преобразования XSL и выводить довольно приличный эквивалент Markdown:

https://github.com/matb33/docx2md

Обратите внимание, что он предназначен для работы из командной строки и является довольно простым в своем интерфейсе. Тем не менее, он выполнит свою работу!

Если сценарий не работает достаточно хорошо для вас, я рекомендую вам отправить мне свои файлы .docx чтобы я мог воспроизвести вашу проблему и исправить ее. Зарегистрируйте проблему в GitHub или свяжитесь со мной напрямую, если хотите.

Pandoc – хороший инструмент преобразования командной строки, но опять же, вам сначала нужно будет ввести ввод в формат, который Pandoc может читать, а именно:

  • уценка
  • ReStructuredText
  • текстильный
  • HTML
  • Латекс

У нас была такая же проблема, как конвертировать документы Word в уценку. Некоторые из них были более сложными и (очень) большими документами, с математическими уравнениями и изображениями и т. Д. Таким образом, я создал этот скрипт, который преобразуется с использованием нескольких различных инструментов: https://github.com/Versal/word2markdown

Поскольку он использует цепочку из нескольких инструментов, это немного более подвержено ошибкам, но это может быть хорошей отправной точкой, если у вас есть более сложные документы. Надеюсь, это может быть полезно! 🙂

Обновление: в настоящее время он работает только в Mac OS X, и вам нужно установить некоторые требования (Word, Pandoc, HTML Tidy, git, node / npm). Для правильной работы вам также нужно открыть пустой документ Word и выполнить следующие действия: File-> Save As Webpage-> Compatibility-> Encoding-> UTF-8. Затем эта кодировка сохраняется по умолчанию. Дополнительную информацию о настройке см. В README.

Затем запустите это в консоли:

 $ git clone git@github.com: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 .

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

Вы пробовали это? Не уверен в функциональности, но он работает для простых текстов. http://markitdown.medusis.com/

В рамках курса рубинового университета я разработал инструмент, который может преобразовывать файлы word openoffice (.odt) в уценку. Необходимо сделать много предположений, чтобы превратить его в правильное форматирование. Например, трудно определить размер текста, который должен считаться заголовком. Однако единственное, что вы можете потерять при этом преобразовании, – это форматирование любого текста, который выполняется, всегда добавляется к документу уценки. Инструмент, который я разработал, поддерживает списки, жирный и курсивный текст, и он имеет синтаксис для таблиц.

http://github.com/bostko/doc2text Попробуйте и попробуйте, пожалуйста, свои отзывы.