Konwertuj docx na PDF

41

Próbuję przekonwertować pliki docx do formatu pdf na moim serwerze Ubuntu przy użyciu wiersza polecenia, ale żaden z konwerterów, których do tej pory próbowałem, nie wydaje się poprawnie konwertować plików Word 2007/2010/2013.

Najwyraźniej konwertery online mogą zarządzać nim bez żadnych problemów, ale usługi sieciowe nie są opcją, ponieważ pliki zawierają poufne dane. Do testów używam tego pliku Word 2007, ponieważ zawiera on kilka ważnych elementów (formuły, grafika wektorowa, obrazy, listy itp.). Testowałem następujące narzędzia (częściowo z tego postu ):

lowriter (LibreOffice Writer) - niepoprawne wyjście (okrąg powinien znajdować się na ostatniej stronie, a nie pierwszej)

wprowadź opis zdjęcia tutaj

unoconv- to samo co LibreOffice, ponieważ nie używa własnego konwertera. Konwersja najpierw do pliku odt, a następnie do pliku pdf powoduje całkowite przeskoczenie pliku.

abiword --to=pdf filename.doc - niepoprawny i niekompletny (brakuje wielu elementów):

wprowadź opis zdjęcia tutaj

OpenOffice Writer - taki sam wynik jak dla abiword

wvPDF - awaria z następującym komunikatem o błędzie:

~ $ wvPDF 2007_Office_DocEncryption.docx test.pdf

Aktualny katalog: / home / webmt / dev / test /

Niektóre problemy z uruchomieniem lateksu.

Sprawdź błędy w test.log

Kontynuacja ...

Konwersja do dvi nie powiodła się

Czy istnieje jakiś sposób prawidłowej konwersji plików docx do formatu PDF w systemie Linux? Pomogłoby mi to również, gdybym wiedział, że działa dla kogoś z którymkolwiek z programów, o których już wspomniałem. Rozpocznę nagrodę, gdy tylko SE mi na to pozwoli.

ps Używam serwera Ubuntu 12.04


Wniosek :

Musiałem dojść do wniosku, że jak dla mnie, jak na razie, nie ma niezawodnego narzędzia, które działałoby z nowymi formatami MS Word i wszelkiego rodzaju jego elementami na Ubuntu i tworzyłoby kopię plików docx jeden do jednego. Żadne z testowanych przeze mnie narzędzi nie mogło poprawnie przekonwertować pliku przykładowego. Ponieważ stanę w obliczu bardzo różnych rodzajów wersji / treści dokumentów, a jakość wydruku ma jeden z najwyższych priorytetów, w końcu wykonam konwersje za pomocą makr VB w programie Word na serwerze Windows podłączonym do mojego systemu Linux.

Ustawię post, aby uzyskać najlepsze wyniki jako zaakceptowaną odpowiedź. Jednak nagroda została przeznaczona na rozwiązanie z absolutnie poprawną konwersją. Jeszcze raz dziękuję wszystkim.

Sceptyczny Jule
źródło
3
próbował lateks?
Braiam
@ScepticalJule, Tak, na końcu jest problem. Właśnie spojrzałem na pierwszą stronę.
1
@Braiam Czy możesz upuścić link do konwersji za pomocą lateksu?
Sceptyczny Jule,
2
@ScepticalJule Myślę, że Braiam oznaczał, że powinieneś natychmiast spróbować napisać dokument w lateksie. Konwersje z docx na lateks są o wiele bardziej bolesne niż konwersje z docx na pdf. Możesz spróbować wykonać konwersję z docx do doc, a następnie z doc do pdf. Aby to zrobić, musisz znaleźć niezależne narzędzie LO. Daj mi znać, czy mogę pomóc w jakikolwiek inny sposób i czy moja odpowiedź pomogła ci.
don.joey

Odpowiedzi:

58

Ta odpowiedź przechodzi wszystkie testy, ale jeden schemat blokowy w dokumencie testowym.

sudo apt-get install unoconv
doc2pdf respondus-docx-sample-file.docx

Dlaczego jest to lepsze niż sugerują dotychczas inne metody?

Testowałem inne sugerowane dotąd metody (szczególnie oowriteri ebook-convert), ale zdają mniej testów niż ta metoda. ebook-convertMetoda paski marginesy i część tekstów spośród dokumentu.

Ta metoda daje nawet lepsze wyniki niż profesjonalny konwerter jak rainbowpdf .

Próbowałem także przekonwertować go na HTML, ale rysunek z kwadratem w okręgu i schemat blokowy są nieprawidłowe.

Dlaczego test schematu blokowego kończy się niepowodzeniem?

Wygląda na to, że libreoffice i unoconv mają pewne problemy z poprawnym renderowaniem schematu blokowego w pliku .docx. Wynika to prawdopodobnie z tego, że został stworzony przy użyciu inteligentnej sztuki w pakiecie Microsoft Office. To jest problem. Jest to błąd również omawiany w tym wątku . Informacje tekstowe i wizualne są obecne w pliku PDF wynikające z powyższej metody, jak widać (musiałem jednak zaznaczyć tekst).

Schemat blokowy, który nie wyświetla się całkowicie zgodnie z oczekiwaniami.

Na przykład kolor czcionki nie został poprawnie odczytany, a niektóre wiersze są za długie. Nie znam żadnego rozwiązania linuksowego, które mogłoby poprawnie wyświetlać sztukę inteligentną. :(

Jest to również powód, dla którego wszystkie printrozwiązania zamieszczone na tej stronie nie będą cię zadowolić.

W skrócie

Krótko mówiąc, to, co robisz, jest naprawdę trudne i obecnie nie ma rozwiązań, które by Cię w pełni satysfakcjonowały. Piętą achillesową konwersji docx2pdf jest sztuka inteligentna. Jeśli możesz żyć bez tego lub możesz znaleźć sposób na dostrzeżenie inteligentnej sztuki i przekształcenie jej w jakiś sposób w obraz, możesz osiągnąć swój cel.

Opcja 1. Zmuś użytkowników do rozwiązania problemu

To bardzo nieeleganckie rozwiązanie. Twórcy treści mogą zapisać swoją inteligentną grafikę jako jpg zgodnie z opisem na stronach pomocy pakietu Office, a zatem konwersja będzie możliwa na serwerze.

Opcja 2. Włam się do rozwiązania problemu

Jeśli schematy blokowe są często bardzo podobne i zależnie od tego, jak dobry jesteś programista, możesz spróbować przekonwertować sztukę inteligentną osobno. Możesz wyodrębnić plik drawing1.xml z klastra dokumentów docx, a następnie użyć przetwarzania języka naturalnego i kilku szalonych hacków, aby odbudować inteligentną grafikę. Na przykład musiałbyś zadzierać z tego typu xml:

<dsp:txBody>
<a:bodyPr spcFirstLastPara="0" vert="horz" wrap="square" lIns="8255" tIns="8255" rIns="8255" bIns="8255" numCol="1" spcCol="1270" anchor="ctr" anchorCtr="0">
<a:noAutofit/>
</a:bodyPr>
<a:lstStyle/>
<a:p>
<a:pPr lvl="0" algn="ctr" defTabSz="577850">
<a:lnSpc><a:spcPct val="90000"/>
</a:lnSpc>
<a:spcBef>
<a:spcPct val="0"/>
</a:spcBef>
<a:spcAft>
<a:spcPct val="35000"/>
</a:spcAft>
</a:pPr>
<a:r>
<a:rPr lang="en-US" sz="1300" b="1" kern="1200"/>
<a:t>All three sides are different lengths
</a:t>
</a:r>
</a:p>
</dsp:txBody>

Lub jako minimalne rozwiązanie przynajmniej wyodrębnij tekst ( <a:t>?) Z pliku i zapisz go w łatwiejszy sposób. Lub jeśli schematy blokowe twoich plików pdf są takie same, możesz napisać skrypt, aby zmienić kolor tekstu i długość linii w samym pliku xml. Następnie możesz uruchomić doc2pdfi mieć plik, który zasadniczo zawiera wszystkie właściwe informacje, ale może nie ma formatowania. W przypadku schematów blokowych prawdopodobnie chciałbyś również uwzględnić niektóre formatowanie, ponieważ formatowanie jest częścią informacji.

Opcja 3. Skorzystaj z usługi strony trzeciej

W ciągu ostatnich kilku dni przeprowadziłem więcej badań i znalazłem usługę, która idealnie wykonuje konwersję: zamzar . Zamzar umożliwia przesłanie pliku docx, a następnie wysłanie linku w wiadomości e-mail. Mają także usługę (płacącą?), W której możesz wysłać dowolny plik na adres [email protected], a następnie pobrać przekonwertowany plik z powrotem do skrzynki odbiorczej. Możesz łatwo zbudować system wokół tego, w którym automatycznie wysyłasz plik i analizujesz go z wiadomości e-mail. To nie jest tak dużo pracy, a wynik końcowy jest najlepszy.

Notatki

  • Jeśli ktoś ma inne usługi, które robią to samo, możesz je edytować.
  • Wysłałem e-mail do Zamzar, aby zapytać, czy mają interfejs API. To byłoby jeszcze łatwiejsze.
  • Może może pomóc aplikacja .NET i Java? Lub docx4java jak w tym bardzo powiązanym poście z SO .
  • Inną opcją jest zajrzenie do konwertera odf, który wydaje się przestarzały i zależy raczej od openoffice niż libreoffice.
  • Mogę teraz potwierdzić, że java jodconverter cierpi również z powodu niepowodzenia konwersji schematu blokowego .

Właściwie poświęciłem czas na przetestowanie różnych metod zaproponowanych na tej stronie. Prosimy o uzupełnienie wszelkich komentarzy aktualnymi testami.

don.joey
źródło
1
Otrzymałem wiadomość od Zamzara: „Mamy obecnie interfejs API, który mamy nadzieję uruchomić w wersji Beta w ciągu najbliższych kilku miesięcy - czy możemy Cię dodać do wersji beta, jeśli byłoby to interesujące?” Wspomnieli również, że ich system konwersji jest czymś, co opracowali wewnętrznie.
don.joey
@jasonplutext Zgadzam się z recenzentami, że Twoja edycja nie była pomocna. Jako autor plutekstu (tak myślę?) Sugerowałbym, abyś dodał własną odpowiedź z zastrzeżeniem stwierdzającym twoje przynależność. Dzięki.
don.joey
Jakieś aktualizacje w ciągu ostatnich kilku lat?
becko
@becko Nie śledziłem tego. Może ustawić nagrodę za kogoś innego?
don.joey
Uwaga z przyszłości: właściwe użycie w najnowszych wersjach lowriterjest teraz lowriter --convert-to pdf input_file.docx. Korzystanie --pt pdfzakończy się niepowodzeniem po cichu.
ACK_stoverflow
6

Jest to rozwiązanie wiersza polecenia, które działa przyzwoicie --- ale korzysta z zastrzeżonego oprogramowania.

Myślę, że podstawowym problemem jest to, że formaty Microsoft Word są w pełni zrozumiałe tylko dla Microsoft Word (nawet tam istnieją różnice między wersjami --- istnieją pliki Word z przeszłości, które otwierają się niepoprawnie sformatowane w nowszych wersjach). Wszystkie pozostałe rozwiązania są przybliżeniami i hackami, więc będą działać lub nie w zależności od pliku.

Tak więc, aby upewnić się, że musisz przetworzyć pliki docx za pomocą instalacji programu Microsoft Word (i tak, myślę, że jest to ich opcja i jest sprawiedliwa. Jeśli nie chcesz używać programu Word, nie używaj go --- Idę z LaTeX do mojej pracy, ale trudno jest przekonać resztę świata dookoła ...).

Używam Crossover od wieków do uruchamiania pakietu Microsoft Office na moim pulpicie Linux (1), co jest dość przydatne. Może to też działa z winem --- nigdy nie próbowałem.

Konwersję wykonuję przy użyciu tej konfiguracji:

1) Mam zainstalowany Crossover

2) Mam swoją wersję pakietu Microsoft Office zainstalowaną pod Crossover

3) W programie Microsoft Word wyłącz „drukowanie w tle”

4) Mam cups-pdfzainstalowaną drukarkę i wybrano ją jako drukarkę domyślną.

5) Aby wykonać konwersję, uruchom (podpowiedzi tutaj ):

~/cxoffice/bin/wine --cx-app winword.exe respondus-docx-sample-file.docx /q /n /mFilePrintDefault /mFileExit

6) Twój przekonwertowany plik pojawi się w ~/PDF/katalogu.

Dokument wychodzi prawie idealnie (w odpowiedzi na pytanie nr 2 są pewne niedopasowania, które są wyświetlane w moim programie Office Word 2007 podczas pracy pod Crossover --- nie wiem, czy jest to związane z moją wersją systemu Windows).

pagew 1-2

strony 3-4

Problem polega na tym, że wyskakuje graficzny interfejs słowa --- nie wiem, jak zrobić go „bezgłowym”. Opcje wiersza polecenia dla programu Word nie pomogły ...

(1) Nie jestem w żaden sposób związany z Codeveawers - po prostu szczęśliwy użytkownik.

Rmano
źródło
4

Miałem również ten problem w przeszłości, nie musiałem go ostatnio używać, więc nie wiem, czy nadal mnie to dotyczy.

Jeśli chodzi o odpowiedź na pytanie:

To pytanie: Jak wykonać konwersję wsadową .doc lub .docx do .pdf, podaje w komentarzach przyczynę lowriterniepowodzenia konwersji :

Uważaj na używanie znaku „spacji” z wiersza poleceń ... Gdy dojdziesz do znaku spacji, po prostu naciśnij „tab”;) - Pitto, 16 listopada 2012 o 13:11

Odpowiedź na to pytanie może również pomóc:

Jak przekonwertować plik ODT na plik PDF?

Uciekłbyś libreoffice --headless --convert-to pdf *.odt. Możesz uzyskać więcej informacji na temat libreoffice za pomocą komendy, man libreofficejeśli potrzebujesz pomocy w zrozumieniu lub dostosowaniu komendy do działania.

Nie możesz jednak mieć otwartego pakietu LibreOffice, jak na ten błąd: https://bugs.freedesktop.org/show_bug.cgi?id=37531


To pytanie jest również związane z Ubuntu, nawet jeśli jest na SuperUser: https://superuser.com/questions/156189/how-to-convert-word-doc-to-pdf-in-linux

Pierwsza odpowiedź ma dwie opcje, jedna używa CUPS i tworzy drukarkę PDF, druga używa LaTex, chociaż mówiłeś, że LaTex zawodzi.

Jeśli chodzi o konwersję do formatu PDF za pomocą CUPS PDF, należy uruchomić, sudo apt-get install cups-pdfa następnie oowriter -pt pdf your_word_file.doc(x). Może to pomóc w rozwiązaniu problemu z pisarzem.

Jest to prawdopodobnie problem z faktem, że próbujesz przekonwertować na format PDF z DOC / DOCX, gdy większość narzędzi używa ODT, ponieważ są one powiązane z LibreOffice / OpenOffice / AbiWord. Dlatego albo nie próbują przekonwertować go z formatu DOCX firmy Microsofts, ani przy konwersji na format ODT.

Istnieje kilka błędów związanych z konwersją z .docx w. Word Art (wersja jest dołączona):

To jest z forum LibreOffice na temat konwersji z .doc i nieco .docx: http://en.libreofficeforum.org/node/5096 . Jest od stycznia 2013 r., Więc powinno to nieco obowiązywać.

Poza tym naprawdę nie wiem. Mam nadzieję, że rozwiążesz swój problem!

RPiAwesomeness
źródło
Przepraszamy, ale żadne z Twoich sugerowanych narzędzi nie może wykonać czystej konwersji.
Sceptyczny Jule
2

Jeśli masz zainstalowany Libreoffice, możesz spróbować dokonać konwersji za pomocą tego. Wystarczy nacisnąć Ctrl+ Alt+ Tna klawiaturze, aby otworzyć Terminal. Kiedy się otworzy, uruchom poniższe polecenia:

libreoffice --headless -convert-to pdf <file_name>.docx -outdir output/path/for/pdf

Inną opcją jest instalacja plików PDF z filiżankami .

Aby to zrobić, naciśnij Ctrl+ Alt+ Tna klawiaturze, aby otworzyć Terminal. Kiedy się otworzy, uruchom poniższe polecenia:

sudo apt-get install cups-pdf

Następnie utwórz nową drukarkę, ustaw ją jako drukarkę plików PDF i nadaj jej dowolną nazwę, o ile znasz nazwę, a następnie uruchom:

oowriter -pt pdf your_word_file.docx

I twój plik PDF będzie w ~/PDF.

Mitch
źródło
1
Nie odniosłem z nimi żadnego sukcesu.
Sceptyczny Jule
To może odpowiedzieć na pytanie dlaczego.
Sceptyczny Jule
Doceniam twoją odpowiedź, To ma sens, ale jestem zaskoczony, że drukowanie nie działa, ponieważ lubię drukować na papierze ... :)
Mitch
Kluczowym problemem jest to, że LibreOffice nie jest nawet w stanie poprawnie otworzyć i wyświetlić dokumentu. W związku z tym dane wyjściowe również są niepoprawne. Czy to działało na twoim Linuksie?
Sceptyczny Jule
Dobrze wiedzieć. Używam pakietu Office tylko do podstawowych dokumentów, nie pojawiło się zapotrzebowanie na nic bardziej złożonego, ale kiedy to zrobię, upewnię się i odniosę się do tego. Dzięki za świetne pytanie i na pewno dodam je do ulubionych na przyszłość. Zachowam tę odpowiedź i komentarze jako odniesienie dla innych użytkowników.
Mitch
2

Oto gorzka prawda: rozwiązania pakietu Office dla Linuksa to totalna awaria! Od wielu lat jestem pełnoetatowym użytkownikiem GNU / Linuksa i ciągle szukałem i wypróbowywałem różne rozwiązania biurowe, od starego Open-Office, do późniejszego Libre-Office, Abi-Word itp. wszyscy nie pomogli mi w pracy biurowej. Nawet gorzej, jeśli chodzi o języki inne niż łacińskie (języki od prawej do lewej, takie jak perski, arabski itp.). Użytkownik musi walczyć z tym oprogramowaniem, aby wykonać swoją pracę! Kompatybilności z Microsoft Office po prostu nie ma. Mogę mówić godzinami o tym, ile próbowałem i wszystkie one mnie zawiodły, ale nie o to chodzi w tym pytaniu.

Próbowałem również zainstalować i uruchomić pakiet Microsoft Office przy użyciu WINE, i to jakoś się udało, ale nie wyszło mi to dobrze i przede wszystkim zawiesiło się, gdy próbowałem otworzyć moje pliki biurowe.

LaTeX jest w porządku, ale nie jest to rozwiązanie biurowe. LaTeX służy do ustawiania typu i bardziej przypomina narzędzie profesjonalisty, nie ma też arkuszy kalkulacyjnych ani prezentacji.

Więc jakie jest rozwiązanie?

To nie jest rozwiązanie wiersza polecenia. Jedynym rozwiązaniem, które wymyśliłem przez te wszystkie lata, aby utrzymać mnie w systemie operacyjnym GNU / Linux i wykonywać prace biurowe, jest użycie minimalnej instalacji systemu Microsoft Windows na maszynie wirtualnej (takiej jak VirtualBox) i instalacja garnitur Microsoft Office.

wprowadź opis zdjęcia tutaj

Może nie brzmi to ładnie, ale jest to jedyne rozwiązanie, które działa bezbłędnie i oszczędza mi walki z rozwiązaniami biurowymi w moim cennym czasie. Na początku sam myślałem, że to nie jest dobre rozwiązanie, ale po tym, jak zawiodłem ze wszystkimi innymi i robiłem te rzeczy VM przez ponad 2 lata, jestem z tego bardzo zadowolony :)

================================================== ==============================

UWAGA-1: Nie reklamuję produktów Microsoft! Po prostu próbuję pomóc rozwiązać problem i przejść do życia.

UWAGA-2: Jak podkreślono powyżej, NIE jest to rozwiązanie wiersza polecenia. Po co więc zamieszczać odpowiedź? Ponieważ jest to TESTOWANA i DOBRA PRACA! Jeśli nie jest dostępne żadne rozwiązanie wiersza polecenia WORKING (co wydaje mi się wysoce prawdopodobne), to posiadanie opcji ALTERNATYWNEJ jest lepsze niż BRAK opcji.

Seyed Mohammad
źródło
1
Dlaczego po prostu używać MS Word winezamiast maszyny wirtualnej?
totti
1
Jak wspomniałem, moje doświadczenie z instalowaniem i używaniem MS-Office WINEnie poszło dobrze. Program nie działał tak jak w systemie Windows (wykazywał nieprawidłowe zachowanie), a także bardzo się zawieszał!
Seyed Mohammad
3
Nie ma jeszcze oceny , ale pytanie wyraźnie wymaga rozwiązania z linii poleceń . To nie jest bezużyteczne z powodu stwardnienia rozsianego, jest bezużyteczne, ponieważ całkowicie ignoruje pytanie.
djeikyb
3
Seyed, proszę zauważyć, że OP wyraźnie prosi o rozwiązanie wiersza polecenia, które będzie działać na jego serwerze Ubuntu (który prawdopodobnie nie ma nawet GUI!). Twoja odpowiedź nie jest zła, ale nie ma znaczenia w tym przypadku.
Glutanimate
2
@ScepticalJule Ridiculous. Wyraźnie stawiasz nagrodę za rozwiązanie wiersza poleceń. Następnie wybierasz odpowiedź, która nie jest nawet odpowiedzią na pytanie. Czy studiowałeś już inne odpowiedzi? W tym ten i mój?
don.joey
1

Oto kilka aplikacji, które możesz wypróbować i sprawdzić, czy działają FF Multi Converter lub możesz wypróbować Kingsoft Office .

rstreeter78
źródło
Zainstalowałem FF Multi Converter, wykonałem polecenie ... nic się nie stało. Kingsoft ma ładny interfejs graficzny, ale nie mógł poprawnie otworzyć / wyświetlić pliku (brakowało formuł nawet po zainstalowaniu wymaganych czcionek. Brakowało także liter w okręgu).
Sceptyczny Jule
0

Zainstaluj Calibre z Software Center lub Synaptic i ustaw domyślną wartość wyjściową na PDF.

Z poziomu wiersza poleceń wykonaj

ebook-convert dummyfilename .docx .pdf -h

K7AAY
źródło
To jakoś wycina tekst.
don.joey
Crash z ValueError: No plugin to handle input format: docx. Google nie pomógł w tym, więc zgłoszę błąd.
Sceptyczny Jule