P
habe mal an dem Problem weiter gearbeitet hier ist mal das komplette Programm:
/-----include files-------------------------------/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/--------define-----------------------------------/
#define SEITENLAENGE 65
/*PCL-Steuerzeichen für Schmalschrift */
#define SCHMAL "1B2873313648"
/* Steuerzeichen für seitenvorschub */
#define NEUE_SEITE "0c"
/* PCL-Steuerzeichen für normale Schrift */
#define NORMAL "1B2873313248"
/* maximale Zeilenlänge */
#define MAX_EINGABE 200
FILE *text; /* Druckausgabe */
/************************************************************
* Funktion : l e f t _ m a r g i n *
-------------------------------------------------------------
* Aufgabe : Leerzeichen für Zeilenanfang *
* Parameter : Anzahl der Leerstellen *
* Return-Wert : keiner *
************************************************************/
void left_margin(int rand) {
while(rand-- > 0)
fprintf(text,"%c",32); /* 32 = ASCII-Code
für Leerzeichen*/
}
/************************************************************
* Funktion : k o p f z e i l e *
*-----------------------------------------------------------*
* Aufgabe : Kopfzeilenausgabe einer Liste *
* Parameter : Name der zu druckenden Datei *
* Abstand vom linken Rand *
* Return-Wert : keiner *
************************************************************/
void kopfzeile(char dateiname, int linker_rand) {
static int seite=1;
fprintf(text,"\n"); / 1 Leerzeile vor Druckbeginn */
left_margin(linker_rand);
fprintf(text,"<<< Seite %3i >> von %s\n\n", seite++,dateiname);
}
/************************************************************
* Funktion : s t e u e r z e i c h e n *
*-----------------------------------------------------------*
* Aufgabe : Steuerzeichen an Drucker senden *
* Parameter : Escapesequenzen *
* Return-Wert : keiner *
************************************************************/
void steuerzeichen(char seq) {
char wert[100];
while(*seq) { /* Lies die gesamte Steuersequenz/
sscanf(seq,"%2x",&wert); /* Hole jeweils 2 Zeichen*/
fprintf(text,"%c",wert);
seq+=2;
}
}
/----------------Hauptprogramm-----------------------------/
int main() {
FILE stream;
char dateiname[67]; / zu druckende Datei /
int zeile=0; / aktuelle Druckzeile /
int linker_rand=10; / linke Randgröße /
char schmal = 'J'; / Schmalschrift J/N ? */
char eingabe[MAX_EINGABE]; /*Dialogzeile */
printf("\n\t\t<<< Formatierter Druck >>");
printf("\n\n<RETURN> beendet das Programm.\n");
/*--------Dateinamen einlesen und öffnen */
printf("\nWelche Datei drucken?\n>");
gets(dateiname);
if(strlen(dateiname) == 0)
exit(0);
while((stream = fopen(dateiname,"r")) == NULL) {
printf("'%s' nicht gefunden!\a\n",dateiname);
printf("\nWelche Datei drucken?\n>");
gets(dateiname);
if(strlen(dateiname) ==0)
exit(0);
}
/*----Druckparameter einlesen */
printf("\n<RETURN> uebernimmt die Vorgaben.\n");
printf("\nLinker Rand (%i): >",linker_rand);
gets(eingabe);
if(strlen(eingabe) != 0)
linker_rand = atoi(eingabe);
printf("\nSchmalschrift J/N (%c): >",schmal);
gets(eingabe);
if(strlen(eingabe) != 0) {
if(eingabe[0] == 'N' || eingabe[0] == 'n')
schmal = 'N';
}
/*----Druckparameter öffnen */
text = fopen("LPT1:","a");
if(text == NULL) {
printf("Fehler beim Oeffnen von LPT1");
exit(1);
}
/*----Schriftart einstellen */
/*if(schmal == 'J')
steuerzeichen(SCHMAL);
else
steuerzeichen(NORMAL);
/*------------Liste drucken */
kopfzeile(dateiname,linker_rand);
while(fgets(eingabe,MAX_EINGABE,stream)!=NULL) {
left_margin(linker_rand);
fprintf(text,"%s",eingabe);
if(++zeile > SEITENLAENGE-10) {
steuerzeichen(NEUE_SEITE);
kopfzeile(dateiname,linker_rand);
zeile=0;
}
}
steuerzeichen(NEUE_SEITE);
/*--------DATEI schliessen */
fclose(stream);
printf("\nDruck beendet!\a\n");
}
ich verwende Windows XP.
habe den virtuellen Drucker "FreePDFXP" Netzwerkdrucker unter dem Namen "FreePDF" im Netzwerk freigegeben.
Systemsteuerung > Drucker Faxgeräte > FreePDFXP1
bei den Eigenschaften unter der Registerkarte "Freigabe"
"Drucker Freigeben" angewählt
Freigabename: FreePDF angegeben
unter der Registerkarte "Anschlüsse" habe ich den Druckerpool aktiviert
und bei LPT1 ein Häkchen gesetzt. Es sind bei LPT1 und bei FreePDFXP1 Häkchen
im Kommandozeilenfenster (start > cmd) habe ich
"net use LPT1: \\Computername\FreePDF" eigegeben.
Meldung: Befehl wurde erfolgreich ausgeführt ist erschienen.
wenn ich das C Programm ausführe funktioniert es, Druckauftrag wird gesendet, Druckersymbol erscheint und Druckauftrag ist vorhanden, jedoch wird nichts gedruckt. bzw. ein PDF erstellt.
Hab ich eventuell noch was übersehen oder kann mir jemand einen Tipp geben?