modificar - rellenar un documento de word desde php
Convierta archivos(.rtf |.doc) rápidamente a la sintaxis de Markdown con PHP (7)
He estado convirtiendo manualmente los artículos en la sintaxis de Markdown durante unos días, y se está volviendo bastante tedioso. Algunos de estos son 3 o 4 páginas, cursivas y otro texto enfatizado en todo. ¿Existe una forma más rápida de convertir archivos (.rtf | .doc) para limpiar la sintaxis de Markdown que puedo aprovechar?
¿Has probado este? No estoy seguro sobre la riqueza de características, pero funciona para textos simples. http://markitdown.medusis.com/
Como parte del curso ruby de la universidad, desarrollé una herramienta que puede convertir archivos de palabras de OpenOffice (.odt) a markdown. Se deben hacer muchas suposiciones para convertirlo en un formato correcto. Por ejemplo, es difícil determinar el tamaño de un texto que debe considerarse como Título. Sin embargo, lo único que se puede perder con esta conversión es que el formato del texto que se cumple siempre se agrega al documento de reducción. La herramienta que he desarrollado admite listas, texto en negrita y cursiva, y tiene sintaxis para las tablas.
http://github.com/bostko/doc2text Pruébalo y por favor dame tu opinión.
Si está abierto para usar el formato .docx
, podría usar este script PHP que reuní para extraer el XML, ejecutar algunas transformaciones XSL y generar un equivalente de Markdown bastante decente:
https://github.com/matb33/docx2md
Tenga en cuenta que está diseñado para funcionar desde la línea de comandos, y es bastante básico en su interfaz. Sin embargo, hará el trabajo!
Si el script no funciona lo suficientemente bien para usted, le recomiendo que me envíe sus archivos .docx
para que pueda reproducir su problema y solucionarlo. Registra un problema en GitHub o contáctame directamente si lo prefieres.
Tuvimos el mismo problema de tener que convertir documentos de Word a rebajas. Algunos eran documentos más complicados y (muy) grandes, con ecuaciones e imágenes matemáticas y demás. Así que hice este script que se convierte usando varias herramientas diferentes: https://github.com/Versal/word2markdown
Debido a que usa una cadena de varias herramientas, es un poco más propenso a errores, pero puede ser un buen punto de partida si tiene documentos más complicados. Espero que pueda ser útil! :)
Actualización: actualmente solo funciona en Mac OS X, y necesita tener algunos requisitos instalados (Word, Pandoc, HTML Tidy, git, node / npm). Para que funcione correctamente, también debe abrir un documento de Word vacío y hacer lo siguiente: Archivo-> Guardar como página web-> Compatibilidad-> Codificación-> UTF-8. Entonces esta codificación se guarda por defecto. Vea el archivo README para más detalles sobre cómo configurarlo.
Luego ejecuta esto en la consola:
$ 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
Luego puede encontrar el Markdown en document.md
y las imágenes en el directorio document_files
.
Quizás sea un poco complicado ahora, por lo que agradecería cualquier contribución que lo haga más fácil o que funcione en otros sistemas operativos. :)
Pandoc es una buena herramienta de conversión de línea de comandos, pero una vez más, primero deberá ingresar la información en un formato que Pandoc pueda leer, que es:
- reducción
- reStructuredText
- textil
- HTML
- Látex
ProgTips tiene una posible solución con una macro de Word (descarga de origen) :
Una macro simple (descarga de fuente) para convertir las cosas más triviales automáticamente. Esta macro hace:
- Reemplazar negrita y cursiva
- Reemplace los encabezados (marcados en el rumbo 1-6)
- Reemplazar las listas numeradas y con viñetas
Es muy defectuoso, creo que se cuelga en documentos más grandes, sin embargo, ¡NO estoy diciendo que sea una versión estable de todos modos! :-) Solo uso experimental, recodificarlo y reutilizarlo como lo desee, publicar un comentario si ha encontrado una mejor solución.
Fuente: ProgTips
Fuente macro
Instalación
- abrir WinWord,
- presione Alt + F11 para abrir el editor de VBA,
- haga clic derecho en el primer proyecto en el navegador del proyecto
- elegir insertar-> módulo
- pegue el código del archivo
- cerrar editor de macro
- ir a herramientas> macro> macros; ejecuta la macro llamada MarkDown
Fuente: ProgTips
Fuente
Fuente macro para mantener a salvo si ProgTips elimina la publicación o el sitio se aniquila:
''*** 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
Fuente: ProgTips
Si usted está en un Mac, textutil
hace un buen trabajo al convertir doc, docx y rtf a html, y pandoc hace un buen trabajo al convertir el html resultante al marcado:
$ textutil -convert html file.doc -stdout | pandoc -f html -t markdown -o file.md
Tengo un script que lancé hace un tiempo que intenta usar textutil, pdf2html y pandoc para convertir todo lo que arrojo a markdown.