AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PDF Merge

Ein Thema von gaisser · begonnen am 8. Feb 2021 · letzter Beitrag vom 25. Okt 2021
Antwort Antwort
gaisser

Registriert seit: 7. Sep 2003
Ort: Dotternhausen(Baden Württemberg)
64 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: PDF Merge

  Alt 8. Feb 2021, 15:24
gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=C:\Austausch\Test.pdf -dBATCH C:\Austausch\DV\jg121035219.PDF C:\Austausch\DV\jg1209120740.PDF


das wird versucht aufzurufen!

Habe ich vielleicht das gs falsch installiert?

habs von hier:
https://www.ghostscript.com/download.html
Jochen
Nicht alles dem System anlasten, meistens sitzt der Fehler vor den Tasten !!!
  Mit Zitat antworten Zitat
gaisser

Registriert seit: 7. Sep 2003
Ort: Dotternhausen(Baden Württemberg)
64 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: PDF Merge

  Alt 8. Feb 2021, 15:51
Ich habe den Fehler gefunden!
Ich muss den kompletten Pfad angeben, dann funktioniert es!
Coole Sache

Delphi-Quellcode:
var
  xProg: String;
begin
  xProg := '"C:\Program Files (x86)\gs\gs9.53.3\bin\gswin32.exe" -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=' + JvFilenameEdit3.Text
    + ' -dBATCH ' + JvFilenameEdit1.Text + ' ' + JvFilenameEdit2.Text;
  showmessage(xprog);
  JvCreateProcess1.CommandLine := xProg;
  JvCreateProcess1.Run;

end;
Jochen
Nicht alles dem System anlasten, meistens sitzt der Fehler vor den Tasten !!!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#3

AW: PDF Merge

  Alt 8. Feb 2021, 16:03
Zitat:
CommandLine := ExtractFilePath(Application.ExeName) + 'gs ...';
Liegt denn GS im selben Verzeichnis, wie deine Application?



Und dennoch solltest du sicherheitshalber "eventuelle" Leerzeichen beachten (Parameter in " einschließen), nicht nur bei der EXE, sondern auch bei den PDFs.
und das eine fehlende Leerzeichen einfügen. siehe #8

Außerdem ist denn das aktuelle Arbeitsverzeichnis auch das Verzeichnis wo die PDFs liegen?
Sicherheitshalber immer nur mit absoluten Pfaden arbeiten.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 8. Feb 2021 um 16:05 Uhr)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
981 Beiträge
 
Delphi 6 Professional
 
#4

AW: PDF Merge

  Alt 9. Feb 2021, 17:26
Hmm..

Alternativ kannst du auch von GS die DLL direkt in deinem Programm verwenden, dann braucht gar kein GS mehr installiert werden und es muss auch kein (externes) Programm mehr aufgerufen werden.

Als Parameter werden die gleichen an einen Funktionsaufruf übergeben, wie beim Aufruf der Exe.

Die API-Pas files waren von Alessandro Briosi und müssen nur auf UniCode angepasst werden.
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat
gaisser

Registriert seit: 7. Sep 2003
Ort: Dotternhausen(Baden Württemberg)
64 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: PDF Merge

  Alt 10. Feb 2021, 10:05
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  argv: Array of PAnsiChar;
  instance: Pointer;
  x: Integer;
begin
  // new(instance); //how many bytes, this really doesn't make sense with a untyped pointer!
  // setlength(argv, 4);
  // argv[0] := PANsiChar('ps2pdf');
  // argv[1] := PAnsiChar('-dNOPAUSE');
  // argv[2] := PAnsiChar('-dBATCH');
  // argv[3] := PAnsiChar('-dSAFER');
  // gsapi_init_with_args(instance, Length(argv), PPAnsiChar(argv));
  // gsapi_exit(instance);
  gsapi_new_instance(instance, instance);
  // ShowMessage(inttostr(x));
  // new(instance); //how many bytes, this really doesn't make sense with a untyped pointer!
  setlength(argv, 5);
  argv[0] := PAnsiChar('');
  argv[1] := PAnsiChar('-dNOPAUSE');
  argv[2] := PAnsiChar('-sDEVICE=pdfwrite');
  argv[3] := PAnsiChar('-sOUTPUTFILE= ' + JvFilenameEdit3.Text);
  argv[4] := PAnsiChar(' -dBATCH ' + JvFilenameEdit1.Text + ' ' +
    JvFilenameEdit2.Text);
  gsapi_init_with_args(instance, Length(argv), PPAnsiChar(argv));
  gsapi_exit(instance);
  showmessage('fertig!');

end;
Danke HolgerX!
Das funktioniert aber nicht, kommt nicht mal ne Fehlermeldung!
Jochen
Nicht alles dem System anlasten, meistens sitzt der Fehler vor den Tasten !!!
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
258 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: PDF Merge

  Alt 10. Feb 2021, 10:16
Falls es ohne Abhängigkeit zu GhostScript laufen soll:

WPViewPDF PLUS kann mehrere PDFs in eine neue zusammen führen. Es kann auch Seiten aus einer PDF herausnehmen und als Wasserzeichen (z.b. als Briefkopf) unter existierende Seiten aus einer anderen PDF legen. Seiten können auch gelöscht werden, dabei werden dann die Resourcen, die nur von diesen Seiten verwenden werden, nicht in der neuen PDF eingebunden.

Viele Grüsse,
Julian
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#7

AW: PDF Merge

  Alt 10. Feb 2021, 11:33
argv[0] // ein Pointer auf nil, sicher das die API damit etwas anfangen kann?
argv[3] // warum ein Leerzeichen nach dem = ?
argv[4] // warum ein Leerzeichen am Anfang ?
  Mit Zitat antworten Zitat
gaisser

Registriert seit: 7. Sep 2003
Ort: Dotternhausen(Baden Württemberg)
64 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: PDF Merge

  Alt 10. Feb 2021, 14:41
Ich blick es nicht
Was mache ich falsch, es kommt hier nun immer der Errocode 100
Kann vielleicht mal jemand Source testen?

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  ArgV: Array of PAnsiChar;
  instance: Pointer;
  x, code: Integer;
  xArgV: PPAnsiChar;
begin

  code := gsapi_new_instance(instance, nil);
  if code < 0 then
    raise Exception.Create
      ('Impossible to open an instance of ghostscript. Error code: ' +
      IntToStr(code));

  setlength(ArgV, 4);

  ArgV[0] := PAnsiChar('-dNOPAUSE' + #0);
  ArgV[1] := PAnsiChar('-sDEVICE=pdfwrite' + #0);
  ArgV[2] := PAnsiChar('-sOUTPUTFILE="' + JvFilenameEdit3.Text + '"' + #0);
  ArgV[3] := PAnsiChar('-dBATCH ' + '"' + JvFilenameEdit1.Text + '"' + ' ' + '"'
    + JvFilenameEdit2.Text + '"' + #0);

  code := gsapi_init_with_args(instance, Length(ArgV), @ArgV);
  if code < 0 then
    raise Exception.Create('ERROR: init_args: ' + IntToStr(code));

  gsapi_exit(instance);
  showmessage('fertig!');

end;
Ich verzweifle
Jochen
Nicht alles dem System anlasten, meistens sitzt der Fehler vor den Tasten !!!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz