J'ai un code pour ajouter un filigrane au fichier .doc existant.
Ce qui suit est le code que j'ai essayé jusqu'à présent
public static void main(String[] args)
{
try
{
XWPFDocument xDoc = new XWPFDocument(new FileInputStream("test.doc"));
XWPFHeaderFooterPolicy xFooter = new XWPFHeaderFooterPolicy(xDoc);
xFooter.createWatermark("My Watermark");
}
catch(Exception e) {
e.printStackTrace();
}
}
Ce qui suit est ce que j'ai
Exception in thread "main" Java.lang.NoSuchMethodError: org.Apache.poi.util.IOUtils.copy(Ljava/io/InputStream;Ljava/io/OutputStream;)V
at org.Apache.poi.util.PackageHelper.open(PackageHelper.Java:50)
at org.Apache.poi.xwpf.usermodel.XWPFDocument.<init>(XWPFDocument.Java:71)
at com.avi.Test.ReadDoc.main(Watermark.Java:38)
J'ai eu cette erreur aujourd'hui:
Cela semble différent de votre erreur, mais assez similaire. Pour votre information, j'utilise maven pour gérer les bocaux. Après quelques expériences, j'ai découvert que le cas racine est le poi.jar et que la version de poi-ooxml.jar n'est pas cohérente.
Cette configuration recevra une erreur:
<dependency>
<groupId>org.Apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.12</version>
</dependency>
<dependency>
<groupId>org.Apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.13</version>
</dependency>
J'ai changé la version de poi.jar de 3.12 à 3.13
<dependency>
<groupId>org.Apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.13</version>
</dependency>
<dependency>
<groupId>org.Apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.13</version>
</dependency>
bingo, problème résolu. J'espère que cela aidera quelqu'un qui a rencontré ce type d'exception.
Voir l'entrée Apache POI FAQ sur ce sujet même . Ce qui est presque certainement arrivé, c’est que vous ayez ajouté une nouvelle copie de POI à votre chemin de classe, mais une version plus ancienne existait déjà (d’un besoin antérieur, de votre framework, etc.), et Java ne sait plus trop lequel utiliser.
Tout d'abord, vous souhaiterez utiliser un extrait de code comme celui-ci pour déterminer l'origine des POI:
ClassLoader classloader =
org.Apache.poi.poifs.filesystem.POIFSFileSystem.class.getClassLoader();
URL res = classloader.getResource(
"org/Apache/poi/poifs/filesystem/POIFSFileSystem.class");
String path = res.getPath();
System.out.println("Core POI came from " + path);
Utilisez-le pour identifier le ou les anciens pots et les retirer.
Ensuite, utilisez la page Composants POI pour déterminer les fichiers JAR que vous devez utiliser et leurs dépendances. Enfin, ajoutez les derniers bocaux à votre parcours, et vous serez prêt à partir!
Vous avez presque certainement une ancienne version de POI sur votre chemin de classe.
Voir Le POI Apache FAQ
Allez ici: http://poi.Apache.org/download.html
téléchargez le fichier tar.gz -> extrayez-le et ajoutez-y tous les fichiers jar à la compilation.
Dès le début, poi-ooxml et version poi doivent être identiques.
<dependency>
<groupId>org.Apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version> <---------------this.
</dependency>
<dependency>
<groupId>org.Apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.16</version> <---------------this.
</dependency>
J'ai eu les mêmes problèmes que vous, la solution est que vous devez importer tous les fichiers jar pour exécuter votre programme. Ceux-ci sont obligatoires pour l'exécution de votre projet.
aligner les versions de pom de 'poi' et 'poi-ooxml' .__
<dependencies>
<dependency>
<groupId>org.Apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.Apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
</dependencies>