Hi ihr,
ich habe eine knifflige Frage. Wie kann ich auf den Inhalt einer PDF-Datei zugreifen?
Irgendwie muss sowas doch möglich sein, denn es gibt ja PDF-Editoren die das auch machen,mit denen man den bestehenden Inhalt verändern kann.
Kennt da jemand eine dll oder eine Klasse oder so?
Bin dankbar für alles.
==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================
Hallo Maddinel,
ohne die eigentliche Frage beantworten zu können, kann ich sagen, dass PDF ein sehr mächtiges und damit komplexes Format ist. Die meisten PDF-Editoren beherschen deshalb auch nur ein Subset des Formats. Beliebige PDF-Dateien einzulesen ist daher sicher quasi unmöglich.
Außerdem ist PDF ein "Druckformat", bei dem es darum geht, die einzelnen Elemente auf einer Seite exakt anzuordnen. Dazu wird der ursprüngliche Fließtext, aus dem ja viele Dokumente bestehen, in einzelne Zeilen aufgespaltet und jede dieser Zeilen bildet ein einzelnes Element. Es ist also u.U. schon nicht ganz trivial, alleine die ursprünglichen Absätze im Text zu rekonstruieren.
Es mag aber sein, dass man für spezielle Anwendungsfälle paraktikable Lösungen realisieren kann.
HTH
herbivore
Hallo Maddinel,
FULLACK mit herbivore.
Was mir aber aufgefallen ist, ein paar Sachen stehen "normal" in einem pdf-File drin.
Es gibt bestimmt Definitionen von Acrobat die das genau beschreiben...
Vielleicht hilft auch ein Blick auf die OpenSource-Geschichte in C#, die
sich allerdings mit der PDF-Erstellung beschäftigt.
Vielleicht sind da ein paar Zeilen Code, die du umschreiben kannst...
Wenn mir jetzt nur der Name von dem Open SourceProjekt einfallen würde 🤔
Yahoo
PS: Vielleicht fällt mir der Name noch ein, dann werd ich ihn selbstverständlich posten, oder weiß jemand was ich meine???
Wie die anderen schon sagen, ist das einlesen von PDFs, editieren und zurückschreiben nicht ganz so einfach, da PDF Dateien inzwischen ziemlich komplex geworden sind. Wenn du allerdings immer noch Lust hast, derartiges zu programmieren, hier die Spezifikation des Dateiformates: http://www.wotsit.org/download.asp?f=pdfspec
Viel Spaß 😉
Zum erstellen von PDFs ist z.B. Report.NET ganz gut:
http://report.sourceforge.net/
I am Jack's smirking revenge.
I am Jack's raging bile duct.
I am Jack's cold sweat.
I am Jack's complete lack of surprise.
I am Jack's broken heart.
I am Jack's wasted life.
Falls du nur lesend Zugriff haben musst, benutze das Tool pdftext.
Einfach als Process aufrufen nebst Parameter der PDF-Datei, und den Output wieder einlesen. 🙂
--
Man kann Scheisse nicht polieren!
Ja brauche nur lesend Zugriff.
Wo bekomme ich das Tool. Hast du mal ein Anwenduingsbeispiel, so wie du das meinst?
==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================
Das Tool findest du im xpdf-Paket (http://www.foolabs.com/xpdf/).
Ist Kommandozeilenbasiert, die genaue Syntax weiss ich nun grade nicht, aber das lässt sich ja leicht rausfinden.
Als Objekt zum starten nimmst du am besten "System.Diagnostics.Process" und setzt da das StartInfo-Member entsprechend du es brauchst.
Mache ich auch so, und es läuft astrein. 🙂
Mit Code kann ich Dir grade nicht dienen, das geht erst wenn ich zu Hause bin 😉
Aber eigentlich ergibt sich alles aus dem Beispiel hier:
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1033/cpref/html/frlrfsystemdiagnosticsprocessclasstopic.htm
--
Man kann Scheisse nicht polieren!
danke ich werds mal ausprobieren.
==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================
Da find ich mich garnicht zurecht. Welches ist denn die exe die ich benötige?
==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================
Bei downloads nimmst du natürlich das für "x86, DOS/Win32". Also das "xpdf-3.00pl3-win32.zip"
Entpacken, und benutzt das naheliegenste: "pdftotext.exe". 😉
Den Rest brauchst du für weiteres nicht.
Den Aufruf habe ich in einer Funktion untergebracht, das txt wird dann im Startpfad untergebracht. Die Funktion gibt das Textfile incl. Pfad zurück.
private string CallPdfText(string pdffile) {
string mypath = Application.StartupPath + @"\";
string arguments = "-layout -nopgbrk ";
string tempfile = mypath + "temp.txt";
string text;
FileInfo pdf = new FileInfo(pdffile);
tempfile = pdf.Name.Substring(0, pdf.Name.LastIndexOf("."));
tempfile += ".txt";
File.Copy(pdffile, mypath+pdf.Name, true);
pdffile = pdf.Name;
// Process ausführen
Process p2t = new Process();
p2t.StartInfo.UseShellExecute = false;
p2t.StartInfo.CreateNoWindow = true;
p2t.StartInfo.WorkingDirectory = mypath;
p2t.StartInfo.FileName = mypath + "pdftext.exe";
arguments = arguments + "'" + pdffile + "'";
p2t.StartInfo.Arguments = arguments;
p2t.Start();
p2t.WaitForExit();
File.Delete(mypath + pdffile);
return(mypath + tempfile);
}
--
Man kann Scheisse nicht polieren!
So ich hab das jetzt mal ausprobiert(besser spät als nie) und habe ein paar Fragen. Deine Funktion macht doch garnicht das was ich gesucht habe. Sie gibt zwar den Pfad einer Textdatei zurück, aber dieso existiert an diesem ort dann nicht. Es wird kein Textfile erzeugt. Wie bekomme ich den PDF-Text zurück?
==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================