2011-10-12, 10:16
  #1
Medlem
sebnies avatar
Någon som vet något program för ubuntu (skall inte kräva X, kommer köras från terminalen) som printar en valfri fil i dess korrekta format till en skrivare, och programmet ska stödja så MÅNGA dokumentformat som möjligt.
(dvs: odf, doc, docx, xls, xlsx, ppt, pptx, txt, png, jpg, gif, txt, htm, rtf, pdf, postscript, tiff, svg, eps) osv osv, helst mer.

Dvs ungefär såhär:

program fil.docx - ska printa filen som om man gick in i word och printade den.
program fil.pdf - ska printa filen som om man printade en PDF-fil
program fil.png - printar bilden
program fil.htm - printar webbsidan, dvs INTE html-koden
program fil.txt - printar texten som den är
program fil.rtf - printar dokumentet
program fil.ppt - printar presentationen

du förstår hur jag menar. Men ändelsen skall inte vara ett krav utan den ska känna av på innehållet vad det är för något.

Anledningen är att jag håller på att bygga en "uppladdningsruta" på en admin-webbsida som är kopplad till min printer, ungefär så som de har för gäster på högskolor, för att de ska slippa installera drivrutiner i sina privata datorer.

Lite ungefär som detta:
http://www.papercut.com/images/scree...int-upload.png
http://www.papercut.com/tour/web-print/

Någon som vet något? Har försökt med LibreOffice 3.3 330m19(Build:401) headless:

/usr/lib/libreoffice/program/soffice.bin -headless -invisible -norestore -nolockcheck -p /tmp/FILNAMN_PÅ_UPPLADDAD_FIL

men det fungerar inte för bilder, textfiler och PDFer för att ta ett exempel.
Behöver något som fungerar för absolut allt, för webbservern vet inte vad den får för typ av fil från klienten, därav måste den kunna känna av på innehållet vad det är för typ av fil.
__________________
Senast redigerad av sebnie 2011-10-12 kl. 10:20.
Citera
2011-10-12, 11:55
  #2
Medlem
Du torde ju kunna använda dig av kommandot "file" för att ta reda på vad det är för slags fil och sedan använda olika program för att konvertera filen till postscript och sedan skriva ut med "lp". Tveksamt om det finns ett enda program som klarar av allting.
Citera
2011-10-12, 18:52
  #3
Medlem
sebnies avatar
Perfekt!
Bra idé. Hade ingen aning om file-kommandot, blev helt utmärkt nu när jag kan använda olika program.

Så här kör jag med nu:

open(PIPE, "/usr/bin/file /tmp/$randomtext --mime-type -b|");
$data = <PIPE>;
close(PIPE);

Vips så har jag filens MIME-typ i $data, och kan exekvera olika program baserat på vad det är för fil.
Citera
2011-10-12, 18:56
  #4
Medlem
Coolers =)
Citera
2011-10-13, 04:33
  #5
Medlem
För att skriva ut text (.txt) dokument är ju enscript mycket anpassningsbart
Citera
2011-10-13, 10:38
  #6
Medlem
sebnies avatar
För txt använder jag libreoffice. Räcker för mitt ändamål, texten kommer ut som den ska.

Så här ser scriptet ut just nu, den delen som skriver ut.
Den tar just nu följande format:

jpg, png, svg, gif, txt, ods, stc, xls, xlsx, odp, pot, pps, ppt, sti, sxi, otg, sxd, odf, doc, odt, rtf, sxw, ots, sxc, xlt, odg, otp, potm, ppsx, pptx, std, sxm, docx, ott, stw, pdf, htm, tif, bmp.

Återstår att lägga till mht (message/rfc822 innehållande en hel hemsida), eml (antingen en message/rfc822 eller en multipart/mixed), samt ps (application/postscript).

Det uppladdade dokumentet ligger sparat i /tmp/$randomtext där $randomtext är en slumpmässig sträng på 20 bokstäver:

Kod:
open(PIPE, "/usr/bin/file /tmp/$randomtext --mime-type -b|");
$data = <PIPE>;
close(PIPE);

$data =~ s/\r//sgi;
$data =~ s/\t//sgi;
$data =~ s/\n//sgi;

($maintype, $subtype) = split("/", lc($data));

$res = $data;

if ($maintype eq "image") {
$image = Image::Magick->new;
$image->Read("/tmp/$randomtext");

open(TMP, ">/tmp/$randomtext");
flock(TMP,2);
$image->Write(file=>\*TMP, filename=>"/tmp/$randomtext.png");
close(TMP);
$image = undef;
system("lpr /tmp/$randomtext");
$res = "Image File";
}


if ($maintype eq "application") {
if ($subtype eq "pdf") {
system("lpr /tmp/$randomtext");
$res = "PDF File";
}
else
{
system("/usr/lib/libreoffice/program/soffice.bin -headless -invisible -norestore -nolockcheck -p /tmp/$randomtext");
$res = "Document file";
}
}

if ($maintype eq "text") {
system("/usr/lib/libreoffice/program/soffice.bin -headless -invisible -norestore -nolockcheck -p /tmp/$randomtext");
$res = "Text file";
}

if ($maintype eq "message") {
system("muttprint -f /tmp/$randomfile -e local -P A4 -nod");
$res = "Single Email file";
}
if ($maintype eq "multipart") {
system("muttprint -f /tmp/$randomfile -e local -P A4 -nod");
$res = "Multiple Email file";
}



Dock lyckas jag inte med muttprint. Skrev ut ett HTML-email på 1 sida (.eml-fil), blev 60 sidor med HTML-kod på papper.

Någon som vet ett program för kommandoraden för att skriva ut filer med mime-typen message/* och multipart/*? Eller som kan omvandla dem till pdf/ps med all grafik och liknande intakt?
__________________
Senast redigerad av sebnie 2011-10-13 kl. 10:40.
Citera
2011-10-13, 22:56
  #7
Medlem
Men skicka PostScript direkt till CUPS istället! Då kan man skriva ut på riktigt, utan att man behöver någon drivrutin.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in