Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Inviare file pdf

  1. #1

    Inviare file pdf

    si può fare da uno script bash ?
    Vorrei, su richiesta del client, confezionare un file pdf da alcuni template tex, utilizzando pdflatex
    ho provato un banale
    Codice PHP:
    #!/bin/bash
    echo "content-type:text/php"
    echo
    ...
    # genera il file pdf attraverso pdflatex
    ...
    echo `
    cat mio_file.pdf
    ma il file pdf arriva mal formattato e non leggibile dai reader pdf

    grazie
    ciao

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Io vedo troppe variabili per poter azzardare una risposta.

    In quel flusso ci sono almeno due "scatole nere", che vanno analizzate separatamente.
    La prima e` # genera il file pdf attraverso pdflatex
    La seconda echo `cat mio_file.pdf`.

    Dovresti quindi salvare il file "mio_file.pdf" (cioe` non cancellarlo alla fine della transizione) e provare a visualizzarlo mediante vari applicativi (acroread, xpdf, ...), sia sotto windows che altri sistemi operativi.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Originariamente inviato da Mich_
    Io vedo troppe variabili per poter azzardare una risposta.

    In quel flusso ci sono almeno due "scatole nere", che vanno analizzate separatamente.
    La prima e` # genera il file pdf attraverso pdflatex
    ho scritto un piccolo programma che riceve la richiesta del catalogo dal client e genera un file .tex.
    Ho installato sul server tetex, che include pdflatex che partendo dal sorgente .tex genere il file .pdf (pronto per essere letto).
    Alla fine di questa operazione ho un file mio_file.pdf, che potrebbe risiederte in /tmp dato che assolta la sua funzione viene rimosso.
    La seconda echo `cat mio_file.pdf`.

    Dovresti quindi salvare il file "mio_file.pdf" (cioe` non cancellarlo alla fine della transizione) e provare a visualizzarlo mediante vari applicativi (acroread, xpdf, ...), sia sotto windows che altri sistemi operativi.
    a questo punto ho un file /tmp/mio_file.pdf e lo voglio consegnare al client.
    Lo script che ho utilizzato dà questa risposta
    http://www.mondobimbi.com/cgi-bin/test.pdf
    il file che dovrebbe visualizzare è questo
    http://www.mondobimbi.com/catalogo/bieco.pdf
    grazie
    ciao

  4. #4
    Io farei queste prove:

    chiamare lo script in modo corretto, ad esempio

    test.sh, quindi:
    http://www.mondobimbi.com/cgi-bin/test.sh
    e assicurarsi cha abbia chmod 755

    nell'header dello script porrei:
    #!/bin/bash
    echo "content-type: <header corretto per i files pdf>"
    echo

    e comunque accertati con un editor esadecimale che il file temporaneo inizi con "%PDF"
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  5. #5
    Originariamente inviato da shishii
    Io farei queste prove:

    chiamare lo script in modo corretto, ad esempio

    test.sh, quindi:
    http://www.mondobimbi.com/cgi-bin/test.sh
    e assicurarsi cha abbia chmod 755
    fatto. Lo avevo chiamato .pdf in modo che il browser chiamasse l'editore appropriato per il pdf.

    nell'header dello script porrei:
    #!/bin/bash
    echo "content-type: <header corretto per i files pdf>"
    echo
    quale'è header corretto per i files pdf (io pensavo text/pdf)
    e comunque accertati con un editor esadecimale che il file temporaneo inizi con "%PDF"
    si, il file è formattato correttamente, quello che apparentemente succede, ma non ne sono sicuro, e che i ritorno a capo vengono eliminati e quindi il reader pdf non riesce ad aprirlo.
    grazie
    ciao
    sergio

  6. #6
    il content-type dovrebbe essere application/pdf
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  7. #7
    Originariamente inviato da shishii
    il content-type dovrebbe essere application/pdf
    ok, grazie, adesso riesco a far riconoscere il mime anche utilizzando .sh.
    Però ancora non lo legge,
    ma pensi che si corretto inviare l'output di cat o c'è un altro sistema?
    ciao
    sergio

  8. #8
    in teoria cat dovrebbe essere giusto in quanto elabora anche files binari, ma non conosco abbastanza shell per dirti con sicurezza.

    Forse sarebbe meglio usare un linguaggio piu' adatto al web come Perl o PHP
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  9. #9
    purtroppo anch'io conosco poco la programmazione di shell.
    Dopo infiniti tentativi ho provato questo script che funziona
    Codice PHP:
    #
    !/bin/bash

    filename
    ="bieco.pdf"

    #calcola la lunghezza del file filename
    len=$(eval du $filename sed -"s/$filename//")
    len=$len"000"

    echo "Content-type: application/pdf"
    echo "Content-Length: $len"
    echo "Content-Disposition: inline; filename=bieco.pdf"
    echo
    cat $filename 
    probabilmente mancava la lunghezza del file.
    Comunque non sono sicuro che sia la soluzione ottimale, in particolare non funziona se il nome file ha caratteri "/" in quanto utilizzato dall'interprete sed.
    Non so se con perl il tutto sarebbe più semplice.
    Lo script puoi provarlo su
    http://www.mondobimbi.com/cgi-bin/test_pdf.bin
    se puoi dimmi che ne pensi.
    Il mio obiettivo è rispondere ad una richieste del client per un catalogo personalizzato processando la sua richiesta tramite uno script che genera un file .tex compilato poi con pdflatex per generare il file .pdf da consegnare al client come risposta.
    ciao
    sergio

  10. #10
    l'opzione -b di du ritorna le dimensioni del file in kbytes, lo script diventa quindi come sotto.
    sed elimina il nome file ritornato da du lasciando solo la dimensione in kbytes.
    Codice PHP:
    #!/bin/bash

    filename="bieco.pdf"

    #calcola la lunghezza del file filename
    len=$(eval du -b $filename sed -"s/$filename//")

    echo 
    "Content-type: application/pdf"
    echo "Content-Length: $len"
    echo "Content-Disposition: inline; filename=bieco.pdf"
    echo
    cat $filename 

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.