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 oowriter
i ebook-convert
), ale zdają mniej testów niż ta metoda. ebook-convert
Metoda 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).
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 print
rozwią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ć doc2pdf
i 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 pdf@zamzar.com, 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.