Программа сохранения в PDF

Автор Andreych, 29.09.18, 19:58:17

« предыдущая - следующая »

0 Пользователей и 1 гость просматривают эту тему.

Andreych

Представляю маленькую программу сохранения группы чертежей в PDF. Может кому-то пригодится.
Я, бывало, пользовался для этого "библиотекой пакетного сохранения файлов КОМПАС-3D в различные форматы" от Sabahs.
Но мне из всего многообразия функций надо было лишь сохранять в PDF, максимально просто.

В моей программе для конвертации в PDF нужно мышкой перетащить файлы cdw, spw, frw в окно программы. Другие файлы игнорируются. Также программа принимает имена файлов как параметры командной строки. Можно, например, в Total Commander добавить программу на панель инструментов, и тогда при нажатии кнопки все выделенные в данный момент файлы сохранятся в PDF. Можно выделить файлы сразу во всех вложенных папках средствами Total Commander.
Файлы PDF сохраняются рядом с исходным файлом, уже существующие перезаписываются. Запросов на подтверждение перезаписи и выбора пути сохранения нет.

Вират Лакх

0) Подписываюсь на тему. Спасибо. Если бы программа умела еще объединять полученные pdf, было бы зашибись ) Но для этого какие-то библиотеки нужны...
1) Хотелось бы иметь такой выбор: а) рядом с файлами-документами как сейчас или б) рядом с программой пересохранялкой (тоже можно как параметр "-n" указать, чтобы в окошке не делать).
2) Что-то не получилось как параметр файл указать. Пишет, что сохранено, но файл pdf не появляется. Через драг'н'дроп работает. Файловый менеджер - Double Commander. При закрытии компаса он сообщает: Документ не найден или неверная структура файла.
3) Опять же инвизибл использовать по выбору в настройках? Или через запуск в параметрах указывать типа "-i".
4) При закрытии программы нет возможности писать "Закрытие компаса"?
5) При запуске с параметром а-ля "-e" предлагаю после первой обработки автозакрытие программы.

Andreych

Вират Лакх, неплохие идеи.
0) можно будет попробовать
1) сделал параметр "-n" для сохранения в папке прогарммы
2) наверное в Double Commander так же, как и в Total Commander, надо у кнопки указать параметры %P%S, чтобы отправлялись имена всех выделенных файлов. А когда именно возникают ошибки - призакрытии Компаса после закрытия программы, перед закрытием? Или это только при запуске через Double Commander?
3) честно говоря, я не очень понимаю, что такое Kompas Invisible. Никогда его не использовал. И так работает :)
4) ок, Закрытие Компаса теперь пишет, но видно недолго, т.к. быстро закрывается программа.
5) сделал параметр "-e" для автозакрытия программы после конвертирования.
6) Ну и заодно добавил меню (правая кнопка мыши) с этими 2 опцииями: сохранение в папку программы и автозакрытие.

kastus

Программа учитывает настроенные толщины линий в Компасе (при печати)? Я понял - да. И это - ОЧЕНЬ хорошо!
Ещё бы добавить текстовые документы...

Andreych

Вот с добавлением текстовых документов.

Andreych

А вот вариант с опцией объединения файлов PDF в один. Это в 3 раза увеличило размер файла exe :)
Ключ -m или соотв. галочка в меню. Объединенный файл сохраняется как "имя папки"+"_merged.pdf".
Если выбраны файлы одновременно из разных папок, то объединенный файл будет лежать в последней по списку папке.
Ну или включив опцию "-n" - будет лежать в папке с программой.

Вират Лакх

0) По объединению логика нормально построена. Но смущает только выбор или настройки выбранной для этого библиотеки. Размер суммарного файла получается больше суммы его составляющих. Этим грешат многие объединялки. У консольной версии pdfsam 2.4.3e из версии 2.2.4 обработчик некто iText 2.1.7 by 1T3XT. Вот он объединяет так, что итоговый весит даже меньше суммы отдельных файлов. Можно как-то его применить?
2) Я его в панель инструментов не добавлял, а просто в командной строке пишу: Kompas2PDF.exe 123.cdw
Результата нет, ошибка сразу не появляется, а только при закрытии компаса выдается сообщение.
3) В программе от Sabahs используется инвизибл для версий компаса до v17 включительно вроде. Кажись, при его применении быстрее будет запуск и закрытие компаса, плюс после запуска компаса в скрытом виде полноэкранность у него слетает. И вообще, разделение обязанностей всегда лучше. Можно его вызывать через указание параметра, т.е. на усмотрение пользователя.
4) У кого как по длительности ) Теперь всем будет понятно, почему не исчезает окно программы сразу.
7) Предлагаю: если в списке файлов на конвертацию одинаковые имена, но разные расширения, то переименовывать, а не перезаписывать поверх. Типа есть 123.cdw и 123.spw. Результат: 123.cdw.pdf и 123.spw.pdf
8) Предлагаю научить прогу распознавать брошенный в нее каталог (в котором могут быть подкаталоги), а не только файлы. Тогда она конвертирует все компасные документы, которые там есть, раскладывая по настройке (рядом с файлом-исходником или рядом с программой).

kastus

А можно как-то упорядочить файлы перед объединением? Чтоб получался готовый проект? (Титул - ПЗ - чертежи - спецификация, к примеру).

Andreych

1. У используемой библиотеки PDF вроде бы есть функция сжатия файла, я ее применяю, но эффекта нет абсолютно.
2. Проблема одинаковых имен решилась так: файлы cdw сохраняются просто как имя+.pdf, все другие типы файлов - имя.расширение+.pdf. Для режима объединения файлов это вообще неважно, т.к. файлы удаляются.
3. Научить понимать каталоги - это сложновато. В Total Commander же можно выделить файлы сразу во всех подкаталогах, так что можно этим обойтись.
4. Упорядочить файлы перед объединением можно, например, отсортировав список файлов по имени. Не думаю, что это нужно. Т.к. перед тем, как тащить файлы в окно программы, можно настроить сортировку по имени, расширению, дате и т.п., а затем уже тащить в программу. Также можно файлы пронумеровать изначально так, так вам надо. Тогда файлы упорядочатся согласно исходному выделению. Иначе как программа узнает нужный вам порядок сортировки - Титул - ПЗ - чертежи - спецификация.


Andreych

Еще забыл упомянуть.
Если затащить в программу просто файлы pdf, то они объединятся в один, исходные файлы не удаляются.
Если одновременно выделены файлы PDF и файлы Компаса, то объединятся отдельно PDF и отдельно файлы Компаса, сохраненные как PDF.

Вират Лакх

9) Предлагаю наделить окно программы свойством Поверх всех окон. Она маленькая по размерам, мешать не будет, но удобнее будет кидаться в нее файлами.

Вират Лакх

17.10.18, 10:36:38 #11 Последнее редактирование: 17.10.18, 13:33:33 от Вират Лакх
Придумалась для этой программы еще одна функция.
Объединение нужно было для быстрой распечатки кучи чертежей из пдф. Теперь идем дальше. Во время конвертации с последующим объединением нужно прочитать форматы чертежей и выдать статистику по форматам в виде:
А4: 1,3,4-12
А3: 2,13-15
Здесь цифры - это номера страниц в merged-документе. Потом мы эти цифры копипастим в пдф-ридер при распечатке. Это ситуёвина, когда разные форматы печатаются на разных принтерах.
При отсутствии такой функции приходится самому разбирать листы. Если их много, то эта задача затягивается.
Короче говоря, мы в одном шаге от распечатки кучи файлов в пару кликов или за считанные секунды.
Могу помочь с алгоритмом и API.
Upd.
Эту статистику можно вписать в свойства полученного документа в комментарии или какие там есть поля для текста.

Andreych

1. Сделал режим окна "Поверх всех". Можно отключить в меню.
2. Также добавил режим сортировки по возрастанию размеров формата. Ключ командной строки -s. Также есть в меню.
Сначала сортируется по ширине, затем по высоте листа. Учитываются только первые листы каждого документа.
Т.е, если в чертеже будет 2 листа А3 и А4, то в общем файле PDF они будут рядом с другими чертежами формата А3.

Вират Лакх

19.10.18, 03:46:11 #13 Последнее редактирование: 19.10.18, 04:37:24 от Вират Лакх
1. Спасибо. Раз у нас меню дублируется параметрами запуска, то для поверх'а тоже может ключ -p какой-нибудь сделать?
2. Тоже спасибо, но задачу такая сортировка (по первым листам) решает не полностью, а только облегчает последующую сортировку вручную пользователем. Я понял, в чем сложность. Надо же сначала разделить полученные пдф на отдельные файлы, а потом, используя последовательность, полученную из списка файлов компаса, собрать merged документ в сортированном виде. Тот модуль, который вы добавили, он умеет же разделять?
Если сложно так сделать и прописать так, как я описал выше, то можно просто рядом создать текстовичок или просто выдать сообщение что на какой странице находится. Мы могли бы сами написать макрос по статистике, но он может не попасть в ту последовательность, по которой обрабатывала ваша программа.
Если вам нужен стимул, то напишите в ЛС реквизиты для доната.
upd.
Дальнейшие думы на эту тему говорят мне, что сортировать - не есть лучший способ. При нумерации документов вида АБВГ.000.000.000, АБВГ.000.000.001, АБВГ.000.000.002 они все перемешаются, и объединенный документ невозможно будет читать, а только использовать для печати. Кроме этого, после распечатки придется сидеть и сортировать бумагу обратно. Так что лучше выдать информацию вида А4: 1,3,4-12; А3: 2,13-15
upd2.
В меню просится не "Поверх всех", а "Поверх всех окон"; не "Автозакрытие", а "Автозакрытие программы".
И, чтобы была вообще красота в меню, можно пункты отсортировать или по алфавиту, или по отношению к программе и обрабатываемым файлам (скажем, поверх и автозакрытие рядом, отделив их сепаратором от остального).
3. У "сохранять расширения" нет ключа при запуске программы?
А еще давно болтается вопрос. Какие настройки сохранения использует программа? Текущие, которые в компасе?

Умка

файлы компас v13 не видит

Sabahs

Сколько Вам можно объяснять?
В КОМПАС-3D V13, в API внутренний конвертер файлов в PDF не реализован, его реализация появилась в КОМПАС-3D V14 SP2.

Умка

Таки шибко хочется, doPDF крайне назойлив... Больше вариантов не вижу.

Andreych

Цитата: Вират Лакх от 19.10.18, 03:46:11


1. Думаю для режима Поверх нет необходимости в ключе запуска. Если будет всегда поверх, то это никому не помешает.
2. Сортировка нужна только для удобства печати, не для чтения объединенного документа. В принципе можно немного усложнить алгоритм сортировки и сортировать все листы. Но тогда может оказаться, что 2-й лист документа окажется в начале общего файла, 1-й лист в конце, в середине и т.д. На зато при печати будет удобнее чуть-чуть.
3. Программа задумывалась как максимально простая :) При сортировке никак не читаются форматы документов из Компас, ибо это сложно. Размеры листов для сортировки берутся прямо из полученных файлов PDF. Операция сортировки занимает 10 строк кода :)
4. "Стимул" не нужен, но спасибо.
5. Красота и структурированность меню как-то не интересовала меня в данной программе. Но названия поменять можно конечно. Не думал, что это кому-то может быть важно ;)
6. Опция "Сохранять расширения" имееет ключ "-k". Я ее добавил, и для себя по умолчанию не использую, т.к. заколебался переименовывать полученные файлы обратно без расширений spw. У кого есть дублирующиеся имена файлов, пусть эту функцию задействует. У меня такого не бывает.
7. Своих настроек сохранения нет никаких, видимо все берется из текущих настроек в Компасе. Вообще, использование Компаса у меня минимальное - запустить Компас, открыть файл, выполнить только функцию Convert, закрыть файл и все.
8. Кстати, я попробовал применить Компас Invisible, но с ним функция iApplication.Converter всегда возвращает nil. Ну и ничего не работает. Почему так, я не разобрался и бросил это дело. Наверное что-то не так делаю, с Invisible никогда дела не имел.

Sabahs

На КОМПАС-Invisible v17 и выше нужна отдельная лицензия.

Вират Лакх

0. Про разделение готовых пдф на отдельные листы. Что-то я, не подумав, сказал. Чтобы не связываться с модулем пдф, можно же сразу по листам компасом каждый документ обделать.
1. Раз поверх включен по умолчанию, то пусть не нужен ключ.
2. При, скажем так, полной сортировке печать станет не чуть-чуть удобнее, а сильно удобнее ) Читаемость временному документу для печати не нужна. Проблема в том, что, чем "сильнее" мы сортируем листы, тем хуже их раскладывать обратно для много листовых документов. Но раз всё равно собирать с двух-трех принтеров, то может и не так критично, т.к. у каждого листа есть идентификация. В итоге прошу полную сортировку.
Но и при таком раскладе сильно желательно вывести статистику, какие листы где лежат. В таком случае будет она выглядеть так: А4: 1-10, А3: 11-15... Чтобы не выискивать интервалы для печати по большому документу, а сразу вбить через копи-паст в строку ридеру, не глядя. Как вариант вывода статистики можно создать файл, который так и называется А4: 1-10, А3: 11-15.nop (numbers of pages).
А раз статистику все равно делать, то необходимости в сортировке особо нет.
3. Максимально простая программа - это, конечно, хорошо для автора. Но полнофункциональные программы - это хорошо для всех. Я вот не одну ночь просидел над программой Обозначение компонентов, зато теперь как удобно стало. Функционала ОК нет ни в 17, ни 18 версии. И печати такой, как мы с Вами сделаем, нет.
4. С учетом п.3 я чувствую, что я давлю своими просьбами, которые Вам может и не нужны вовсе. Посему и предлагаю.
5. Бывает, случаются особо жесткие припадки перфекционизма ) Особенно, когда программа нравится, как Ваша.
6. А почему k? Это от какого слова? )
8. Может нам ув. Sabahs подскажет, как инвизибл использовать? Andreych, у Вас есть старые версии, скажем К16?
9. А другие модули для объединения пробовали? :shu: Ну чтобы размер готового файла был поменьше.