Schrift
[thread]10651[/thread]

Druckdialog in MacOs X



<< >> 9 Einträge, 1 Seite
Spieler
 2007-10-24 17:54
#101278 #101278
User since
2007-09-24
70 Artikel
BenutzerIn
[default_avatar]
Hallo,

kennt jemand eine Möglichkeit unter MacOs X auf den Systemeigenen Druckdialog zuzugreifen.
Also so, wie ich unter Windows z.B. nach Ghostscript mit -sDEVICE=mswinpr2 pipen kann. (Ich muss Postscript Daten drucken).

Im Moment schicke ich die Daten nach lp - mit den entsprechenden Einschränkungen.

Grüße, Christoph
murphy
 2007-10-24 18:30
#101280 #101280
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Die einfachste Möglichkeit, die mir einfällt, wäre die Postscriptdaten in eine temporäre Datei zu speichern und dann ein
Code: (dl )
system('/usr/bin/open', '-a', 'Preview', $postscript_file_name);
auszuführen. Das druckt die Datei zwar nicht direkt aus, aber ein Druckvorschaufenster ist ja auch schon mal etwas.

Ansonsten müsstest Du wohl auf die Carbon- oder Cocoa-API zum Drucken zurückgreifen.
When C++ is your hammer, every problem looks like your thumb.
Ronnie
 2007-10-24 18:45
#101281 #101281
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
murphy+2007-10-24 16:30:34--
Ansonsten müsstest Du wohl auf die Carbon- oder Cocoa-API zum Drucken zurückgreifen.

Ich habe es nie benutzt, aber das es zum Thema passt: http://camelbones.sourceforge.net/
ptk
 2007-10-24 23:37
#101292 #101292
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
murphy+2007-10-24 16:30:34--
Die einfachste Möglichkeit, die mir einfällt, wäre die Postscriptdaten in eine temporäre Datei zu speichern und dann ein
Code: (dl )
system('/usr/bin/open', '-a', 'Preview', $postscript_file_name);
auszuführen. Das druckt die Datei zwar nicht direkt aus, aber ein Druckvorschaufenster ist ja auch schon mal etwas.
Blockiert dieser Befehl oder wird "open" im Hintergrund ausgeführt.

Und würde es dir ausmachen, die Druckfunktion von Tk::Pod auf MacOSX zu testen, sobald ich es implemtentiert habe?
Spieler
 2007-10-25 14:45
#101315 #101315
User since
2007-09-24
70 Artikel
BenutzerIn
[default_avatar]
murphy+2007-10-24 16:30:34--
Die einfachste Möglichkeit, die mir einfällt, wäre die Postscriptdaten in eine temporäre Datei zu speichern und dann ein
Code: (dl )
system('/usr/bin/open', '-a', 'Preview', $postscript_file_name);
auszuführen. Das druckt die Datei zwar nicht direkt aus, aber ein Druckvorschaufenster ist ja auch schon mal etwas.

Ansonsten müsstest Du wohl auf die Carbon- oder Cocoa-API zum Drucken zurückgreifen.


Hallo,

das funktioniert super! Vielen Dank! Ich hatte schon mit dem Gedanken gespielt lpstat auszuwerten und einen kleinen Tk - Dialog zu schreiben. Aber das geht mit 'Preview' so schnell und reibungslos - da mache ich mir keine Arbeit ;)

Christoph
murphy
 2007-10-25 16:52
#101327 #101327
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
ptk+2007-10-24 21:37:49--
[...]
Blockiert dieser Befehl oder wird "open" im Hintergrund ausgeführt.


Das Programm open sorgt lediglich dafür, dass die Application Launch Services die nötige Anwendung starten, falls sie noch nicht läuft, und dass die Anwendung ein Apple Event bekommt, welches ihr mitteilt, sie möge doch mal die Angegebene Datei (oder URL) öffnen. Danach beendet sich open wieder.

Es ist also etwas problematisch festzustellen, wann man eine temporäre Datei wieder löschen sollte. Daher ist es wahrscheinlich besser (und ich bin doof, weil ich nicht sofort daran gedacht habe) diese Aufgabe einfach open selbst zu überlassen -- denn das kann feststellen, wann die Anwendung ihr Open Event fertig bearbeitet hat -- und so etwas zu machen:
Code: (dl )
1
2
3
4
5
{
open my $pipe, '|-', '/usr/bin/open', '-a', 'Preview', '-f' or die "Unable to connecto to Preview: $!\n";
print $pipe '... some PDF, PS or other image data ...';
close $pipe or die "Error sending data to Preview: $!\n";
}


Man könnte, anstatt open zu starten wohl auch noch direkt mit dem CPAN:Mac::Carbon-Modul arbeiten und die Funktionalität nachbauen -- ob das allerdings eine bessere Lösung ist, sei dahingestellt.

Quote
Und würde es dir ausmachen, die Druckfunktion von Tk::Pod auf MacOSX zu testen, sobald ich es implemtentiert habe?


Ich habe auf meinem Rechner kein Perl/Tk installiert, weil es riesengroß ist, ich es noch nie gebraucht habe und es sich außerdem nicht in die native Mac-Oberfläche einfügt, sondern nur unter X11 läuft. Wenn Du mir aber alleinstehenden Druckcode gibst, kann ich den gerne testen.
When C++ is your hammer, every problem looks like your thumb.
ptk
 2007-10-25 23:17
#101354 #101354
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Hier ist es. Das Argument in der Zeile durch ein gültiges Pod bei dir ersetzen.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
main->_print_pod_unix("/usr/local/lib/perl5/5.8.8/pod/perl.pod");

sub _print_pod_unix {
my($w, $path) = @_;
if (is_in_path("pod2man") && is_in_path("groff")) {
my $pod2ps_pipe = "pod2man $path | groff -man -Tps";

if ($^O eq 'darwin') {
my $cmd = "$pod2ps_pipe | /usr/bin/open -a Preview -f";
system($cmd) == 0
or $w->_die_dialog("Error while executing <$cmd>. Status code is $?");
return 1;
}

# XXX maybe determine user's environment (GNOME vs. KDE vs. plain X11)?
my $gv = is_in_path("gv")
|| is_in_path("ghostview")
|| is_in_path("ggv") # newer versions seem to work
|| is_in_path("kghostview");
if ($gv) {
# $w->_need_File_Temp;
use File::Temp;

my($fh,$fname) = File::Temp::tempfile(SUFFIX => ".ps");
system("$pod2ps_pipe > $fname");
push @tempfiles, $fname;
my $pid = fork;
if (!defined $pid) {
die "Can't fork: $!";
}
if ($pid == 0) {
exec($gv, $fname);
warn "Exec of $gv $fname failed: $!";
CORE::exit(1);
}
push @gv_pids, $pid;
return 1;
}
}
return 0;
}

sub is_in_path {
my($prog) = @_;
require Config;
my $sep = $Config::Config{'path_sep'} || ':';
foreach (split(/$sep/o, $ENV{PATH})) {
if ($^O eq 'MSWin32') {
return "$_\\$prog"
if (-x "$_\\$prog.bat" ||
-x "$_\\$prog.com" ||
-x "$_\\$prog.exe" ||
-x "$_\\$prog.cmd"
);
} else {
return "$_/$prog" if (-x "$_/$prog" && !-d "$_/$prog");
}
}
undef;
}
murphy
 2007-10-26 15:30
#101395 #101395
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
@ptk: Dein Code funktioniert einwandfrei :-)
When C++ is your hammer, every problem looks like your thumb.
ptk
 2007-10-26 21:07
#101428 #101428
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Danke! Die neue Version von Tk::Pod ist draußen...
<< >> 9 Einträge, 1 Seite



View all threads created 2007-10-24 17:54.