*.doc Seitenränder per Java setzen...

izoards

Bekanntes Mitglied
Ich bin wiedermal kurz vor dem verzweifeln. Und zwar muss ich in einem *.doc File (nicht docx) die Seitenränder anpassen.
Im Netz habe ich einige Ideen gefunden:

-> Die Freie Version würde sogar zu meinen Ansprüchen passen, denn es geht jeweils nur um eine Seite.
-> Leider funktioniert die freie Version nur mit *.docx oder *.rtf, ausgerechnet mit *.doc funktioniert die Version nicht. (Wurde von e-iceblue so bestätigt)
Die Vollversion übersteigt leider z.Z. mein Budget.

Mit der Apache POI XWPFDocument Klasse kann gemäss meinen Versuchen auch kein bestehendes *.doc File angepasst werden. Die Klasse ist meines Wissens für die Erstellung von MS Word Dokumenten, denn wenn ich es damit versuche kommt die Fehlermeldung "this is not a valid OOXML (Office Open XML) file"

Nun meine Frage an euch, gibt es irgendeine Möglichkeit, die Seitenränder einer *.doc Datei neu zu setzen, ohne gleich viel Geld in die Hand zu nehmen?
Oder die andere Variante wäre, die *.doc Datei in eine *.rtf Datei zu konvertieren und dann mit e-iceblue die Ränder zu setzen.

Jedoch hatte ich auch bei diesem Ansatz keinen Erfolg :-(

Ich hoffe es kann mir jemand helfen 🙂
Vielen Dank bereits im Voraus...
 
Wie finde ich eigentlich raus, was mein File wirklich für ein Format hat? Also es ist als .doc gespeichert, aber komischerweise kriege ich bei meinen versuchen die Meldung "Exception in thread "main" java.lang.IllegalArgumentException: The document is really a RTF file"
Ich bin verwirrt, gibt es eine Möglichkeit um herauszufinden, in welchem Format eine Datei vorliegt?
 
Die *.doc Dateien entstehen nicht aus einem MS Produkt..
Den Versuch über die normal.dot hat leider nicht funktioniert…
 
docx sind zip-Dateien. Darin enthalten ist eine normale .doc Datei und noch etwas Zusatzzeugs, das Microsoft ganz toll findet.

Vielleicht hilft dir ja diese API weiter
 
Die *.doc Dateien entstehen nicht aus einem MS Produkt..
Den Versuch über die normal.dot hat leider nicht funktioniert…
Eventuell kann man OpenOffice verwenden, ich habe mal gelesen, die haben ein Java-API.

Ansonsten über Windows-Scripting (früher gab es mal Autohotkey, heute sicher besseres) die doc-Dateien in MS-Word öffnen und dann als docx speichern.

Nach dem Setzen der Seitenränder wieder zurück.

Ich habe viel mit java.awt.Robot gearbeitet, aber noch nicht in MS-Word.
Ausserdem müsste man dafür einen Rechner reservieren, klappt sicher nicht headless.
 
Du kannst ja mal in einer Datei die Seitenränder manuell setzen, abspeichern (auf andere Datei oder Backup vom Original machen) und den Unterschied auf Binär(Hex)-Ebene anzeigen lassen.

Eventuell ist es nur ein kleiner Patch, den Du dann in Java machen kannst.
 
RTF? Sieht das Ding im Texteditor so aus, wie unter https://de.wikipedia.org/wiki/Rich_Text_Format beschrieben?
Ja, das Ding sieht im Editor so aus (1. Zeile)

Java:
{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fprq2 Arial;}{\f1\fswiss\fprq2\fcharset0 Arial;}{\f2\fswiss\fprq2\fcharset0 System;}{\f3\fmodern\fprq1\fcharset238{\*\fname Courier New;}Courier New CE;}{\f4\fswiss\fprq2 Courier New;}{\f5\fswiss\fprq2 System;}}

Du kannst ja mal in einer Datei die Seitenränder manuell setzen, abspeichern (auf andere Datei oder Backup vom Original machen) und den Unterschied auf Binär(Hex)-Ebene anzeigen lassen.

Gute Idee, habe ich gemacht, das Dokument sieht jedoch nach der Anpassung der Seitenränder auf Hex Ebene total anderst aus.


Irgendwie muss ich das File in Word öffnen und als RTF File abspeichern, dann würde es klappen.
Weiss jedoch nicht, wie ich das hinkriege....
 
Ich krieg es nicht hin, ich möchte jetzt das ganze per VBA Script lösen.
Also das VBA Script von Java aus starten.
Und habe mir folgdendes gebastelt:

Java:
public class TestClass {
    public static void main(String[] args) {
        try {
            String[] parms = {"wscript", "C:\\DocToPDF\\script.vbs", "C:\\Users\\zusel\\Desktop\\sample2.doc"};
            Runtime.getRuntime().exec(parms);
        } catch (IOException e) {
            System.out.println(e);
            System.exit(0);
        }
    }

Und hier das Script:

Java:
Set path =  Wscript.Arguments.Item(0)

Set oWord = CreateObject("Word.Application")
oWord.Visible = false
oWord.Documents.Open path
With oWord.ActiveDocument.PageSetup
.LeftMargin = oWord.InchesToPoints(0.75)
.RightMargin = oWord.InchesToPoints(0.75)
.TopMargin = oWord.InchesToPoints(1.5)
.BottomMargin = oWord.InchesToPoints(1)
End With
oWord.ActiveDocument.SaveAs("C:\Users\zusel\Desktop\sampleMod")
oWord.Quit


Leider kriege ich die Parameterübergabe nicht hin.
Ich kriege vom Script die Fehlermeldung:
"Objekt erforderlich"
Wie funktioniert die Parameterübergabe von Java in ein VBA Script?

Kann ich hier vom VBA Script auch ein return machen? So dass mein Java Programm weiss, wann das script fertig ist?

Danke für die HIlfe...
 
Ich habe 2005 zum letzten mal mit Runtime#exec gearbeitet.

Damals konnte man sich console out und console err vom ausgeführten Kdo geben lassen und die Ausgaben als String auswerten.
 
Danke @mihe7 , so funktioniert's tiptop 🙂
Hier wie ich es umgesetzt habe:

Java:
Process p = null;
                    try {
                        String[] parms = {"wscript", pathToJAR + "\\PageMargins.vbs", pathToJAR + "\\" + "temp.doc"};
                        System.out.println("pathToFileInside JAR " + pathToJAR + "\\" +fileNameWord);
                        setStatus("Set page margins...", controller);
                        p = Runtime.getRuntime().exec(parms);
                    } catch (IOException e) {
                        System.out.println(e);
                    }
                    p.waitFor();
 

Zurück
Oben