web-dev-qa-db-fra.com

Comment puis-je convertir un document Word en PDF?

Comment puis-je convertir un document Word en PDF où le document contient diverses choses, telles que des tableaux. Lorsque vous essayez d'utiliser iText, le document d'origine est différent du PDF converti. Existe-t-il une source ouverte API/bibliothèque, plutôt que d'appeler un exécutable, que je peux utiliser?

44
magh

C'est une tâche assez difficile, de plus en plus difficile si vous voulez des résultats parfaits (impossible sans utiliser Word) comme le nombre d'API qui font tout pour vous en pur Java et sont open source est zéro je crois ( Mise à jour: je me trompe, voir ci-dessous).

Vos options de base sont les suivantes:

  1. Utiliser JNI/un script de service Web/etc C # MS Office (seule option pour des résultats parfaits à 100%)
  2. Utilisation du script API disponible Open Office (90 +% parfait)
  3. Utilisez Apache POI & iText (très gros travail, ne sera jamais parfait).

Mise à jour - 11/02/2016 Voici une copie réduite de mon article de blog sur ce sujet qui décrit les produits existants qui prennent en charge Word-to-PDF dans Java.

Conversion de documents Microsoft Office (Word, Excel) en PDF en Java

Trois produits que je connais peuvent rendre des documents Office:

yeokm1/docs-to-pdf-converter Irrégulièrement maintenu, Pure Java, Open Source Rassemble un certain nombre de bibliothèques pour effectuer la conversion.

xdocreport Développé activement, Pure Java, Open Source C'est Java API pour fusionner un document XML créé avec MS Office (docx) ou OpenOffice (odt), LibreOffice (odt) avec un Java pour générer un rapport et le convertir si vous en avez besoin dans un autre format (PDF, XHTML ...).

Snowbound Imaging SDK Source fermée, Java pur Snowbound semble être une solution à 100% Java et coûte plus de 2 500 $. Il contient des exemples décrivant comment convertir des documents dans le téléchargement de l'évaluation.

OpenOffice API Open Source, Not Pure Java - Nécessite Open Office installé OpenOffice est une suite Office native qui prend en charge un Java. Cela prend en charge la lecture de documents Office et l'écriture PDF. Le SDK contient un exemple de conversion de document (exemples/Java/DocumentHandling/DocumentConverter.Java). Pour écrire Les fichiers PDF dont vous avez besoin pour passer le rédacteur "writer_pdf_Export" plutôt que celui "MS Word 97". Ou vous pouvez utiliser l'API wrapper JODConverter .

JDocToPdf - Décédé le 11/02/2016 Utilise Apache POI pour lire le document Word et iText pour écrire le PDF. Entièrement gratuit, 100% Java mais a quelques limitations .

46

Vous pouvez utiliser JODConverter à cet effet. Il peut être utilisé pour convertir des documents entre différents formats de bureau. tel que:

  1. Microsoft Office à OpenDocument, et vice versa
  2. Tout format au format PDF
  3. Et prend également en charge de nombreuses autres conversions
  4. Il peut également convertir des documents MS Office 2007 en PDF ainsi qu'avec presque tous les formats

Plus de détails à ce sujet peuvent être trouvés ici: http://www.artofsolving.com/opensource/jodconverter

8
Nodexpert

Découvrez docs-to-pdf-converter sur github . C'est une solution légère conçue spécifiquement pour convertir des documents en pdf.

Pourquoi?

Je voulais un programme simple qui puisse convertir des documents Microsoft Office en PDF mais sans dépendances comme LibreOffice ou des solutions propriétaires coûteuses. Voyant comment le code et les bibliothèques pour convertir chaque format individuel sont dispersés sur le Web, je J'ai décidé de combiner toutes ces solutions en un seul programme. En cours de route, j'ai décidé d'ajouter le support ODT car j'ai également rencontré le code.

5
Sudarshan_SMD

Vous pouvez utiliser Cloudmersive native Java. Elle est gratuite jusqu'à 50 000 conversions/mois et est beaucoup plus fidèle à mon expérience que d'autres choses comme iText ou les méthodes basées sur Apache POI. Les documents en fait se ressemblent comme ils le font dans Microsoft Word qui est pour moi la clé. Incidemment, il peut également faire XLSX, PPTX et l'héritage DOC, XLS et PPT conversion en PDF.

Voici à quoi ressemble le code, ajoutez d'abord vos importations:

import com.cloudmersive.client.invoker.ApiClient;
import com.cloudmersive.client.invoker.ApiException;
import com.cloudmersive.client.invoker.Configuration;
import com.cloudmersive.client.invoker.auth.*;
import com.cloudmersive.client.ConvertDocumentApi;

Convertissez ensuite un fichier:

ApiClient defaultClient = Configuration.getDefaultApiClient();

// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");

ConvertDocumentApi apiInstance = new ConvertDocumentApi();
File inputFile = new File("/path/to/input.docx"); // File to perform the operation on.
try {
  byte[] result = apiInstance.convertDocumentDocxToPdf(inputFile);
  System.out.println(result);
} catch (ApiException e) {
  System.err.println("Exception when calling ConvertDocumentApi#convertDocumentDocxToPdf");
e.printStackTrace();
}

Vous pouvez obtenir gratuitement une clé d'API de conversion de document sur le portail.

2
Johnny

Je suis d'accord avec les affiches répertoriant OpenOffice comme une installation d'importation/exportation haute fidélité de documents Word/pdf avec une API Java et cela fonctionne également sur toutes les plateformes. Les filtres d'importation/exportation d'OpenOffice sont assez puissants et préservent la plupart des mises en forme lors de la conversion vers divers formats, y compris PDF. Docmosis et JODReports valeur ajoutée pour vous faciliter la vie que d'apprendre directement l'API OpenOffice, ce qui peut être difficile en raison du style de la API UNO et les bugs liés aux plantages.

1
Paul Jowett

Utiliser [~ # ~] jacob [~ # ~] call Office Word is une solution 100% parfaite. Mais il ne prend en charge que la plate-forme Windows car il faut Office Word installé.

  1. Téléchargez l'archive JACOB (la dernière version est la 1.19);
  2. Ajoutez jacob.jar à votre chemin de classe de projet;
  3. Ajoutez jacob-1.19-x32.dll ou jacob-1.19-x64.dll (selon votre version jdk) à ...\Java\jdk1.x.x_xxx\jre\bin
  4. À l'aide de l'API JACOB, appelez Office Word pour convertir doc/docx en pdf.

    public void convertDocx2pdf(String docxFilePath) {
    File docxFile = new File(docxFilePath);
    String pdfFile = docxFilePath.substring(0, docxFilePath.lastIndexOf(".docx")) + ".pdf";
    
    if (docxFile.exists()) {
        if (!docxFile.isDirectory()) { 
            ActiveXComponent app = null;
    
            long start = System.currentTimeMillis();
            try {
                ComThread.InitMTA(true); 
                app = new ActiveXComponent("Word.Application");
                Dispatch documents = app.getProperty("Documents").toDispatch();
                Dispatch document = Dispatch.call(documents, "Open", docxFilePath, false, true).toDispatch();
                File target = new File(pdfFile);
                if (target.exists()) {
                    target.delete();
                }
                Dispatch.call(document, "SaveAs", pdfFile, 17);
                Dispatch.call(document, "Close", false);
                long end = System.currentTimeMillis();
                logger.info("============Convert Finished:" + (end - start) + "ms");
            } catch (Exception e) {
                logger.error(e.getLocalizedMessage(), e);
                throw new RuntimeException("pdf convert failed.");
            } finally {
                if (app != null) {
                    app.invoke("Quit", new Variant[] {});
                }
                ComThread.Release();
            }
        }
    }
    

    }

1
Charles Wang

Je pense que JOD Converter est le moyen le plus simple à mettre en œuvre, veuillez vous référer au lien ci-dessous pour plus d'informations.

http://mytechbites.blogspot.in/2014/10/convert-documents-to-pdf-in-Java.html

Regardez dans les scripts OpenOffice.org pour faire le travail pour vous.

Je n'ai pas essayé de l'utiliser pour MS Word, mais j'ai réussi à lire des documents MS Excel avec Apache POI - http://poi.Apache.org/

0
Curtis

noconv , c'est un outil python fonctionnant sous UNIX. Bien que j'utilise Java pour invoquer le shell sous UNIX, il fonctionne parfaitement pour Mon code source: noconvTool.Java . On dit que JODConverter et unoconv utilisent Open Office/libre office.

docx4j/docxreport, POI, PDFBox sont bons mais il leur manque certains formats de conversion.

0
leef

Nous sommes déjà en 2019, je ne peux pas croire qu'il n'y ait toujours pas de moyen le plus simple et le plus pratique pour convertir le document Word Micro $ oft Word le plus populaire en Adobe PDF en Java .

J'ai presque essayé toutes les méthodes mentionnées ci-dessus, et j'ai trouvé la meilleure et la seule façon de répondre à mes besoins est d'utiliser OpenOffice ou LibreOffice. En fait, je ne connais pas exactement la différence entre eux, il semble que les deux fournissent la ligne de commande soffice.

Mon exigence est:

  1. Il doit fonctionner sous Linux, plus spécifiquement CentOS, pas sous Windows, donc nous ne pouvons pas installer Microsoft Office sur celui-ci;
  2. Il doit prendre en charge le caractère chinois, donc le codage de caractères ISO-8859-1 n'est pas un choix, il doit prendre en charge Unicode.

La première chose qui m'est venue à l’esprit est doc-to-pdf-converter, mais il manque de maintenance, la dernière mise à jour a eu lieu il y a 4 ans, je n'utiliserai pas de solution de maintien de personne. Xdocreport semble un choix prometteur, mais il ne peut convertir que docx, mais pas doc fichier binaire qui est obligatoire pour moi. L'utilisation de Java pour appeler l'API OpenOffice semble bonne, mais trop compliquée pour une exigence aussi simple.

Enfin, j'ai trouvé la meilleure solution: utilisez la ligne de commande OpenOffice pour terminer le travail:

Runtime.getRuntime().exec("soffice --convert-to pdf -outdir . /path/some.doc");

Je crois toujours que le code le plus court est le meilleur code (bien sûr, il devrait être compréhensible), c'est tout.

0
Zhang Buzz