2013-01-10 25 views
52

Zautomatyzowałem moją kompilację, aby konwertować pliki Markdown na pliki DOCX przy użyciu Pandoc. Użyłem nawet dokumentu referencyjnego do stylizacji końcowego dokumentu. Polecenie jest używać:Markdown do docx, w tym złożony szablon

pandoc -f markdown -t docx --data-dir=docs/rendering/ mydoc.md -o mydoc.docx 

reference.docx jest odbierany przez Pandoc z docs/rendering i Pandoc powoduje mydoc.docx z tych samych stylów jak dokumencie odniesienia.

Jednak reference.docx zawiera więcej niż tylko style. Zawiera logo, preambułę, itp.

W jaki sposób mogę zautomatyzować scalanie treści Markdown ze stylami i zawartością reference.docx. Moje rozwiązanie musi działać w systemie Linux.

+0

Możesz wypróbować MergeDocx (nasz produkt komercyjny, Java) – JasonPlutext

+0

Próbowałem kiedyś coś takiego, ale okazało się, że łatwiej jest po prostu renderować stronę ze specjalnymi stylami drukowania i pozwolić Chrome na tworzenie z niej pliku PDF. Lub wydrukuj stronę na drukarce PDF. Musiałem odtworzyć cały DOCX, ale wydawało mi się to łatwiejsze niż scalanie w całym formatowaniu (i ryzykowanie błędów). – ayke

Odpowiedz

11

Idealnie PanDoc będzie rozwijać tę funkcję but it doesn't look like likely w najbliższym czasie.

Nie wiem o żadnych narzędziach, które wykonają zadanie bezpośrednio, ale prawdopodobnie można by uzyskać połączenie polegające na scaleniu reference.docx i wygenerowanym przez PanDoc mydoc.docx w kodzie.

Format .docx to archiwum ZIP (głównie) plików XML. Najważniejsze jest word/document.xml. Jeśli używasz narzędzia XML do pobrania (większości) z document.xml z jednego pliku i wstawienia go do drugiego, będziesz mieć coś bliżej tego, czego potrzebujesz.

Mogę zhakować razem przykład, powiedzmy, Ruby, jeśli ilustracja pomogłaby.

10

Idealnie można użyć niestandardowego szablonu docx, ale pandoc jeszcze tego nie obsługuje. Plik reference.docx pozwala tylko na osadzanie niestandardowych stylów w nowo utworzonych plikach docx.

Na szczęście można to w przybliżeniu za pomocą odt odtworzyć zamiast docx. Możesz łatwo zmodyfikować default OpenDocument template, aby uwzględnić niestandardowe logo, preambułę i inne rzeczy. Użyj niestandardowego szablonu w połączeniu z plikiem reference.odt, aby uzyskać wszystkie style i niestandardową zawartość.

Po odtworzeniu pliku w formacie odt można użyć dowolnej liczby narzędzi wiersza poleceń do konwersji z odt do docx. Na przykład, w systemie Linux można uruchomić

libreoffice --invisible --convert-to docx test.odt 

lub na OS X:

/Applications/LibreOffice.app/Contents/MacOS/soffice.bin --invisible --convert-to docx test.odt 
+1

Dlaczego nie automatycznie przekonwertować plików/szablonów docx na odt? A następnie użyć odt odtworzenia w pandoc? (Jestem nowicjuszem pandoc i nowicjuszem w zakresie szablonów, więc proszę wybacz moje niewykształcone pytanie.) –

+1

Pandoc potrzebuje specjalnych zmiennych w szablonie odt, aby działały poprawnie (zobacz https://github.com/andrewheiss/Global-Pandoc-files/ blob/master/templates/odt.template # L34, na przykład). Nie można ich utworzyć w natywnym docx-u, trzeba je dodawać ręcznie za pomocą edytora tekstowego. – Andrew

10

Wiem, że to późno w najbliższych, ale będę zakładając ludzie wciąż szukają rozwiązań do tej trójki lat po pierwotnym pytaniu - wiem, że byłem.

Moim rozwiązaniem było wykorzystanie LaTeXa jako pośrednika między przecinkiem a docxem (faktycznie konwertowałem z trybu org, ale tę samą różnicę). Tak więc w twoim przypadku, wierzę, że jedno-liniowe rozwiązanie byłoby:

pandoc -f markdown -t latex -o mydoc.tex mydoc.md && \ 
pandoc -f latex -t docx --data-dir=docs/rendering/ -o mydoc.docx mydoc.tex 

Które mogą zbliżyć Cię do celu. Oczywiście, Pandoc ma około stu argumentów, którymi może sobie poradzić, i prawdopodobnie istnieją sposoby, aby uczynić to ładniejszym. Otrzymał również sporo aktualizacji od czasu, gdy po raz pierwszy opublikowałeś swoje pytanie.