COM-Objekt: Eigenschaft cIsPrintable liefert FALSE

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