Ich habe schon die Suche bemüht, aber letztlich noch keine Antwort auf mein Problem gefunden. Es geht um den Druck von Word-Dokumenten im Richtextformat über das COM-Objekt von PDFCreator, wobei es unerheblich sein dürfte, ob es eine RTF-, DOC- oder DOCX-Datei ist.
Neuerdings soll die Anwendung, die in DELPHI 6 programmiert ist, mit einem Office 2013 kommunizieren (auf einem PC mit Windows 7, 64-bit), aber sobald der Druck angestoßen werden soll, liefert die Eigenschaft cIsPrintable ein FALSE zurück.
Über WordApplication und WordDocument-Objekte kann ich das Dokument im Hintergrund drucken, wobei ich da Probleme mit der Aussteuerung des Dateinamens usw. habe. Insofern kann es kein Berechtigungsproblem sein.
Wäre für Hinweise, die zur Lösung des Problems beitragen können, sehr dankbar.
Gruß
Ingo
Hallo,
hier lässt sich der Fehler nicht reproduzieren, könntest Du den relevanten Teil des Codes hier posten oder uns per mail schicken?
MfG
Robin
Ich habe die Programmstelle heute morgen extra auf eine Art Dreizeiler reduziert, wobei ich dazu sagen muss, dass ich die Unit updfTools_com, die bei Delphi-PRAXIS gepostet wurde - meine ich.
Die aufrufende Prozedur sieht so aus:
procedure TForm1.Button3Click(Sender: TObject);
var
PDFDoc : string;
begin
if Printers.Printer.Printers.IndexOf(‘PDFCREATOR’) > -1 then
begin
MyPDFDruck := TPDFComObj.Create();
try
if MyPDFDruck.IsPrinterAvailable then MyPDFDruck.PDFPrint(Dateiname, ‘C:\’);
finally
MyPDFDruck.Free();
end; // try
PDFDoc := ExtractFileName(DateiName);
PDFDoc := ‘C:\’ + COPY(Dateiname, 1, Length(Dateiname) - Length(ExtractFileExt(Dateiname))) + ‘.PDF’;
if FileExists(PDFDoc) then
showmessage(‘Erfolgreich’)
else
showmessage(‘Nicht erfolgreich’);
end;
end;
und die Prozedur aus der Unit
procedure TPDFComObj.PDFPrint(const aFileName:String; aDestPath : string);
var
PathExist : boolean;
begin
if fPDF.cIsPrintable(aFileName) then
begin
fPDF.cClearCache;
FileName := aFileName;
if aDestpath <> ‘’ then
begin
if not(DirectoryExists(ADestPath)) then
PathExist := ForceDirectories(ADestPath)
else
PathExist := true;
if PathExist then
begin
fPDF.cOption(‘UseAutoSave’) := 1;
fPDF.cOption(‘UseAutoDirectory’) := 1;
fPDF.cOption(‘AutosaveDirectory’) := aDestPath;
fPDF.cOption(‘AutosaveFilename’) := ExtractFileName(filename);
fPDF.cOption(‘AutosaveFormat’) := 0; // PDF format
fPDF.cOption(‘PDFColorsColorModel’) := 0; // RGB format
fPDF.cSaveOptions;
end;
end;
fPDF.cPrintFile(aFileName);
fPDF.cPrinterStop:=False;
while not FileExists(FileName) do
begin
Sleep(sleepTime);
Application.ProcessMessages();
end; // while
end else MessageDlg(Format(‘Die Datei “%s” kann nicht gedruckt werden!’, [aFileName]), mtError, [mbOk], 0);
Sleep(200);
Application.ProcessMessages();
end; // TPDFComObj.Drucke
Wenn man nun den Button betätigt, erhält man die Meldung “Die Datei xy kann nicht gedruckt werden!” und das läuft auf den ELSE-Zweig von “if fPDF.cIsPrintable(aFileName) then” hinaus.
Danke im voraus.
Ingo