¿Cómo convierto un documento de Word a PDF?

10

Ayuda chicos, mi tarea dice que debe estar en formato .pdf pero lo hice en Word. Estoy realmente atascado.

¿Cómo tomo un documento de Word en formato .docx y hago un .pdf que contiene todo el texto? Puntos de bonificación si también contiene todas las imágenes y cualquier formato, pero el texto es un mínimo. El archivo de muestra que usaré será este , aunque su solución debería ser genérica.

No quiero que pase por pasos de procesamiento innecesarios: simplemente codificar y luego decodificar el documento en base64 o lo que no esté en el espíritu de la pregunta, aunque el uso creativo de cowsayserá una excepción a esto. Se aplican las normas estándar de arrastre de código: la solución debe ser técnicamente correcta, todos los pasos deben ser técnicamente necesarios, el resultado debe ser técnicamente inútil. Esto debería ser más un programa de estilo "Rube Goldberg", que una competencia de ofuscación y obtusness.

La mayoría de los votos a favor de respuestas diferentes a las mías para el 5/1/14 gana.

Nota: Esta es una pregunta de . Por favor, no tome en serio la pregunta y / o las respuestas. Más información aquí .

ymbirtt
fuente
2
Esta asignación es muy compleja, pero estoy seguro de que el único enfoque adecuado sería usar un controlador de vista previa en una aplicación WPF, tomar una captura de pantalla de eso, guardar el mapa de bits como un GIF e imprimirlo como un PDF
Mathias R Jessen
El trolling de códigos está en proceso de eliminación, según la postura oficial. Esta publicación tiene una buena cantidad de votos sobre la pregunta y las respuestas, y aunque recibió más del 50% de votos de "eliminación" en la encuesta , es una de las publicaciones más bien especificadas [de trolling de códigos]. Por lo tanto, lo estoy bloqueando por importancia histórica.
Pomo de la puerta

Respuestas:

24

Ok, esto es un poco complicado, pero no está mal porque el pdf usa el mismo modelo gráfico que PostScript, lo que significa que una vez que tienes PostScript, es bastante trivial convertirlo a PDF y PostScript es la forma de manejar impresoras, todo lo que tienes que hacer es imprimir obtener postscript.

Ahora podría escribir un programa para convertir postscript a pdf, pero no es necesario que haya ghostscript, que fue escrito para Unix y funciona bien en Linux (no hay grandes diferencias para este proyecto). Desafortunadamente, la palabra solo se ejecuta en Windows, por lo que necesita dos computadoras, y para convencer a Windows de que la computadora Linux es una impresora, necesita un cable serie y un módem nulo. Si su (s) computadora (s) no tiene puertos serie, los convertidores usb a rs232 funcionan bien (recomiendo los que tengan un chipset fttdi). Ahora conecte las dos computadoras con el cable serial y el módem nulo y verifique que pueda comunicarse (asegúrese de que sus parámetros coincidan).

Ok, ahora que los tiene hablando, es hora de convencer a su caja de Windows de que la caja de Linux es una impresora: simplemente instale el controlador de impresora para el Applewriter II y diga que está conectado al puerto serie. Ahora, cuando imprimes, envías postscript al cuadro de Linux. El siguiente paso es guardarlo como un archivo.

Ahora vaya a su caja de linux y use este comando simple:

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

y tan simple como que haya terminado.


En realidad, esto puede hacerse funcionar (si envía una señal a dd cuando haya terminado), pero hay formas más fáciles de imprimir en un archivo y ejecutar gostscript en su cuadro de Windows, y aunque fttdi hace usb de buena calidad para convertidores en serie, es Un verdadero dolor para instalar los controladores.

hildred
fuente
2
Aunque probar esto está más allá de mis posibilidades, un poco de lectura de fondo sugiere que esto es válido y horrible. ¡Buen trabajo!
ymbirtt
66
Pensé en incluir instrucciones para hacer un módem nulo, por lo que se necesitaba un soldador.
hildred
13

En la actualidad, muchas impresoras son impresoras / escáneres combinados con alimentadores automáticos de documentos. Será sencillo

  1. Imprime el documento.
  2. Escanee la impresión.
emory
fuente
3
Así es como la gente lo hace ... Desearía estar bromeando. Y, esto es código trolling , ¿dónde está tu código?
derobert
9

PHP

Este código produce archivos PDF que deberían imprimirse perfectamente en su máquina de cinta de teletipo . Si desea ver los archivos PDF en su monitor, es posible que tenga que ampliar un poco.

Documento fuente de ejemplo documento de Word

Salida PDF (vista en el navegador) vista parcial del documento PDF

Código fuente

<?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()función se basa en un archivo PDF mínimo creado por Brendan Zagaeski.

r3mainer
fuente
¿Dónde está el troll?
Nacib Neme
5

En sistemas UNIX:

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

En Windows:

ren document.docx document.pdf
s3lph
fuente
3
nota: no funcionará, por supuesto ... Lo encontré divertido
s3lph
4

Creo que este script de shell es un método simple e intuitivo para resolver el problema. ¿Hay una mejor manera?

( 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
ymbirtt
fuente
1
"¿por qué esto cambia a disquete?";)
hildred
0

Lote de Windows

La forma más fácil de convertir un archivo: ¡cambie la extensión!

:: convert.cmd

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

Spoiler / troll: (pase el cursor por debajo para ver)

Vaya ... ¿olvidé que podrías convertir incluso un archivo con una .exeextensión? Demasiado para eso ...;) Además, soy demasiado vago para codificar a los guardias.
Y pensé que agregaría un pequeño troll extra en esto: ni siquiera toca los datos dentro ... (no lo analiza para convertirlo en un PDF válido)

Isiah Meadows
fuente