Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
[C++/Java] .doc zu .pdf umwandeln
- Ersteller Tron36
- Erstellt am
distrophik
Lieutenant
- Registriert
- Nov. 2006
- Beiträge
- 765
Natürlich. Du musst es nur implementiere ;-)
Ansonsten schau dich mal um ob es Libraries gibt, die du da nutzen kannst.
Ich würde mal in den Code von Libreoffice schauen. Da gibt es die funktion per Kommandozeile. Zweite befehl von unten:
--convert-to output_file_extension[
utput_filter_name] [--outdir output_dir] files
Ansonsten schau dich mal um ob es Libraries gibt, die du da nutzen kannst.
Ich würde mal in den Code von Libreoffice schauen. Da gibt es die funktion per Kommandozeile. Zweite befehl von unten:
--convert-to output_file_extension[
Rossie
Rear Admiral
- Registriert
- Dez. 2010
- Beiträge
- 5.315
Falls man es mit älteren .doc Formaten zu tun hat, kann Apache POI hilfreich sein.
distrophik
Lieutenant
- Registriert
- Nov. 2006
- Beiträge
- 765
Wenn du nicht mal Libraries nutzen willst, dann setzt dich mit den doc und pdf Formaten auseinander. Die doc liest du dann ein, parst diese und baust deine pdf selber zusammen. Bei Microsoft Zeug, wirst du aber schwierigkeiten haben, da was vernünftiges zu finden.
palace4d
Lt. Commander
- Registriert
- Okt. 2007
- Beiträge
- 1.179
Das ganze geht mit XML/XSLT/XSL-FO. Leider ist die Einarbeitung in das Containerformat von MS umfangreich. Als erstes würde ich das XML Normalisieren und dann mit XSL-FO die PDF erstellen. Als XSL Prozessor empfehle ich Saxon HE(in Java geschrieben).
Zuletzt bearbeitet:
Da muss ich meinen Vorpostern zustimmen. Für solche Projekte haben schon ganze Entwicklungsteams Monate oder gar Jahre gebraucht. Das .doc Format ist nicht offen, d.h. es gibt von MS keine vollständige Spezifikation dafür. Wenn es dir also einfach nur darum geht die Umwandlung zu machen sind Bibliotheken oder der Aufruf externer Programme deutlich sinnvoller. Wenn du hingegen so etwas einfach mal selbst machen willst, würde ich zumindest ein Format wählen, von dem du die Spezifikationen bekommen kannst. Da kämen z.B. die Open/Libre Office Formate in Frage. Die sind offen und sehr (!!!) viel kürzer und übersichtlicher.
Falls du dich trotz allem enschließt einen Konverter komplett selbst zu basteln, kannst du ihn ja mal den Open/Libre Office Leuten zur Verfügung stellen, die arbeiten schon seit Jahren daran und obwohl er mittlerweile ganz gut funktioniert, gibt es immer noch Sachen die nicht richtig übertragen werden.
Falls du dich trotz allem enschließt einen Konverter komplett selbst zu basteln, kannst du ihn ja mal den Open/Libre Office Leuten zur Verfügung stellen, die arbeiten schon seit Jahren daran und obwohl er mittlerweile ganz gut funktioniert, gibt es immer noch Sachen die nicht richtig übertragen werden.
Bezüglich der Sache, dass .doc nicht dokumentiert ist, dass stimmt nicht ganz:
http://msdn.microsoft.com/en-us/library/cc313153(v=office.12).aspx
Dort gibt es ein 622 (!!) Seiten Dokument, was den Aufbau und Inhalt erklärt. Innerhalb von diesem Dokument wird auch noch auf andere verwiesen. Bis auf ein paar Sachen steht dort eigentlich alles drin. Ich würde also nicht sagen, dass es nicht dokumentiert ist. Aus eigener Erfahrung kann ich jedoch sagen, dass es schon sehr lange dauert, diese Dokumentation durchzuarbeiten.
Übrigens, auf der Open Specification Seite von Microsoft ist so ziemlich jedes Format und Protocol dokumentiert. Sicher, die Dokumentation ist keine leichte Lektüre, aber man kann sie auf jedenfall verwenden.
http://msdn.microsoft.com/en-us/library/cc313153(v=office.12).aspx
Dort gibt es ein 622 (!!) Seiten Dokument, was den Aufbau und Inhalt erklärt. Innerhalb von diesem Dokument wird auch noch auf andere verwiesen. Bis auf ein paar Sachen steht dort eigentlich alles drin. Ich würde also nicht sagen, dass es nicht dokumentiert ist. Aus eigener Erfahrung kann ich jedoch sagen, dass es schon sehr lange dauert, diese Dokumentation durchzuarbeiten.
Übrigens, auf der Open Specification Seite von Microsoft ist so ziemlich jedes Format und Protocol dokumentiert. Sicher, die Dokumentation ist keine leichte Lektüre, aber man kann sie auf jedenfall verwenden.
Keepers
Lt. Junior Grade
- Registriert
- Nov. 2007
- Beiträge
- 506
Limit schrieb:Da muss ich meinen Vorpostern zustimmen. Für solche Projekte haben schon ganze Entwicklungsteams Monate oder gar Jahre gebraucht. Das .doc Format ist nicht offen, d.h. es gibt von MS keine vollständige Spezifikation dafür.
Naja, das stimmt ja nicht. Aber dennoch hab ich es als höllisch empfunden und es hat eine Menge Arbeit gemacht. Vergessen gings dann sogar schnell ...
maxwell-cs
Lt. Junior Grade
- Registriert
- Juli 2007
- Beiträge
- 465
bist du dir da wirklich sicher?Tron36 schrieb:Hi,
ich glaube mit libaries würde es einfacher gehen.
grüße
Tron36
maxwell-cs
Lt. Junior Grade
- Registriert
- Juli 2007
- Beiträge
- 465
bist du dir da wirklich sicher?Tron36 schrieb:
B
blond
Gast
Sollte eigentlich stimmen. Kannst du auch selber mit dem Taschenrechner oder google testen.
BigNum
Lt. Junior Grade
- Registriert
- März 2012
- Beiträge
- 304
So geht's:Tron36 schrieb:gibt es eine möglichkeit in Java oder C/C++ ein .doc Dokument in ein .pdf Dokument um zu wandeln?
- OpenOffice oder LibreOffice installieren (falls noch nicht geschehen)
- Die Dateien "ridl.jar", "juh.jar" und "unoil.jar" (diese sollten sich im Verzeichnis "URE/java/" bzw. "Basis/program/classes/" unter dem Programminstallationspfad befinden) in den CLASSPATH mit aufnehmen
- Zusätzlich noch den Pfad "program" unter dem Programminstallationspfad mit in den CLASSPATH mit aufnehmen
Der CLASSPATH sollte in etwa so aussehen:
Code:
CLASSPATH="C:/Programme/OpenOffice.org 3/URE/java/ridl.jar;C:/Programme/OpenOffice.org 3/URE/java/juh.jar;C:/Programme/OpenOffice.org 3/Basis/program/classes/unoil.jar;C:/Programme/OpenOffice.org3/program"
Dann das folgende Java-Programm
Code:
import java.io.File;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.frame.XComponentLoader;
import com.sun.star.beans.PropertyValue;
import com.sun.star.frame.XStorable;
import com.sun.star.util.XCloseable;
public class Doc2Pdf
{
public static void main(String args[])
{
if ( args.length != 2 )
{
System.out.println("usage: java Doc2Pdf <doc-file> <pdf-file>");
System.exit(1);
}
com.sun.star.uno.XComponentContext xContext = null;
try
{
// get the remote office component context
xContext = com.sun.star.comp.helper.Bootstrap.bootstrap();
// get the remote office service manager
com.sun.star.lang.XMultiComponentFactory xMCF= xContext.getServiceManager();
Object oDesktop = xMCF.createInstanceWithContext("com.sun.star.frame.Desktop", xContext);
XComponentLoader xCompLoader= (XComponentLoader)UnoRuntime.queryInterface(XComponentLoader.class, oDesktop);
File infile= new File(args[0]);
if (!infile.canRead())
{
System.out.println("Can't read File " + args[0]);
System.exit(1);
}
// Loading the wanted document
PropertyValue propertyValues[] =new com.sun.star.beans.PropertyValue[1];
propertyValues[0] = new com.sun.star.beans.PropertyValue();
propertyValues[0].Name = "Hidden";
propertyValues[0].Value = new Boolean(true);
String inUrl= "file:///" + infile.getAbsolutePath().replace( '\\', '/' );
Object document =xCompLoader.loadComponentFromURL(inUrl, "_blank", 0, propertyValues);
// Getting an object that will offer a simple way to store
// a document to a URL.
XStorable xStorable = (XStorable)UnoRuntime.queryInterface(com.sun.star.frame.XStorable.class, document );
// export document to pdf
PropertyValue storeProps[] = new PropertyValue[1];
storeProps[0] = new PropertyValue();
storeProps[0].Name = "FilterName";
storeProps[0].Value = "writer_pdf_Export";
File outfile= new File(args[1]);
String outUrl= "file:///" + outfile.getAbsolutePath().replace( '\\', '/' );
xStorable.storeToURL(outUrl, storeProps);
// close document
XCloseable xcloseable = (XCloseable) UnoRuntime.queryInterface(XCloseable.class, document);
xcloseable.close(false);
}
catch( Exception e )
{
e.printStackTrace(System.err);
System.exit(1);
}
System.exit(0);
}
}
Code:
java Doc2Pdf <doc-file> <pdf-file>
HTH
BigNum
Ähnliche Themen
- Antworten
- 10
- Aufrufe
- 1.278
- Antworten
- 6
- Aufrufe
- 2.229