Come posso convertire un documento Word in un pdf?


10

Aiuta ragazzi, il mio compito dice che deve essere in formato .pdf ma l'ho fatto in Word. Sono davvero bloccato.

Come posso prendere un documento Word in formato .docx e creare un .pdf che contenga tutto il testo da esso? Punti bonus se contiene anche tutte le immagini e qualsiasi formattazione, ma il testo è un minimo indispensabile. Il file di esempio che userò sarà questo , anche se la tua soluzione dovrebbe essere generica.

Non voglio che passi attraverso inutili fasi di elaborazione - semplicemente codificare e poi decodificare il documento in base64 o qualunque cosa non sia nello spirito della domanda, sebbene l'uso creativo di cowsaysarà un'eccezione a questo. Si applicano le regole standard per la pesca a traina del codice: la soluzione dovrebbe essere tecnicamente corretta, tutti i passaggi dovrebbero essere tecnicamente necessari, il risultato dovrebbe essere tecnicamente inutile. Questo dovrebbe essere più un programma in stile "Rube Goldberg", che una competizione di offuscamento e ottusità.

La maggior parte dei voti positivi su risposte diverse dalla mia entro il 5/1/14 vince.

Nota: questa è una domanda di . Si prega di non prendere sul serio la domanda e / o le risposte. Maggiori informazioni qui .


2
Questo compito è molto complesso, ma sono certo che l'unico approccio corretto sarebbe usare un gestore di anteprima in un'applicazione WPF, fare uno screenshot, salvare la bitmap come GIF e quindi stamparla come PDF
Mathias R Jessen,

Il troll del codice è in procinto di essere rimosso, secondo la posizione ufficiale. Questo post ha un discreto numero di voti sulla domanda e le risposte e, sebbene abbia ricevuto oltre il 50% dei voti "elimina" nel sondaggio , è uno dei post più ben definiti [code-trolling]. Pertanto, lo sto bloccando per significato storico.
Maniglia della porta

Risposte:


24

Ok questo è un po 'complicato ma non troppo male perché pdf usa lo stesso modello grafico di postscript, il che significa che una volta che hai Postscript è abbastanza banale convertirlo in pdf e Postscript è un modo per guidare le stampanti, tutto ciò che devi fare è stampare su ottieni Postscript.

Ora potresti scrivere un programma per convertire postscript in pdf, ma non è necessario che ci sia ghostscript, che è stato scritto per unix e funziona perfettamente su Linux (nessuna differenza sostanziale per questo progetto). Sfortunatamente Word funziona solo su Windows, quindi hai bisogno di due computer e per convincere Windows che il computer Linux è una stampante hai bisogno di un cavo seriale e un modem null. Se i tuoi computer non hanno porte seriali, i convertitori da usb a rs232 funzionano bene (consiglio quelli con un chipset fttdi). Ora collegare i due computer con il cavo seriale e il modem null e verificare che sia possibile comunicare (assicurarsi che i parametri corrispondano).

Ok ora che ne hai parlato, è il momento di convincere il tuo box di Windows che il box di Linux è una stampante: basta installare il driver della stampante per il applewriter II e dire che è collegato alla porta seriale. Ora, quando stampi, invii postscript alla casella di linux. il prossimo passo è salvarlo come file.

Ora passa al tuo Linux box e usa questo semplice comando:

dd -if=/dev/ttyS0 -of=- -bs=1 | ps2pdf - - | sed -e '' >tmpfile && mv tmpfile file.pdf

e semplice come quello che hai fatto.


Questo in realtà può essere fatto funzionare (se si invia un segnale a dd al termine), ma ci sono modi più semplici come stampare su un file ed eseguire gostscript sulla finestra di Windows, e sebbene fttdi faccia convertitori da USB a seriale di buona qualità è un dolore reale per installare i driver.


2
Anche se testarlo è al di là dei miei mezzi, un po 'di lettura di fondo suggerisce che questo è sia valido che terribile. Buon lavoro!
ymbirtt

6
Ho pensato di includere le istruzioni per creare un modem null, proprio per questo era necessario un saldatore.
hildred

13

Oggigiorno molte stampanti sono una combinazione stampante / scanner con alimentatori automatici di documenti. Sarà semplice

  1. Stampa il documento
  2. Scansiona la stampa.

3
Questo è come la gente lo fa davvero ... Vorrei scherzare. E questo è il troll del codice , dov'è il tuo codice?
derobert,

9

PHP

Questo codice produce file PDF che devono essere stampati perfettamente sul tuo dispositivo ticker . Se si desidera visualizzare i file PDF sul monitor, potrebbe essere necessario ingrandire leggermente.

Esempio di documento di origine documento verbale

Output PDF (visualizzato nel browser) vista parziale del documento PDF

Codice sorgente

<?php

header("Content-Type: application/pdf");

$s = docx2txt("word-file.docx"); // <-- Insert filename here!
echo txt2pdf($s);


function docx2txt($filename) {
  if (!($z=zip_open($filename))) return false; // Can't open file
  while ($r=zip_read($z)) {
    if (zip_entry_name($r)!="word/document.xml") continue;
    if (!zip_entry_open($z,$r)) return false; // Can't open XML data
    for ($s="";;) {
      $c=zip_entry_read($r);
      if ($c===false || $c=="") break;
      $s.=$c;
    }
    return trim(preg_replace('/\s+/',' ',preg_replace('/<[^>]*>/','',$s)));
  }
  return false; // Can't find XML data
}


function txt2pdf($text) {
  $width="".ceil(strlen($text)*7.2);
  $text=str_replace('(','\050',str_replace(')','\051',$text));
  $length=strlen($text);
  $wlen=strlen($width);
  $len4="".(44+$length);
  $xr3=sprintf("%010d",174+$wlen);
  $xr4=sprintf("%010d",449+$wlen);
  $xrstart=544+$wlen+strlen($len4)+$length;
  return "%PDF-1.1\n%¥±ë\n\n1 0 obj\n  << /Type /Catalog\n     /Pages 2 0 R\n" .
         "  >>\nendobj\n\n2 0 obj\n  << /Type /Pages\n     /Kids [3 0 R]\n   " .
         "  /Count 1\n     /MediaBox [0 0 $width 14]\n  >>\nendobj\n\n3 0 obj" .
         "\n  <<  /Type /Page\n      /Parent 2 0 R\n      /Resources\n       " .
         "<< /Font\n           << /F1\n               << /Type /Font\n       " .
         "           /Subtype /Type1\n                  /BaseFont /Courier\n " .
         "              >>\n           >>\n       >>\n      /Contents 4 0 R\n" .
         "  >>\nendobj\n\n4 0 obj\n  << /Length $len4 >>\nstream\n  BT\n    /" .
         "F1 12 Tf\n    0 3 Td\n    ($text) Tj\n  ET\nendstream\nendobj\n\nxr" .
         "ef\n0 5\n0000000000 65535 f \n0000000018 00000 n \n0000000077 00000" .
         " n \n$xr3 00000 n \n$xr4 00000 n \ntrailer\n  <<  /Root 1 0 R\n    " .
         "  /Size 5\n  >>\nstartxref\n$xrstart\n%%EOF";
}

?>

Nota: la txt2pdf()funzione si basa su un file PDF minimo creato da Brendan Zagaeski.


Dov'è il troll?
Nacib Neme,

5

Sui sistemi UNIX:

mv document.docx document.pdf && cowsay "code-trolling is cool"

Su Windows:

ren document.docx document.pdf

3
nota: ovviamente non funzionerà ... L'ho trovato divertente
s3lph

4

Credo che questo script di shell sia un metodo semplice e intuitivo per risolvere il problema. Esiste un modo migliore?

( echo $'<svg>\n<text y="10">';
  unzip -p ./YOUR_FILENAME_HERE.docx word/document.xml |
  sed -e 's/<[^>]\{1,\}>//g; s/[^[:print:]]\{1,\}//g';
  echo $'\n</text>\n</svg>' ) |
inkscape -f /dev/fd/0 -D -A ./OUTPUT_FILENAME_HERE.pdf

1
"perché questo si scambia con floppy?";)
hildred il


0

Windows Batch

Il modo più semplice per convertire un file: cambia l'estensione!

:: convert.cmd

xcopy "%~dpnx0" "%~dpn0.pdf"

Spoiler / troll: (passa il mouse sotto per vedere)

Oops ... ho dimenticato che potresti convertire anche un file con .exeun'estensione? Tanto per quello ...;) Inoltre, sono troppo pigro per programmare le guardie.
E ho pensato di aggiungere un piccolo troll in questo: non tocca nemmeno i dati all'interno ... (non li analizza per renderlo un PDF valido)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.