Laden...

OLE PDF Speichern (gelößt)

Erstellt von JDJ1982 vor 10 Jahren Letzter Beitrag vor 10 Jahren 7.437 Views
J
JDJ1982 Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren
OLE PDF Speichern (gelößt)

Hallo ihr,

ich habe es gelößt, ohne XML ohne bin etc. ohne schnickschnack. 😁

Für Alle die es interessiert, funktioniert aber nur mit dem docx format.

Man kann das docx entpacken.
Dort befindet sich dann im Ordner Word/embeddings die Dateien.
Alle .bin Container kann man wieder Entpacken. Dort ist die größte Datei dann die gesuchte. Wenn diese dann in pdf umbenannt wird kann man diese wieder lesen.

Ich teste noch mit anderen Formaten, ob es sich dort auch so verhält.

Aber für PDF gelößt! Danke für die Hilfe.

Grüße!
JDJ

1.696 Beiträge seit 2006
vor 10 Jahren

Ähm ... zum einen bitte Code in Codeblock formatieren, damit man besser lesen kann, zum anderen, warum postest du Code für Excel wenn du Problem mit PDF hast? Soll man dir Code für PDF geben oder was? Außerdem "funktioniert nicht" ist keine Fehlerbeschreibung (!), damit kann keiner was anfangen. Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 5.

Grüße

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

J
JDJ1982 Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren

Tut mir leid, es hat nicht richtig eingebunden, der Text sollte jetzt besser zu verstehen sein.

1.696 Beiträge seit 2006
vor 10 Jahren

PDF-COM hat ganz andere Methoden als Excel, wieso postest du Code für Excel?

Grüße

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

J
JDJ1982 Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren

Ich wollte damit lediglich erläutern was ich machen will.

Das Thema mit dem PDF ist ja genau das was ich suche und nicht weiß wie ich es angehen soll. Für hilfe wäre ich sehr dankbar.


                    if (progID.Contains("Excel"))
                     {
                            string fileName = Pfad + "\\" + Dateizähler + "_PIV_OLE_Objekt" + Dateizähler + ".xlsx";
                            oleFormat.Open();

                            Excel.Application oExcelApp;


                            oExcelApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
                            Excel.Workbook excelWorkBook = oExcelApp.ActiveWorkbook;
                            excelWorkBook.SaveCopyAs(fileName);
                            Dateizähler++;
                            Log_Fenster.Text = Log_Fenster.Text + "\n" + "Eingebundenes Excel (OLE) gefunden, extrahiert und als XLS abgelegt. \n";
                     }

                    if (progID.Contains("Acrobat"))
                     {
Dann speichere mir das geöffnente OLE als PDF unter meinem Pfad ab. /wie geht das???

     }



Ich suche im prinzip sowas wie.


oleFormat.Object.save("mein pfad");

Ich finde diesbezüglich aber nichts. Kennt jemand eine Möglichkeit aus Word herraus Ole Dateien so zu exportieren /raus zu speichern das diese garnicht geöffnent werden müssen?

Grüße!
JDJ

1.696 Beiträge seit 2006
vor 10 Jahren

Ich wollte damit lediglich erläutern was ich machen will.

Das Thema mit dem PDF ist ja genau das was ich suche und nicht weiß wie ich es angehen soll. Für hilfe wäre ich sehr dankbar.

Ich finde diesbezüglich aber nichts. Kennt jemand eine Möglichkeit aus Word herraus Ole Dateien so zu exportieren /raus zu speichern das diese garnicht geöffnent werden müssen?

Grüße!
JDJ

Das hast du aber anfangs anders gesagt

Wenn ich das ganze allerdings für PDF durchführe möchte, dann speichert er die PDF nicht aus dem OLE in mein Verzeichnis.

klingt für mich, dass du bereits Code dazu hast und nicht das bekommst, was du haben möchtest.

Tipp: Verweis auf z.B Adobe Acrobat COM-Komponent erstellen, dann kannst du schauen, was die COM dir für möglichkeiten anbietet.

Grüße

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

J
JDJ1982 Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren

Hallo vbprogger,

ich habe lediglich den Adobe Reader und dort kann ich nicht auf den Save befehl zugreifen.

ich behelfe mich gerade mit SendKeys um es über die Oberfläche zu gestalten aber das ist nicht sinnvoll.

Ist dir eine Möglichkeit bekannt dem reader ein save befehlt zu schicken?


                     if (progID.Contains("Foxit") || progID.Contains("PDF") || progID.Contains("Acro"))
                     {
                         string fileName = Pfad + "\\" + Dateizähler + "_PIV_OLE_Objekt" + Dateizähler;
                         oleFormat.Open();
                         
                         oleFormat.Application.ActiveDocument.SaveAs2(fileName, PDF???, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing
                             , ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
                         
                      
                         Dateizähler++;
                     
                     }

Mit oleFormat.Application.ActiveDocument.SaveAs2 komme ich nicht an PDF heran.

Grüße!
JDJ

1.696 Beiträge seit 2006
vor 10 Jahren

PDF-Dokumente sind nicht zu Office-Dokumente zu vergleichen, denn sie lassen sich beim Erzeugen 'ne Menge Einschränkungen einbauen. Wenn z.B. Kopieren von Elemente nicht erlaubt ist, dann kannst du per Code auch nicht umgehen. Ich vermute mal dass das bei dir der Fall ist.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

J
JDJ1982 Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren

Hallo vbprogger,

ich habe es geprüft die Dokumente lassen sich per Programm speichern.
Aber nicht per Code. Würde es per Adobe writer gehen und wenn ja wie würde es da sein?

hat jemand ein Beispiel oder eine Idee?

Grüße!
JDJ

1.696 Beiträge seit 2006
vor 10 Jahren

Ähm ... ich dachte du möchtest bestimmtes Inhalt herausholen und speichern (wie OLE Objekt in Word) und nicht das ganze Dokument. Was machst du denn eigentlich, Datei öffnen und gleich speichern ist etwas sinnfrei, oder nicht? Ob und was der Adobe Acrobat kann, bitte bei Adobe nachgucken http://www.adobe.com/devnet/acrobat.html. Ich versuche hier nur den Part C# im Rahmen meiner Kenntnisse zu helfen.

Grüße

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

J
JDJ1982 Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren

Hallo vbprogger,

wir reden an einander vorbei.
Ich erkläre es nochmal was ich machen will.

Ich habe eine Worddatei. In dieser Datei sind mehrere verschiedene OLE Objekte mit Dateien eingebunden.

Nun möchte ich diese Dateien wieder raus holen.
Das klappt aber nur so lange wie es keine PDF Datei ist.
Denn dann kann ich kein "save to" absenden.

Und hier ist nun meine frage:
Wie kann ich einem Programm wie dem reader oder PDF Writer per C# Code senden, bitte speicher die Datei unter folgenden Pfad ab.

Das PDF Ole öffnen ist kein Thema aber es abspeichern ist das Problem.


                         Type AcroApp = Type.GetTypeFromCLSID(new System.Guid("{85DE1C45-2C66-101B-B02E-04021C009402}"));
                         Type AcrobatType = Type.GetTypeFromCLSID(new System.Guid("{72498821-3203-101B-B02E-04021C009402}"));
                         Type AcroPD = Type.GetTypeFromCLSID(new System.Guid("{FF76CB60-2EC8-101B-B02E-04021C009402}"));

                         Acrobat.CAcroApp oApp = (Acrobat.CAcroApp)Activator.CreateInstance(AcroApp);
                         Acrobat.CAcroAVDoc avdoc = (Acrobat.CAcroAVDoc)Activator.CreateInstance(AcrobatType);
                         Acrobat.CAcroPDDoc adoc = (Acrobat.CAcroPDDoc)Activator.CreateInstance(AcroPD);

                         adoc = (Acrobat.CAcroPDDoc)avdoc.GetPDDoc();
                         adoc.Close();
                         avdoc.Close(1);

Der Code oben funktioniert soweit bis auf.


                       // adoc.Save(0, fileName); schlägt fehl Objectverweis fehlt ???  

Eine Idee wie man dem PDF Programm per c# mitteilen kann, speichere das File unter ... ab?

Grüße!
JDJ

W
955 Beiträge seit 2010
vor 10 Jahren

Hi,

wenn es eine .docx ist kannst Du es doch auch als Zip-Archiv öffnen und dort die Dokumente direkt rausholen oder? Das sind zwar "ole.bin"-Dateien aber diese enthalten dann ja jeweils das Dokument.

16.842 Beiträge seit 2008
vor 10 Jahren

Also keine Ahnung, was das Thema in Datenbanken zusuchen hat. Ist jetzt im Office-Bereich.

XLSX-Dateien sind ZIP Dateien, die Du auch mit einer entsprechenden Bibliothek so behandeln kannst.
Eingebettete Objekte wie PDFs oder anderes Zeug liegen in dieser ZIP-Datei\ diese liegen meines Wissens als Binärdaten vor - lassen sich aber via OpenXML einfach exportieren.

Das was Du da machst ist..... anders.

J
JDJ1982 Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren

Hallo Abt,

hast du ein Beispiel wie man diese Dateien als bin so Extahieren kann das diese dann wieder als PDFs funktionieren?

Grüße!
JDJ

16.842 Beiträge seit 2008
vor 10 Jahren

In der OpenXML Doku findest Du das sicher. Die ist sehr mächtig.

J
JDJ1982 Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren

Hi,

ich versuche das ganze jetzt über die Instanz anzusprechen, anstelle von openXML.

Da ich hier das Problem habe, die OLE Bin Dateien rauszuholen aber dann diese nicht wieder als PDFs öffnen kann. Es sei denn jemand kennt einen Weg die OLE so zu extrahieren als bin das sie dann wieder als PDFs funktionieren.


                     if (progID.Contains("Acro"))
                     {
                         string fileName = Pfad + "\\" + Dateizähler + "_PIV_OLE_Objekt" + Dateizähler;

                         Acrobat.CAcroPDDoc acrbatApp = Marshal.GetActiveObject("{CA8A9780-280D-11CF-A24D-444553540000}") as Acrobat.CAcroPDDoc;
                         acrbatApp.Save(1, fileName);
                         acrbatApp.Close();
                         Dateizähler++;        
                     }

Er bringt mir aber einen Fehler über die ID "{CA8A9780-280D-11CF-A24D-444553540000}"

Hat jemand eine Idee was ich dort eintragen muss? Damit ich die Adobe Reader Instanz ansprechen kann?

Grüße!
JDJ

16.842 Beiträge seit 2008
vor 10 Jahren

Klar. Man kann sich natürlich das Messer selbst in den Rücken jagen. Muss es halt vorher umständlich an den Türrahmen kleben.

Warum nimmst Du wirklich nicht die Werkzeuge dafür, die Microsoft für solche Dinge zur Verfügung stellt - wie eben OpenXML?
5 Sekunden Google verwendet: Extract embedded files from Office documents (CSOfficeDocumentFileExtractor)

Und ja, die Datei in der ZIP (Ole.bin) kann man nicht direkt als PDF extrahieren, da Office selbst noch ein Header reinschreibt und damit das PDF-Format zerstört.
Lösung: OpenXML verwenden oder selbst heraus finden, wie man die korrekten Binärdaten extrahiert.

Wenn Du Dir nicht qualitiv entsprechend helfen lassen willst: gib Bescheid.
Dann weiß ich's für's nächste Mal.

Und schau Dir mal Codekonventionen für C# (C#-Programmierhandbuch)
Wenn ich schon "Dateizähler" als Variable sehe... da rollen sich meine Fußnägel hoch.
Und Pfade baut man mit Path.Combine() zusammen, und nicht mit String-Operationen.

J
JDJ1982 Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren

Hallo Abt,

ich habe es gelößt, ohne XML ohne bin etc. ohne schnickschnack. 😁

Für Alle die es interessiert, funktioniert aber nur mit dem docx format.

Man kann das docx entpacken.
Dort befindet sich dann im Ordner Word/embeddings die Dateien.
Alle .bin Container kann man wieder Entpacken. Dort ist die größte Datei dann die gesuchte. Wenn diese dann in pdf umbenannt wird kann man diese wieder lesen.

Ich teste noch mit anderen Formaten, ob es sich dort auch so verhält.

Aber für PDF gelößt! Danke für die Hilfe.

Grüße!
JDJ

16.842 Beiträge seit 2008
vor 10 Jahren

Bei mir sagt Acrobat, dass die Datei defekt ist und nicht geöffnet werden kann.
Das Risiko, das so zu machen und es in Deinem Fall ein Glückstreffer ist, wäre mir also viel zu hoch.

Dass man das entpacken kann haben wir Dir eigentlich bereits 3 mal gesagt; nich umgekehrt.

J
JDJ1982 Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren

Hallo Abt,

ich habe es jetzt mit 20 Dateien probiert und mit allen hat es geklappt.

Daher reicht mir diese Lösung erstmal.

Und 2)
habt Ihr? (seit ihr eine andere Welt?) das so nicht nicht gesagt, sondern lediglich das es diese enthält.
Aber nicht das man es 2 mal entpacken muss und dann umbenennen.
Das andere ist, das ich von Word allgemein gesprochen haben und es auch älter Wordformate gibt wo dies so nicht funktioniert, daher muss ich dort weiter nach einer Lösung suchen.

Wenn dir eine Word allg. Methode bekannt mit der man die Dateien extrahieren kann, dann kannst du die gerne Posten.

Grüße!
JDJ