J'ai été manuellement la conversion d'articles dans la syntaxe Markdown pour quelques jours maintenant, et il devient assez fastidieux. Certains de ceux-ci sont 3 ou 4 pages, italique et d'autres de texte mise en évidence tout au long de. Est-il un moyen plus rapide pour convertir les (.rtf/.doc) les fichiers à nettoyer, la Syntaxe Markdown que je peux profiter de la?
Réponses
Trop de publicités?Si vous arrive d'être sur un mac, textutil
fait un bon travail de convertir doc, docx et rtf en html, et pandoc fait un bon travail de convertir le html résultant de markdown:
$ textutil -convert html file.doc -stdout | pandoc -f html -t markdown -o file.md
J'ai un script que j'ai jeté un temps, qui essaie d'utiliser textutil, pdf2html, et pandoc pour convertir tout ce que je jeter à elle de markdown.
ProgTips a une solution possible avec une macro Word (source télécharger):
Une simple macro (source de téléchargement) pour la conversion de la plupart des choses triviales automatiquement. Cette macro:
- Remplacer le gras et l'italique
- Remplacer les en-têtes (marquée titre 1-6)
- Remplacer les listes à puces et numérotées
Il est très buggé, je crois qu'il se bloque sur des documents plus volumineux, mais je suis Ne disons PAS que c'est une version stable de toute façon! :-) L'utilisation à titre expérimental seulement, recode et de la réutiliser comme vous voulez, postez un commentaire si vous avez trouvé un une meilleure solution.
Source: ProgTips
Macro source
Installation
- ouvrir WinWord,
- appuyez sur Alt+F11 pour ouvrir l'éditeur VBA,
- cliquez-droit sur le premier projet dans le navigateur de projets
- choisissez insertion->module
- collez le code dans le fichier
- fermer éditeur de macro
- allez dans outils>macro>macros; exécuter la macro nommée MarkDown
Source: ProgTips
Source
Macro source pour garder en toute sécurité si ProgTips supprime le post ou le site est anéanti:
'*** 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
Source: ProgTips
Si vous êtes ouvert à l'aide de l' .docx
format, vous pouvez utiliser ce script PHP que j'ai mis en place qui va extraire le fichier XML, exécuter certaines transformations XSL de sortie et un bon de Réductions de prix équivalent:
https://github.com/matb33/docx2md
Notez qu'il est prévu pour fonctionner à partir de la ligne de commande, et est plutôt basique dans son interface. Cependant, il obtiendra le travail fait!
Si le script ne fonctionne pas assez bien pour vous, je vous encourage à m'envoyer votre .docx
fichiers afin que je puisse reproduire votre problème et de le résoudre. Journal d'un problème dans GitHub ou à me contacter directement si vous le souhaitez.
Nous avons eu le même problème d'avoir à convertir des documents Word au format markdown. Certains ont été plus compliqué et (très) gros documents, avec des équations mathématiques et des images, par exemple. Alors j'ai fait ce script qui convertit à l'aide de différents outils: https://github.com/Versal/word2markdown
Parce qu'il utilise une chaîne de plusieurs outils, il est un peu plus sujettes à l'erreur, mais il peut être un bon point de départ si vous avez plus compliqué documents. J'espère que ça peut être utile! :)
Mise à jour: Actuellement, il ne fonctionne que sur Mac OS X, et vous avez besoin d'avoir des exigences installé (Word, Pandoc, HTML Tidy, git, nœud/mnp). Pour que cela fonctionne correctement, vous devez également ouvrir un document Word vide, et à faire: Fichier>Enregistrer en tant Que Page web->Compatibilité->Codage->UTF-8. Puis ce codage est enregistré en tant que par défaut. Voir le fichier README pour plus de détails sur la façon de configurer.
Ensuite, exécutez ceci dans la console:
$ 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
Ensuite, vous pouvez trouver la Démarque en document.md
et les images dans le répertoire document_files
.
C'est peut-être un peu compliqué, alors je serais heureux de toutes les contributions qui font de ce plus facile ou faire ce travail sur d'autres systèmes d'exploitation! :)