Подскажите, пожалуйста, как лучше решить следующую задачу.
Пользователь на форме приложения добавляет некоторые файлы (в основном форматов doc, docx, odt, но бывают и другие jpg, tiff, png). Необходимо, чтобы они конвертировались и перезаписывались в процессе загрузки в формат pdf. То есть, при добавлении в окне выбора файлов, пользователь, например, выбирает файл -- МойФайл.doc. Нажимает кнопку Выбрать. И файл попадает в конфигурацию уже в виде -- МойФайл.pdf.
Мое понимание идеи решения такое:
1) Для преобразования файлов word можно использовать COMОбъект Word.Application. Он вроде бы позволяет сохранять в pdf сразу, так как сохранение в pdf -- это типовая возможность MS Word.
2) Что делать с другими форматами, пока не очень понятно. Скорее всего нужно будет устанавливать конвертор toPDF и писать функцию fooConvertToPDF(myFile), где задействовать конвертер.
устанавливать какой-нибудь pdf принтер типа biopdf подключаться к нему как к ком-обьекту и производить конвертацию
проблема возникнет со временем формирования т.е. юзеры со временем начнут жаловаться что происходят тормоза при выборе файлов. думаю затея не очень удачная то чтобы делать это на лету, лучше ночью потом уже регламентным заданием конвертировать все добавленные за день файлы
1) Для преобразования файлов word можно использовать COMОбъект Word.Application. Он вроде бы позволяет сохранять в pdf сразу, так как сохранение в pdf -- это типовая возможность MS Word.
У меня MS Office 2007. Вордовский файл -- это ФайлКлиента.ПолноеИмя (размер 40Кб).
Word = Новый COMОбъект("Word.Application");
Word.Visible = 0;
Word.Application.DisplayAlerts = False;
Документ = Word.Documents.Open(ФайлКлиента.ПолноеИмя);
Документ.Activate();
Word.Application.DisplayAlerts = -1;
ФайлДляЗаписи = ФайлКлиента.Путь + "testPDF.pdf";
Word.ActiveDocument.SaveAs(ФайлДляЗаписи);
Word.Application.Quit();
Word = NULL;
Показать
Файл PDF создается (появляется) по указанному пути. Не пустой, с размером 39Кб (что-то не то, размер pdf вроде бы должен быть больше исходника). Захожу в директорию с файлом. При попытке открыть файл выскакивает системная ошибка. См. скрин.
Конвертирование текстового документа с картинками в PDF. В этом случае текст форматируется с учетом заданных габаритов листа. Шрифт не искажается.
Конвертирование картинки в PDF. В этом случае сначала будет создан текстовый документ нужного размера, а потом в его центр будет вклеена картинка.
Программа не может объединять несколько файлов в один. Если у вас много файлов, то, сначала вам придется сгенерировать из каждого отдельный PDF файл, затем склеить их одной из множества утилит, которые это могут делать.
Выгодные отличия от аналогов:
Позволяет задавать размер конечного документа.
Позволяет задавать отступ от краев.
Конвертирует также и картинки, вставляя их в листы документа.
Требования:
На сервере у вас должны стоять:
JRE (Java).
OpenOffice 3.x.
Как использовать:
В скачанном архиве есть как исходники проекта в NetBeans, так и готовый .jar файл, который можно запускать из командной строки.
Наберите в командной строке:
java -jar DocumentConverter
и получите список параметров, которые нужно задавать.
Все параметры обязательны.
Учтите, что пути к файлам задаются с префиксом: file:///
В корне архива есть файл doit.bat, в котором прописан пример вызова утилиты.
в итоге получилось или нет?
если на сервере то нужно файл передавать с клиента на сервер там конвертировать, сохранять в базу (желательно в тома сохранения файлов) и потом возвращать на форму уже ссылку на файл.
(10) Пока экспериментирую на файловой базе. Установил JRE и OpenOffice. Однако DocumentConverter не пашет. Там по-видимому нужно какое-то шаманство. После нескольких часов безуспешных попыток запустить DocumentConverter из командной строки и батника, решил поискать другие утилиты. Или буду писать свой скрипт.
Супер! Заработало, если поставить обычную JRE. То есть, даже если система 64-bit, то ставить нужно НЕ 64-bit JRE.
Место установки должно быть, что-то вроде -- C:\Program Files (x86)\Java\jre1.8.0_281\bin\
После установки, нужно прописать путь в переменных окружения.
Далее проверить командой:
>where java
Нужно, чтобы в ответ была одна строка. В моем случае C:\Program Files (x86)\Java\jre1.8.0_281\bin\java.exe
Если система, кроме этой директории, обнаруживает другие директории с установленным java.exe, то нужно удалить эти директории. Чтобы в итоге команда >where java выводила ровно одну строку (один путь) с java.exe.