Apache POI Bild in Word ersetzen

I

imox

Aktives Mitglied
Hey Leute,

ich denke die Überschrift sagt alles ;) Kann mir jemand eine gute Lösung, zum ersetzen von Bilder in einem Word Dokument mit Apache POI, anbieten?

Ich habe schon ein wenig gegoogelt und auch einige Lösungen gefunden, allerdings funktionieren die nicht wirklich. Ich würde auch gerne, dass die Formatierung von dem Bild erhalten bleibt.

Gruß
Imox
 
mihe7

mihe7

Top Contributor
Der Vergleich hinkt, da Du nicht zeichnest (oder schreiben wir aneinander vorbei?). Wenn Du an einer Pinnwand ein Bild ersetzen willst, musst Du das bestehende von der Pinnwand entfernen und das neue anpinnen.
 
Flown

Flown

Administrator
Mitarbeiter
@imox
1. Mind your language
2. Was hast du bereits versucht? Was funktioniert nicht?
3. @mihe7 hat dir genau gesagt wie es funktioniert. Ersetzen ist im wahrsten Sinne des Wortes wegnehmen und neues hinhängen. Auch in Word.
 
I

imox

Aktives Mitglied
@imox
1. Mind your language
Ähm mache ich doch!
2. Was hast du bereits versucht? Was funktioniert nicht?
Ich habe das hier bei Stackoverflow gefunden:

Java:
    public static XWPFDocument replaceImage(XWPFDocument document, String imageOldName, String imagePathNew,
            int newImageWidth, int newImageHeight) throws Exception {
        try {
            int imageParagraphPos = -1;
            XWPFParagraph imageParagraph = null;

            List<IBodyElement> documentElements = document.getHeaderFooterPolicy().getDefaultFooter().getBodyElements();
            for (IBodyElement documentElement : documentElements) {
                imageParagraphPos++;

                if (documentElement instanceof XWPFParagraph) {
                    imageParagraph = (XWPFParagraph) documentElement;
                    if (imageParagraph != null && imageParagraph.getCTP() != null
                            && imageParagraph.getCTP().toString().trim().indexOf(imageOldName) != -1) {
                        System.out.println(imageParagraph.getText());
                        System.out.println("sdfsf");
                        break;
                    }
                }
            }

            if (imageParagraph == null) {
                throw new Exception("Unable to replace image data due to the exception:\n" + "'" + imageOldName
                        + "' not found in in document.");
            }
            ParagraphAlignment oldImageAlignment = imageParagraph.getAlignment();

            // remove old image
            document.removeBodyElement(imageParagraphPos);

            // now add new image

            // BELOW LINE WILL CREATE AN IMAGE
            // PARAGRAPH AT THE END OF THE DOCUMENT.
            // REMOVE THIS IMAGE PARAGRAPH AFTER
            // SETTING THE NEW IMAGE AT THE OLD IMAGE POSITION
            XWPFParagraph newImageParagraph = document.createParagraph();
            XWPFRun newImageRun = newImageParagraph.createRun();
            // newImageRun.setText(newImageText);
            newImageParagraph.setAlignment(oldImageAlignment);
            try (FileInputStream is = new FileInputStream(imagePathNew)) {
                newImageRun.addPicture(is, XWPFDocument.PICTURE_TYPE_PNG, imagePathNew, Units.toEMU(newImageWidth),
                        Units.toEMU(newImageHeight));
            }
//            imageParagraphPos;
            // set new image at the old image position
            document.setParagraph(newImageParagraph, imageParagraphPos);

            // NOW REMOVE REDUNDANT IMAGE FORM THE END OF DOCUMENT
            document.removeBodyElement(document.getBodyElements().size() - 1);

            return document;
        } catch (Exception e) {
            throw new Exception("Unable to replace image '" + imageOldName + "' due to the exception:\n" + e);
        } finally {
            // cleanup code
        }
    }

3. @mihe7 hat dir genau gesagt wie es funktioniert. Ersetzen ist im wahrsten Sinne des Wortes wegnehmen und neues hinhängen. Auch in Word.
Ähm ja dass ist aber schon klar. Ist irgendwie so als wenn ich dir sage: Um eine App zu schreiben musst du programmieren können. Ist schon irgendwie logisch oder? Anyway!!!



Also der code funktioniert soweit halbwegs. Aber irgendwie auch nicht richtig. Manchmal löscht es trotzdem andere Texte raus oder word files wo viel drin steht funktionieren nicht.

Es würd eigentlich vollkommen in Ordnung sein, wenn ich gar kein Bild ersetze, sondern einfach nur ein neues Bild an eine Bestimmte Position einsetze mit einer bestimmten Formatierung.

Hab hier eine Idee wie genau ich das machen kann?
 
Zuletzt bearbeitet von einem Moderator:
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Manchmal löscht es trotzdem andere Texte raus

Spontan würde ich denken, dass du mit document.removeBodyElement(imageParagraphPos); das Element an Position imageParagraphPos entfernst, alle nachfolgenden rutschen dann eins auf, und mit document.setParagraph(newImageParagraph, imageParagraphPos); überschreibst du dann das Element, welches jetzt an Position imageParagraphPos steht.


word files wo viel drin steht funktionieren nicht
Was bedeutet "funktionieren nicht"?
Dein Code stürzt ab? Word-File ist danach einfach kaputt? Es wird nichts geändert?
 
I

imox

Aktives Mitglied
Ja genau das Bild wird gesucht dann wird sich die Position gemerkt und ein neues hinzugefügt und das alte dann gelöscht. Wenn ich die Zeile auskommentiere, dann ist das bild doppelt drin also das remove brauchts schon.

Es verschwinden halt manchmal Texte. Und je nachdem wie viel man das Word file bearbeitet hat, funktionierts irgendwie nicht. Also dann wird diese Exception geschmissen:

throw new Exception("Unable to replace image '" + imageOldName + "' due to the exception:\n" + e);

Aber eigentlich brauche ich dass gar nicht. Es reicht auch wenn ich einfach ein neues Bild hinzufüge. Mein Problem ist nur, dass ich noch nicht herausgefunden habe, wie ich ein Bild formatieren kann. Ich will halt dass es hinter dem Text steht und nicht nur die Größe von dem Bild angegeben wird, sondern auch an welcher Position im Word file das angeordnet wird.

Kurz zu Erklärung: Wir haben sehr viele verschiedene Briefbögen. Und wir haben jeden Briefbogen als wmf file welches wir in den Header setzen. Das funktioniert auch wunderbar. Und ich würde halt gerne mit Java das richtige Bild für den jeweiligen Briefbogen setzen.
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Ja genau das Bild wird gesucht dann wird sich die Position gemerkt und ein neues hinzugefügt und das alte dann gelöscht. Wenn ich die Zeile auskommentiere, dann ist das bild doppelt drin also das remove brauchts schon.
Ich meine *nicht* das letzte remove, sondern das erste.

Und je nachdem wie viel man das Word file bearbeitet hat, funktionierts irgendwie nicht. Also dann wird diese Exception geschmissen:

throw new Exception("Unable to replace image '" + imageOldName + "' due to the exception:\n" + e);
Da steht doch dann sicher ein Grund bei.
 
I

imox

Aktives Mitglied
ja index out of range. Also irgendwas haut dann da nicht mehr genau hin. Aber wie gesagt dass ist jetzt eigentlich auch völlig egal. Weil das eigentliche worum es mir ja geht ist die Formatierung. Und das geht hier auch nicht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Schnittstelle zwischen MySQL und Apache Allgemeine Java-Themen 8
O Wie kann ich in Apache POI (Excel Dateien schreiben) Datumszellen in Excel erzeugen Allgemeine Java-Themen 6
F Fehlermeldung: java.lang.NoClassDefFoundError: org/apache/commons/net/ntp/NTPUDPClient Allgemeine Java-Themen 6
N Apache POI/ neue Reihe in Excel mit einem Button Allgemeine Java-Themen 2
O xlsx Datei auslesen mit POI Apache liest keine LEERZELLEN Allgemeine Java-Themen 6
O xlsx Datei auslesen mit POI von Apache wirft seltsamen Fehler. Allgemeine Java-Themen 11
L APACHE POI PIVOT TABELLEN Allgemeine Java-Themen 4
L Apache POI Datenquelle Allgemeine Java-Themen 1
S Apache POI Filtern nach bestimmten Kriterium Allgemeine Java-Themen 1
L JavaFX JavaFX Chart in Apache Poi Excel Datei Allgemeine Java-Themen 2
F Operationen/Methoden einen WebService im Browser mit Apache Axis aufrufen Allgemeine Java-Themen 4
F Input/Output NullPointerException, aber wieso? [Apache POI] Allgemeine Java-Themen 11
F Input/Output NullPointerException with Apache POI Allgemeine Java-Themen 7
E HILFE !! Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils Allgemeine Java-Themen 4
J Apache POI - No external workbook with name Allgemeine Java-Themen 5
M Suche aktuelle Apache Poi Bibliothek zum Einbinden in mein Programm Allgemeine Java-Themen 2
M Apache Tika: Warnmeldungen und Beispielcode Allgemeine Java-Themen 12
X Performance für Tomcat / Apache optimieren Allgemeine Java-Themen 2
G Ant Probleme bei einer Installation die Apache ant+ivy verwendet Allgemeine Java-Themen 14
FrittenFritze Swing Apache Batik - Zoom an einer bestimmten Stelle Allgemeine Java-Themen 4
K Apache poi: Deprecated getCellType Allgemeine Java-Themen 3
J Apache POI Excel- Blattschutz aufheben Allgemeine Java-Themen 2
I Apache POI Word Text einfügen Allgemeine Java-Themen 26
T Geschlossen: Apache POI - Excel einlesen Allgemeine Java-Themen 0
K Apache POI Word Tabelle Zellen verbinden Allgemeine Java-Themen 4
K Apache POI Word Tabelle Spaltenbreite festlegen Allgemeine Java-Themen 7
K Apache POI Word bestimmte Textstellen bearbeiten Allgemeine Java-Themen 1
R Apache POI XSSF Allgemeine Java-Themen 2
E Apache POI Powerpoint Verlinkungen ändern Allgemeine Java-Themen 4
T xls-Datei per Apache Commons CsvParser einlesen UTF-8 Zeichen russische Zeichen Allgemeine Java-Themen 2
zer0zer0 Best Practice apache common cli - optionen für hilfe ausblenden Allgemeine Java-Themen 5
S Eclipse Apache Camel FTP: Fehlerbehandlung, wie? Allgemeine Java-Themen 2
H Excel Datei einlesen mit Apache POI Allgemeine Java-Themen 1
GianaSisters Apache POI - Hyperlink erstellen Allgemeine Java-Themen 0
reibi Apache PDFBox Allgemeine Java-Themen 0
T Mit Apache Poi Daten aus einer Excel Tabelle kopieren und in Word einfügen Allgemeine Java-Themen 1
C Was bekomme ich eine Nullpointerexception? (Apache POI) Allgemeine Java-Themen 3
S OOP Apache Commons Math - Verwendung von Genetics - Wie werden Daten in Chromosomen gespeichert? Allgemeine Java-Themen 4
H Apache POI HSSF - Farbe/Rahmen etc. ohne Style-Vorlage? Allgemeine Java-Themen 4
E Apache POI-Datei lesen und umschreiben Allgemeine Java-Themen 8
G Input/Output Apache POI Excel Allgemeine Java-Themen 5
L Apache CLI: Args[] übergeben Allgemeine Java-Themen 3
P docx mit Apache POI auslesen, verändern und zurückschreiben Allgemeine Java-Themen 2
N Applet Apache Poi Wert einer Formel ausgeben Allgemeine Java-Themen 5
L Apache Common CLI Allgemeine Java-Themen 4
J Webstart (auf Apache) jnlp wird nicht geladen Allgemeine Java-Themen 2
S HTTP Apache HTTPClient Problem Allgemeine Java-Themen 4
R org.apache.http kompletter Internetausfall Allgemeine Java-Themen 7
J xlsx Dateien lesen OHNE apache POI Allgemeine Java-Themen 6
V Für was benötigt man Apache Common Allgemeine Java-Themen 3
V Apache POI Excel Datum auslesen Allgemeine Java-Themen 6
V Apache POI Excel Sheet auslesen Allgemeine Java-Themen 5
B Problem mit RegEs und org.apache.regexp.RE Allgemeine Java-Themen 5
T Apache POI Export EXCEL - [Zahlen-Werte] Allgemeine Java-Themen 1
Landei Erfahrungen mit JavaConfig oder Apache Commons Config? Allgemeine Java-Themen 3
J Apache FTPClient upload Allgemeine Java-Themen 3
A Apache License, Version 2.0 Allgemeine Java-Themen 7
S Bzip2 apache commons-compress Allgemeine Java-Themen 3
Chris81T Apache FOP 0.20-5 mit JNI von C++ Code aufrufen Allgemeine Java-Themen 8
C Apache POI(HSSF) Conditional Formatting Allgemeine Java-Themen 3
G Apache soll mit SVN zusammenarbeiten Allgemeine Java-Themen 3
E Apache Commons - PropertyConfiguration - Autosave Allgemeine Java-Themen 2
G Servlet über apache Tomcat ansprechen Allgemeine Java-Themen 6
alexpetri DirectoryWalker apache.commons Allgemeine Java-Themen 3
S Apache Commons Net geht nicht Allgemeine Java-Themen 5
G mit Apache-Jakarta-POI auch Graphiken aus Excel einlesen? Allgemeine Java-Themen 3
T Apache Lucene Allgemeine Java-Themen 2
Q Ant und org.apache.log4j.xml.DOMConfigurator Problem Allgemeine Java-Themen 2
M Java Webserver - Tomcat alleine oder zusammen mit Apache? Allgemeine Java-Themen 3
Y Bild in JPanel setzen Allgemeine Java-Themen 2
Kirby.exe Bild im Zentrum spiegeln Allgemeine Java-Themen 14
NicoDeluxe Bild prüfen ob defekt Allgemeine Java-Themen 3
L Input/Output Kassenzettel lesen aus einem Bild Allgemeine Java-Themen 2
K Bild in einem anderen Bild suchen Allgemeine Java-Themen 12
R Compiler-Fehler Bild per E-Mail versenden Allgemeine Java-Themen 3
M Java- Bild gewissen Anzahl von Sekunden anzeigen?! Allgemeine Java-Themen 4
RalleYTN 2D-Grafik Bild mit bilinearer Interpolation skalieren Allgemeine Java-Themen 31
RalleYTN 2D-Grafik Bild ohne AWT, Swing und JavaFX rotieren Allgemeine Java-Themen 12
S Telefonbuch mit Bild Allgemeine Java-Themen 4
A 2D-Grafik Text in ein Bild schreiben Allgemeine Java-Themen 11
Tacofan GIF-Bild wird "zerstört" Allgemeine Java-Themen 3
B Bild aus Jar kann nach Export nicht mehr gefunden werden Allgemeine Java-Themen 13
T Neuen Kanal in Bild (TIFF) einfügen à la Photoshop Allgemeine Java-Themen 2
Z Zahlen aus Bild auslesen Allgemeine Java-Themen 1
X Bild -> lokale Variable -> DB -> lokale Variable Allgemeine Java-Themen 3
E 3D Objekte in 2D Bild finden Allgemeine Java-Themen 5
R HtmlUnit: Canvas als Bild speichern Allgemeine Java-Themen 0
E am häufigsten vorkommenden Farben aus einem Bild Allgemeine Java-Themen 5
S Bild in Raster Allgemeine Java-Themen 1
S Bild in Frame Allgemeine Java-Themen 0
F Punkte in einem Bild finden Allgemeine Java-Themen 10
A Bild aufteilen für getData Allgemeine Java-Themen 3
P Wie füge ich ein Bild in die GUI ein? Allgemeine Java-Themen 7
F ImageJ: Linien und Schnittpunkte in Bild Allgemeine Java-Themen 1
A mit getClassLoader Bild laden Allgemeine Java-Themen 8
E Bild abspeichern Allgemeine Java-Themen 5
D Face.com - Gesicht im Bild finden Allgemeine Java-Themen 3
N Input/Output Bild von WebSite laden? Allgemeine Java-Themen 3
A Input/Output Bild in Java einlesen und analysieren! Allgemeine Java-Themen 8
S programm um bild auszulesen Allgemeine Java-Themen 2

Ähnliche Java Themen


Oben