Wie konvertiere ich ein Word-Dokument in ein PDF?


10

Helfen Sie Jungs, meine Aufgabe besagt, dass es im PDF-Format sein muss, aber ich habe es in Word gemacht. Ich stecke wirklich fest.

Wie nehme ich ein Word-Dokument im DOCX-Format und erstelle ein PDF, das den gesamten Text enthält? Bonuspunkte, wenn es auch alle Bilder und Formatierungen enthält, aber Text ein absolutes Minimum ist. Die Beispieldatei, die ich verwenden werde, ist diese , obwohl Ihre Lösung generisch sein sollte.

Ich möchte nicht, dass unnötige Verarbeitungsschritte durchlaufen werden - einfach das Dokument in base64 codieren und dann decodieren oder was auch immer nicht im Sinne der Frage ist, obwohl die kreative Verwendung von cowsayeine Ausnahme sein wird. Es gelten die Standardregeln für Code-Trolling - die Lösung sollte technisch korrekt sein, alle Schritte sollten technisch notwendig sein, das Ergebnis sollte technisch unbrauchbar sein. Dies sollte eher ein Programm im "Rube Goldberg" -Stil sein als ein Wettbewerb um Verschleierung und Stumpfheit.

Die meisten Upvotes zu anderen Antworten als meinen eigenen bis zum 01.05.14 gewinnen.

Hinweis: Dies ist eine Frage. Bitte nehmen Sie die Frage und / oder die Antworten nicht ernst. Weitere Informationen hier .


2
Diese Aufgabe ist sehr komplex, aber ich bin sicher, dass der einzig richtige Ansatz darin besteht, einen Vorschau-Handler in einer WPF-Anwendung zu verwenden, einen Screenshot davon zu machen, die Bitmap als GIF zu speichern und diese dann als PDF zu drucken
Mathias R. Jessen

Code-Trolling wird gemäß der offiziellen Haltung derzeit entfernt . Dieser Beitrag hat eine angemessene Anzahl von Stimmen zu der Frage und den Antworten, und obwohl er über 50% "Lösch" -Stimmen bei der Umfrage erhalten hat , ist er einer der besser spezifizierten [Code-Trolling] -Postings. Deshalb sperre ich es für historische Bedeutung.
Türknauf

Antworten:


24

Ok, das ist ein wenig knifflig, aber nicht schlecht, da PDF dasselbe Grafikmodell wie Postscript verwendet. Wenn Sie also Postscript haben, ist es ziemlich trivial, es in PDF zu konvertieren, und Postscript ist eine Möglichkeit, Drucker anzutreiben. Alles, was Sie tun müssen, ist Drucken Nachschrift bekommen.

Jetzt könnten Sie ein Programm schreiben, um Postscript in PDF zu konvertieren, aber wir müssen nicht, dass es Ghostscript gibt, das für Unix geschrieben wurde und unter Linux einwandfrei funktioniert (keine wesentlichen Unterschiede für dieses Projekt). Leider läuft Word nur unter Windows, sodass Sie zwei Computer benötigen. Um Windows davon zu überzeugen, dass der Linux-Computer ein Drucker ist, benötigen Sie ein serielles Kabel und ein Nullmodem. Wenn Ihre Computer keine seriellen Schnittstellen haben, funktionieren die USB-zu-RS232-Konverter einwandfrei (ich empfehle solche mit einem fttdi-Chipsatz). Schließen Sie nun die beiden Computer mit dem seriellen Kabel und dem Nullmodem an und überprüfen Sie, ob Sie kommunizieren können (stellen Sie sicher, dass Ihre Parameter übereinstimmen).

Ok, jetzt, wo Sie sie sprechen lassen, ist es Zeit, Ihre Windows-Box davon zu überzeugen, dass die Linux-Box ein Drucker ist: Installieren Sie einfach den Druckertreiber für den Applewriter II und sagen Sie, dass er an die serielle Schnittstelle angeschlossen ist. Wenn Sie jetzt drucken, senden Sie Postscript an die Linux-Box. Der nächste Schritt ist das Speichern als Datei.

Gehen Sie nun zu Ihrer Linux-Box und verwenden Sie diesen einfachen Befehl:

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

und so einfach ist das.


Dies kann tatsächlich funktionieren (wenn Sie ein Signal an dd senden, wenn Sie fertig sind), aber es gibt einfachere Möglichkeiten wie das Drucken in eine Datei und das Ausführen von Gostscript auf Ihrer Windows-Box, und obwohl fttdi qualitativ hochwertige USB-zu-Seriell-Konverter herstellt, ist dies der Fall ein königlicher Schmerz, um die Treiber zu installieren.


2
Obwohl das Testen meiner Möglichkeiten nicht möglich ist, deutet ein wenig Hintergrundwissen darauf hin, dass dies sowohl gültig als auch schrecklich ist. Gute Arbeit!
ymbirtt

6
Ich dachte darüber nach, Anweisungen für die Herstellung eines Nullmodems beizufügen, nur damit ein Lötkolben benötigt wurde.
Hildred

13

Heutzutage sind viele Drucker Kombinationsdrucker / Scanner mit automatischen Dokumenteneinzügen. Es wird einfach sein.

  1. Drucken Sie das Dokument.
  2. Scannen Sie den Ausdruck.

3
So machen es die Leute tatsächlich ... Ich wünschte, ich mache Witze. Und das ist Code-Trolling . Wo ist dein Code?
Derobert

9

PHP

Dieser Code erzeugt PDF-Dateien, die perfekt auf Ihrem Tickerbandgerät gedruckt werden sollten . Wenn Sie die PDF-Dateien auf Ihrem Monitor anzeigen möchten, müssen Sie möglicherweise etwas zoomen.

Beispielquelldokument Word-Datei

PDF-Ausgabe (im Browser angezeigt) Teilansicht des PDF-Dokuments

Quellcode

<?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";
}

?>

Hinweis: Die txt2pdf()Funktion basiert auf einer minimalen PDF- Datei von Brendan Zagaeski.


Wo ist der Troll?
Nacib Neme

5

Auf UNIX-Systemen:

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

Unter Windows:

ren document.docx document.pdf

3
Hinweis: funktioniert natürlich nicht ... fand es einfach lustig
s3lph

4

Ich glaube, dass dieses Shell-Skript eine einfache und intuitive Methode zur Lösung des Problems ist. Gibt es einen besseren Weg?

( 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
"Warum wechselt dieser zu Floppy?";)
hildred


0

Windows-Stapel

Der einfachste Weg, eine Datei zu konvertieren: Ändern Sie die Erweiterung!

:: convert.cmd

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

Spoiler / Troll: (schweben Sie unten, um zu sehen)

Hoppla ... habe ich vergessen, dass Sie sogar eine Datei mit einer .exeErweiterung konvertieren können ? Soviel dazu ...;) Außerdem bin ich zu faul, um die Wachen zu codieren.
Und ich dachte, ich würde einen kleinen zusätzlichen Troll hinzufügen: Es berührt nicht einmal die darin enthaltenen Daten ... (analysiert es nicht, um daraus ein gültiges PDF zu machen)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.