Як перетворити документ із слова у pdf?


10

Допоможіть хлопцям, які мені призначають, вони повинні бути у форматі .pdf, але я це зробив у Word. Я справді застряг.

Як мені взяти документ з документа у форматі .docx та зробити .pdf, який містить увесь текст із нього? Бонусні бали, якщо вони також містять усі зображення та будь-яке форматування, але текст - мінімальний мінімум. Зразок файлу, який я буду використовувати, буде цей , хоча ваше рішення має бути загальним.

Я не хочу, щоб він пройшов будь-які непотрібні кроки обробки - просто кодування, а потім розшифровка документа в base64 або все, що не відповідає духу питання, хоча творче використання cowsayбуде винятком з цього. Діють стандартні правила тролінгу коду - рішення повинно бути технічно правильним, всі кроки повинні бути технічно необхідними, результат повинен бути технічно марним. Це має бути скоріше програмою стилю "Рубе Гольдберг", ніж змаганням із затуманення та тупості.

Більшість призових відповідей, окрім моїх, до 5/1/14 перемог.

Примітка. Це запитання щодо . Будь ласка, не сприймайте питання та / або відповіді серйозно. Більше інформації тут .


2
Це завдання є складним, але я впевнений, що єдиним правильним підходом було б використовувати обробник попереднього перегляду в додатку WPF, зробити знімок екрана, зберегти растрову карту як GIF, а потім надрукувати це як PDF
Mathias R . Єссен

Процедура видалення коду перебуває в процесі видалення відповідно до офіційної позиції. Ця публікація має неабияку кількість голосів за запитання та відповіді, і хоча вона отримала понад 50% "видалити" голосів у опитуванні , це одна з більш чітко визначених [код-тролінг] публікацій. Тому я замикаю це на історичне значення.
Дверна ручка

Відповіді:


24

Гаразд, це трохи хитро, але не надто погано, тому що pdf використовує таку ж графічну модель, що і постскрипт, а це означає, що коли у вас є постскрипт, це досить тривіально конвертувати його в pdf, а післяскрипт - це спосіб запускати принтери, все, що вам потрібно зробити - це надрукувати отримати постскрипт.

Тепер ви можете написати програму для перетворення постскрипту в pdf, але нам не доведеться, що є ghostscript, який був написаний для unix і працює чудово на Linux (немає великих розбіжностей для цього проекту). На жаль, слово працює лише у Windows, тому вам потрібні два комп’ютери, і щоб переконати Windows, що комп'ютер Linux є принтером, вам потрібен послідовний кабель і нульовий модем. Якщо на вашому комп'ютері немає послідовних портів, перетворювачі usb в rs232 перетворювачі спрацьовують добре (я рекомендую такі з чіпсетом fttdi). Тепер підключіть два комп'ютери послідовним кабелем та нульовим модемом і переконайтеся, що ви можете спілкуватися (переконайтеся, що ваші параметри відповідають).

Ок, тепер, коли ви говорите, настав час переконати вікно Windows, що вікно Linux - це принтер: просто встановіть драйвер принтера для Applewriter II і скажіть, що він підключений до послідовного порту. Тепер, коли ви друкуєте, ви надсилаєте постскрипт до вікна linux. наступний крок - зберегти його як файл.

Тепер перейдіть до свого linux box і скористайтеся цією простою командою:

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

і так просто, як ви це зробили.


Насправді це може бути спрацьоване (якщо ви відправляєте сигнал до dd, коли закінчите), але є більш прості способи, такі як друк у файл та запуск gostscript на вікні Windows, і хоча fttdi робить хороший якість usb до послідовних перетворювачів, це королівський біль встановити драйвери.


2
Хоча тестування цього перевищує мої можливості, трохи фонове читання говорить про те, що це є дійсним і жахливим. Гарна робота!
ymbirtt

6
Я думав над тим, щоб включити вказівки щодо виготовлення нульового модему, саме для цього був потрібен паяльник.
hildred

13

У наші дні багато принтерів мають комбінований принтер / сканер з автоматичними пристроями подачі документів. Це буде просто.

  1. Роздрукуйте документ.
  2. Сканування роздруківки.

3
Ось як насправді це роблять люди ... Я б хотів, що я жартував. І це кодовий тролінг , де ваш код?
дероберт

9

PHP

Цей код створює PDF-файли, які повинні ідеально роздруковуватись на вашій машині тикерної стрічки . Якщо ви хочете переглянути PDF-файли на моніторі, можливо, вам доведеться трохи збільшити масштаб.

Приклад вихідного документа слово документ

Виведення PDF (переглядається в браузері) частковий перегляд PDF-документа

Вихідний код

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

?>

Примітка. txt2pdf()Функція заснована на мінімальному PDF- файлі, зробленому Бренданом Загаєскі.


Де троль?
Nacib Neme

5

У системах UNIX:

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

У Windows:

ren document.docx document.pdf

3
зауважте: звичайно не буде працювати ... Щойно
здалося

4

Я вважаю, що цей сценарій оболонки є простим та інтуїтивним методом вирішення проблеми. Чи є кращий спосіб?

( 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
"навіщо цей своп на дискету?";)
hildred


0

Пакет Windows

Найпростіший спосіб конвертувати файл: змінити розширення!

:: convert.cmd

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

Спойлер / троль: (наведіть вказівник нижче, щоб побачити)

На жаль, я забув, що ви можете конвертувати навіть файл із .exeрозширенням? Стільки за це ...;) Крім того, я лінивий кодувати охоронців.
І я подумав, що я додам трохи зайвого троля в це: він навіть не торкається даних всередині ... (не аналізує їх, щоб зробити його дійсним PDF)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.