PDF Datei lesen



  • Morgen zusammen

    Ich habe hier eine ganz komische Sache.

    Wenn ich jetzt eine vorhandene PDF Datei öffne und diese Zeilenweise auslese, um z.B. eine Kopie von dieser zu erstellen (ich weiß dass das einfacher geht aber ist ja auch nur ein Bsp. 😉 ) kann er mir diese PDF später nicht lesen.

    Ich habe dann mal debugt und so geschaut, was er mir so in meinen string reinpackt. Und zwar schneidet der den irgendwann einfach ab.

    Hier der Code:

    CStdioFile file_FILE;
    	CString str_Daten = "", str_Zeile = "";
    	ULONGLONG end_position;
    	if(! file_FILE.Open("C:\\temp\\Neu1.pdf",CFile::modeRead ) )
    	{
    		MessageBox("Fehler beim lesen der Datei!",NULL,MB_OK);
    		return;
    	}
    	end_position = file_FILE.GetLength();
    	int i = 0;
    	ULONGLONG testlong = file_FILE.GetPosition();
    	while ( file_FILE.GetPosition() != end_position )
    	{
    		if (! file_FILE.ReadString(str_Zeile) )
    		{
    			MessageBox("Fehler beim Lesen der Zeile!",NULL,MB_OK);
    			break;
    		}
    		else
    		{
    			str_Daten += str_Zeile;
    			i++;
    			testlong = file_FILE.GetPosition();
    		}
    		str_Daten += str_Zeile;
    	}
    
    	file_FILE.Close();
    
    i hat nach Ende der Schleife einen Wert von 6
    

    So, jetzt das witzige: Wenn ich ihm beim Datei öffnen das Flag mitgebe, dass er diese bitte als binär öffnen solle, dann kann ich anstatt 6 auf einmal 96 Zeilen lesen.

    Jetzt frage ich mich natürlich: Warum ist das so und woran erkenne ich, ob ich eine Datei binär öffnen muss oder nicht?



  • Eine PDF-Datei ist keine Textdatei und somit müsst Du diese Binär einlesen und nicht Zeileweise...



  • Hi

    ja gut ok. gibt es denn irgendeinen parameter denn ich abfragen kann um zu wissen in welchem format ich die nun öffnen muss?

    oder muss ich das extension abhängig machen?



  • Du kannst prinzipiell immer "binär" öffnen... oder warum willst Du die Datei überhaupt lesen?



  • ja, ich muss aus meiner anwendung heraus faxe verschicken. dazu nutze ich den dienst eines providers, bei dem ich dass per HTTP Post realisieren kann.

    der unterstützt aber nur PDF dateien, die dann noch Base64 encodiert sein müssen.

    von daher muss ich erst den ganzen kram lesen und dann encodieren



  • PDF musst Du immer binär öffnen und codieren... wenn es Text wäre, dann müsste man es ja nicht kodieren, oder?



  • hm, ich hab mich grad mal damit genauer auseinander gesetzt

    laut meinen infos werden alle daten die du z.b. auch per smtp überträgst (Anhänge) auch Base64 codiert. dann musste das doch auch mit textdateien machen oder nicht?


  • Mod

    Hast Du denn verstanden wie Base64 funktioniert?
    Du musst in jedem Fall die Datei binär lesen und dann umwandeln. Entsprechende Base64 Umwandlungsroutinen findetst Du in der ATL.
    Base64EncodeGetRequiredLength+Base64Encode


Anmelden zum Antworten