Problem mit exe parameter



  • Hi,

    ich sitz schon sein mehrere stunden am meinem problem und hab mich auch schon zu tode gegooglet! 😞

    ich möchte pdfimages.exe in meinem program öffnen doch diese benötigt noch drei parameter zu einem "-j" , "Name der pdf" und "Name der jpg dateien". In cmd siehts ja so aus "pdfimages.exe -j "text.pdf" "text". doch wie kann ich es nun im quellcode schreibe und ich möchte außer dem die beiden text als variablen haben. Damit ich sie einfach austauschen kann.

    string pdffilename[100];
    string jpgfilename[100];
    char opti[5] = " -j";
    
    pdffilename[100]="text.pdf";
    jpgfilename[100]="text";
    
    char szBuffer[1024];
    sprintf(szBuffer, "C:\\PDF\\pdfimages.exe %s %s %s", opti, pdffilename, jpgfilename);
    system(szBuffer); // bekomme dann eine Fehlermeldung: Unbehandelte Ausnahme
    
    ShellExecute (NULL,"open", "C:\\PDF\\pdfimages.exe", " -j text.pdf text", NULL, SW_SHOWNORMAL); 
    // ist schwachsinn da ich ja nich text austauschen kann
    
    system("C:\\PDF\\pdfimages.exe -j\" \"text.pdf\" \"text"); 
    // mein erster versuch ohne varible ging auch nicht
    

    alles was ich ausbrobiert habe hat nur die exe geöffnet ohne parameter.

    ich hoffe das jemand mir helfen kann sonst muss ich das project einstampfen!! 😞

    cu LexLuthor666



  • Vermutlich solltest du die Anführungszeichen auch an die richtige Stelle setzen:

    system("C:\\PDF\\pdfimages.exe -j \"text.pdf\" \"text\"");
    

    Ansonsten: Ich kenne das Programm Pdfimages nicht. Aber wie genau hast du festgestelt, daß deine Parameter nicht angekommen sind?



  • Danke erstmal für die schnelle Antwort. Doch die Anfürungszeichen haben mein Problem nicht gelöst.

    So sieht das prog aus wenn ich es starte ohne parameter. öffnet es nur.

    (Datei) text.pdf
    
    Insgesamt
    Ordner: 0
    Dateien: 1
    text 
    pdfimages version 3.00  [b]//<-- Ab hier startet die pdfimages.exe[/b]
    Copyright 1996-2004 Glyph & Cog, LLC
    Usage: pdfimages [options] <PDF-file> <image-root>
      -f <int>       : first page to convert
      -l <int>       : last page to convert
      -j             : write JPEG images as JPEG files
      -opw <string>  : owner password (for encrypted files)
      -upw <string>  : user password (for encrypted files)
      -q             : don't print any messages or errors
      -cfg <string>  : configuration file to use in place of .xpdfrc
      -v             : print copyright and version info
      -h             : print usage information
      -help          : print usage information
      --help         : print usage information
      -?             : print usage information
    

    Die Parameter sind dafür da dass das pdfimages weiß was es machen soll.
    "-j" für jpg erstellen
    "text.pdf" mit welcher pdf
    "text" wie die jpg files heißen sollen
    und wenn er die parameter nicht erhält wandelt er die text.pdf nicht in text.jpgs um.

    PS: der link zu pdfimges von xpdf
    http://www.foolabs.com/xpdf/download.html



  • Hi !
    Brauchst nichts einstampfen !
    Deine erste Version des Programm-Aufrufs müsste eigentlich funktionieren.

    Bei mir läuft folgender Code erfolgreich:

    char* prog		= "pdfimages";
    	char* option	= "-j";
    	char* pdf_datei = "testdatei.pdf";
    	char* jpg_datei = "jpg_bild";
    
    	char befehl[256];
    	sprintf( befehl, "%s %s %s %s", prog, option, pdf_datei, jpg_datei );
    
    	system( befehl );
    

    Gruß,
    p.



  • Vielen Dank 😃 , proggingmania.

    es funktioniert jetzt endlich mehr oder weniger. jetzt kommen die meldung:
    Error: Couldn't open file 'text.pdf'.

    Ich habe den syntax schon mit einer andern datei ausprobiert (rar.exe) und es ging einwandfrei. irgendetwas stimmt noch nicht, doch ich weis einfach nicht
    was. 😞

    Desweiteren was ich nicht wie ich nun meine strings mit sprintf verwenden kann.



  • Ich sehe keine andere chance endlich weiter zu kommen. Ich post mein prog:

    PDF2IMAGER v0.6

    #include <windows.h> 
    #include <iostream>
    #include <string>
    #include <shellapi.h>
    #include <cstdio>
    #include <cstdlib>
    
    using std::cout;
    using std::endl;
    using std::string;
    using namespace std; 
    
    string pdf[100000];
    string jpg[100000];
    string cbr[100000];
    
    int main(int argc, char *argv[])
    
    { 
    cout<<"PDF2IMAGER v0.6BETA" <<endl<< "-------------------------" << endl << "by LexLuthor666"<< endl<<endl<<endl<<endl; 
    
    WIN32_FIND_DATA FData; 
    
    HANDLE hFind = FindFirstFile("C:\\PDF\\*.pdf",&FData); 
    BOOL MoreFiles = FALSE; 
    int cnt_dir = 0, cnt_file = 0; 
    
    if (hFind == INVALID_HANDLE_VALUE) return -1; 
    
    do 
    { 
    if (FData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) 
    { 
    cout<<"(Ordner) "<<FData.cFileName<<endl; 
    cnt_dir++;
    } 
    
    else 
    { 
    cout<<"(Datei) "<<FData.cFileName<<endl; 
    pdf[cnt_file]=FData.cFileName;
    jpg[cnt_file]=FData.cFileName;
    cnt_file++; 
    } 
    
    MoreFiles = FindNextFile(hFind,&FData); 
    } while (MoreFiles); 
    
    FindClose(hFind); 
    
    cout<<endl<<"Insgesamt:"<<endl;
    cout<<"-----------------------"<<endl;
    cout<<"Ordner: "<<cnt_dir<<endl 
    <<"PDF-Dateien: "<<cnt_file <<endl; 
    int i = cnt_file;
    for (int j =0; j <=(i-1); j++)
    {
    	string toErase(".pdf");
    	string::size_type pos1 = jpg[j].find(toErase);
    	jpg[j].erase(pos1,toErase.length());
    	cout << jpg[j] << endl;
    }
    
        char* prog      = "pdfimages"; 
        char* option    = "-j"; 
        char* pdf_datei = "text.pdf"; //für dass muss pdf[j] stehen damit man er alle pdfs im ordner in jpg umwendelt
        char* jpg_datei = "jpg_bild"; //für dass muss jpg[j] stehen
    
        char befehl[256]; 
        sprintf( befehl, "C:\\PDF\\%s %s %s %s", prog, option, pdf_datei, jpg_datei ); 
    
        system( befehl ); 
        cout << befehl; //hab ich nur hingemacht um den pfad zu sehen ab er richtig ist
    
    cin.get();    
    return 0; 
    }
    

    Hoffendlich kommen wir ihr endlich weiter!

    PS: UM DAS PROGRAMM ZU NUTZEN BRAUCHT MAN NOCH DIE pdfimages.exe von xpdf:
    http://www.foolabs.com/xpdf/download.html



  • Ich habe jetzt das problem mit char string gelöst, ABER die fehlermeldung das er die text.pdf nicht öffnen kann, ist immer noch. 😞

    char* prog      = "pdfimages"; 
        char* option    = "-j"; 
        char* pdf_datei; 
        char* jpg_datei; 
    
        i = cnt_file;
    	for (int j =0; j <=(i-1); j++)
    	{
    	char* input_char_pdf = new char[pdf[j].length()+1];
    	pdf[j].copy(input_char_pdf, string::npos);
    	input_char_pdf[pdf[j].length()] = 0;
    	pdf_datei=input_char_pdf;
    
    	char* input_char_jpg = new char[jpg[j].length()+1];
    	jpg[j].copy(input_char_jpg, string::npos);
    	input_char_jpg[jpg[j].length()] = 0;
    	jpg_datei=input_char_jpg;
    
        char befehl[256]; 
        sprintf( befehl, "C:\\PDF\\%s %s %s %s", prog, option, pdf_datei, jpg_datei); 
    	system(befehl);
    	cout << befehl<<endl;
    	}
    


  • Hi, ich habe deine erste Version aufgegriffen und ein wenig daran rumgedoktert...

    #include <windows.h>
    #include <iostream>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    	vector <string> pdf_dateien;
    	WIN32_FIND_DATA FData;
    	cout<<"PDF2IMAGER v0.6BETA" <<endl<< "-------------------------" << endl << "by LexLuthor666"<< endl<<endl<<endl<<endl;
    
    	HANDLE hFind = FindFirstFile("C:\\PDF\\*.pdf",&FData);
    	BOOL MoreFiles = FALSE;
    
    	if (hFind == INVALID_HANDLE_VALUE) return -1;
    
    	do
    	{
    		cout<<"(Datei) "<<FData.cFileName<<endl;
    		pdf_dateien.push_back( FData.cFileName );
    
    		MoreFiles = FindNextFile(hFind,&FData);
    	} while (MoreFiles);
    
    	FindClose(hFind);
    
    for ( int i = 0; i<pdf_dateien.size(); i++ )
    {
    	char befehl[ MAX_PATH * 5 ];
    	string jpg  = pdf_dateien.at(i);
    	int len = jpg.size();
    	jpg.erase( len-4, 4 );
    
    	sprintf( befehl, "C:\\PDF\\pdfimages.exe -j C:\\PDF\\%s C:\\PDF\\%s",
    	 pdf_dateien.at(i).c_str(), jpg.c_str() );
    
    	cout << "Befehl: " << befehl << endl;
    	system( befehl );
    }
    
    return 0;
    }
    

    Läuft bei mir einwandfrei. Die sprintf - Zeile mit den Pfaden würd ich noch variabel machen, aber das überlasse ich mal dir.
    LG,
    p



  • HI proggingmania,

    zu dem sourcecode kann ich nur sagen: Operation Gelungen, Patient NICHT TOT. 😃
    Super, geht einwandfrei. Besser hätte ich es nicht machen können. Einfach Genial.

    Vielen Vielen Dank, proggingmania!!!
    Endlich kann ich weiter machen.

    Ahoy, langsam ist Land in Sicht!!!

    Danke, ans ganze Forum!!!

    cu LexLuthor666 🙂


Log in to reply