Befehl für Drucken mit FreePDF XP
-
Hallo,
ich habe ein C-Programm, welches eine Textfile einliest und diese dann über den Drucker ausgeben soll.
Zum Drucken kann der Befehl fopen("LPT1:" , "a") verwendet werden.
LPT1 spricht ja den Drucker unter MS-DOS an, bzw. den Drucker, der an dem Anschluss LPT1 hängt.
Ich habe alledings keinen Drucker an meinem Rechner hängen.Ich möchte aber die File mit FreePDF XP in ein PDF umwandeln lassen, statt mit einem Durcker auszudrucken.
FreePDF XP läuft auch unter Drucker und Fax-Geräte und hat einen virtuellen Anschluss (redirected Port), welcher bei mir den Namen "FreePDFXP1" hat.Kann ich überhaupt den virtuellen Anschluss von FreePDF XP durch einen Befehl direkt ansprechen, so wie ich einen Drucker am Anschluss LPT1 mit LPT1 ansprechen kann?
-
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 200FILE *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 angegebenunter der Registerkarte "Anschlüsse" habe ich den Druckerpool aktiviert
und bei LPT1 ein Häkchen gesetzt. Es sind bei LPT1 und bei FreePDFXP1 Häkchenim 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?