Как мне преобразовать текстовый документ в PDF?


10

Помогите, ребята, мое задание говорит, что оно должно быть в формате .pdf, но я сделал это в Word. Я действительно застрял.

Как взять текстовый документ в формате .docx и создать файл .pdf, содержащий весь текст из него? Бонусные баллы, если он также содержит все изображения и любое форматирование, но текст является минимальным. Пример файла я буду использовать будет это один , хотя ваше решение должно быть универсальным.

Я не хочу, чтобы он проходил через любые ненужные этапы обработки - просто кодирование, а затем декодирование документа в base64 или что-то, что не соответствует духу вопроса, хотя творческое использование cowsayбудет исключением из этого. Применяются стандартные правила троллинга кода - решение должно быть технически правильным, все шаги должны быть технически необходимыми, результат должен быть технически бесполезным. Это должно быть больше в стиле программы «Рубе Голдберг», чем соревнование по запутанности и тупости.

Большинство голосов против ответов, отличных от моих, к 1.05.14 выигрывает.

Примечание: это вопрос . Пожалуйста, не воспринимайте вопрос и / или ответы всерьез. Больше информации здесь .


2
Это назначение очень сложное, но я уверен, что единственным правильным подходом будет использование обработчика предварительного просмотра в приложении WPF, сделать его снимок экрана, сохранить растровое изображение в формате GIF и затем распечатать его в формате PDF
Mathias R Йессен

Код-троллинг находится в процессе удаления согласно официальной позиции. Эта запись имеет достаточное количество голосов по вопросу и ответам, и хотя она набрала более 50% «удаленных» голосов в опросе , это одна из наиболее хорошо определенных [код-троллинг] публикаций. Поэтому я фиксирую это на историческом значении.
Дверная ручка

Ответы:


24

Хорошо, это немного сложно, но не так уж и плохо, потому что pdf использует ту же графическую модель, что и postscript, что означает, что если у вас есть postscript, довольно просто преобразовать его в pdf, а postscript - это способ управлять принтерами, и все, что вам нужно сделать, это напечатать получить постскриптум

Теперь вы можете написать программу для конвертирования postscript в pdf, но нам не нужен ghostscript, который был написан для Unix и прекрасно работает на Linux (никаких существенных отличий для этого проекта). К сожалению, слово работает только на Windows, поэтому вам нужно два компьютера, и чтобы убедить Windows, что компьютер Linux является принтером, вам нужен последовательный кабель и нуль-модем. Если на вашем компьютере нет последовательных портов, конвертеры usb в rs232 работают нормально (я рекомендую использовать чипсет fttdi). Теперь подключите два компьютера с помощью последовательного кабеля и нуль-модема и убедитесь, что вы можете общаться (убедитесь, что ваши параметры совпадают).

Хорошо, теперь, когда они говорят, пришло время убедить вашу коробку Windows в том, что коробка Linux - это принтер: просто установите драйвер принтера для applewriter II и скажите, что он подключен к последовательному порту. Теперь при печати вы отправляете postscript в окно linux. Следующий шаг - сохранить его в виде файла.

Теперь переместитесь в окно Linux и используйте эту простую команду:

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-файлы на вашем мониторе, возможно, вам придется немного увеличить изображение.

Пример исходного документа документ Word

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- файле, сделанном Бренданом Загаески.


Где тролль?
Нациб Неме

5

В системах UNIX:

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

В Windows:

ren document.docx document.pdf

3
примечание: не сработает конечно ... Просто нашел это смешным
s3lph

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.