Как открыть adobe в python
Перейти к содержимому

Как открыть adobe в python

  • автор:

Открыть файл pdf

требует имя файла, у меня этот файл хранится в двоичном виде(pdf файл). Есть ли возможность его открыть без предварительных созданий временных папок ?

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Открыть pdf, rtf файл через Python
Подскажите, пожалуйста, одну вещь: Пользователь хочет выбрать один из файлов (будь то rtf или.

Не могу открыть в PDF читалке в форме PDF файл имя которого хранится в БД Access
в приложении есть поиск он ищет в БД(1 таблица, 2 поля) и если в поисковую строку вводится название.

Открыть PDF файл с C++
Привет, мне нужно открыть конкретную страницу на PDF файле в C++. В интернете я нащел пару.

Открыть pdf файл
Как открыть pdf файл? Желательно без установки читалок.

Эксперт Python

2885 / 1585 / 512
Регистрация: 21.02.2017
Сообщений: 4,205
Записей в блоге: 1
Через webbrowser нет.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Как открыть файл pdf
Как открыть файл pdf My.Computer.FileSystem.OpenTextFileReader("PDF\111.pdf") файл не.

Как открыть .pdf файл?
Компонент CppWebBrowser требует Acrobat Reader. Но неудобно же устанавливать его у каждого.

Как открыть pdf-файл
Как из вба, нажатием на кнопку, открыть документ в формате пдф

Сохранить файл .pdf а не открыть
А как реализовать такое? На одной странице несколько ссылок "Сохранить файл . ", которые.

Как открыть PDF файл
Добрый день. Только начал изучать Android программирование. Возникла такая проблема, не могу.

Открыть файл pdf формата
Есть на форме компонент Label2 надо чтобы при нажатии открывался pdf-файл вроде сделал так, но.

Вызвать(открыть) pdf файл?
Подскажите пожалуйста, как можно по событию (например клик кнопки) обратится к pdf файлу, чтоб.

PDFDocument

Позволяет управлять документами PDF, включая объединение и удаление страниц, поведение при открытии, добавление вложений и создание или изменение настроек безопасности документа.

Обсуждение

PDFDocumentOpen и PDFDocumentCreate являются двумя функциями, которые обеспечивают ссылку на объект PDFDocument .

Один из стандартных сценариев создания новых файлов PDF предназначен для создания атласов. Как правило, необходимо создать новый объект PDFDocument , присоединить к нему содержание других PDF-файлов и сохранить объект PDFDocument на диск. Другим стандартным сценарием является изменение содержания существующего файла PDF или его свойств. После того, как вы получили ссылку на PDFDocument , вы можете выполнить методы appendPages , insertPages или deletePages , а также использовать методы updateDocProperties и updateDocSecurity для изменения настроек PDF-файла.

Метод deletePages удобен для выгрузки только тех страниц, которые должны быть изменены. Обработка большого количества страниц занимает много времени. Если были изменены всего несколько страниц, быстрее удалить их, затем добавить измененные страницы с помощью метода insertPages .

В настоящий момент при использовании Python для настройки безопасности PDF документа, она ограничена шифрованием RC4 . Если вы настраиваете безопасность PDF в ArcGIS Pro , она ограничена шифрованием AES 256-bit . Это значит, что, если вы управляете документами PDF, используя Python, вы ограничены работой только с теми документами PDF, которые не защищены, либо документами с шифрованием RC4 .

Свойства

Свойство Описание Тип данных
pageCount

(только чтение)

Возвращает целое число, отображающее общее число страниц в документе PDF.

Обзор метода

Добавляет один документ PDF в конце другого.

Позволяет удалить одну или несколько страниц из документа PDF.

Позволяет вставлять содержимое одного документа PDF в начало или в середину другого PDF.

Сохраняет изменения, внесенные в текущий PDFDocument .

Позволяет обновлять метаданные документа PDF, а также указывать конкретное поведение, которое будет запускаться при открытии документа в приложениях Adobe Reader и Adobe Acrobat, например, исходный режим просмотра и вид образцов.

Обеспечивает механизм установки пароля, шифрования и ограничений безопасности для файлов PDF.

Методы

appendPages (pdf_path, )

Необходимо вставить строку с указанием расположения и имени присоединяемого документа PDF.

input_pdf_password

Строка, определяющая главный пароль для защищенного файла. Это должен быть главный пароль: пользовательский пароль не подойдет.

(Значение по умолчанию — None)

При присоединении документов PDF с различными настройками безопасности настройки выходного документа будут основаны на настройках главного документа, к которому будет присоединены страницы. Например, если документ, к которому будут присоединены страницы, не имеет защитного пароля, а присоединяемые страницы имеют, полученный документ не будет иметь защитного пароля.

Для добавления страницы в начало текущего документа PDF используйте insertPages .

deletePages (page_range)

page_range

Строка, задающая страницы для удаления. Для удаления одной страницы в строке указывается одно значение (например, «3» ). Несколько страниц можно удалить, задав их номера через запятую (например, «3, 5, 7» ). Кроме того, можно задать диапазоны страниц (например, «1, 3, 5-12» ).

Необходимо внимательно следить за удаляемыми страницами, т.к. после каждого удаления номера страниц в документе PDF автоматически пересчитываются. Например, страница 3 станет страницей 2 сразу после удаления страницы 1 или 2. Если страницы 1 и 2 удалены, страница 3 станет страницей 1. Необходимо учитывать эти особенности, если при использовании команды deletePages вы сразу же следом применяете команду insertPages вместе со значением before_page_number .

insertPages (pdf_path, , )

Необходимо вставить строку с указанием расположения и имени вставляемого документа PDF.

before_page_number

Целое число, определяющее номер страницы в ссылаемом PDFDocument , перед которым необходимо вставить новые страницы. Например, если before_page_value равно 1, вставляемая страница будет находиться перед всеми страницами.

(Значение по умолчанию — 1)

input_pdf_password

Строка, определяющая главный пароль для защищенного файла. Это должен быть главный пароль: пользовательский пароль не подойдет.

(Значение по умолчанию — None)

При использовании документов PDF с различными настройками безопасности настройки выходного документа будут основаны на настройках главного документа, в который будут вставляться страницы. Например, если документ, в который будут вставляться страницы, не имеет защитного пароля, а вставляемые страницы имеют, полученный документ не будет иметь защитного пароля.

Для добавления страницы в конец текущего документа PDF используйте appendPages .

saveAndClose ()

Метод saveAndClose следует использовать для сохраняемых изменений. Если скрипт завершает работу до исполнения saveAndClose , изменения не сохраняются. Если вы создаете новый файл с помощью PDFDocumentCreate , файл не появится на диске, пока не будет выполнена команда saveAndClose .

updateDocProperties (, , , , , )

Строка, задающая заголовок документа, свойство метаданных файла PDF.

(Значение по умолчанию — None)

pdf_author

Строка, задающая автора документа, свойство метаданных файла PDF.

(Значение по умолчанию — None)

pdf_subject

Строка, задающая тему документа, свойство метаданных файла PDF.

(Значение по умолчанию — None)

pdf_keywords

Строка, задающая ключевые слова документа, свойство метаданных файла PDF.

(Значение по умолчанию — None)

pdf_open_view

Строка или число, которые определяют поведение при просмотре файла PDF. Значение по умолчанию USETHUMBS задает автоматическое отображение панели «Страницы просмотрщика» при открытии файла PDF.

  • VIEWER_DEFAULT — Заданный пользователем параметр, применяемый при открытии файла.

Open and save a PDF file using Acrobat Reader in the background using Python

Following the Opening pdf file question I am looking for a way to also command Adobe Acrobat Reader to save the file programmatically using Python. I am not looking for the pikepdf way of saving the file. Reason: This PDF file, created with fill-pdf, needs to go through special formatting done by Acrobat Reader upon opening. Upon exit Acrobat Reader asks whether to save the formatting it did, I need this «Yes, Save» to be via code. Edit: How to proceed from here using pywinauto?

import time from pywinauto.application import Application pdf_file = r'C:\Path\To\Total.pdf' acrobat_path = r"C:\Path\To\Acrobat.exe" app = Application(backend=u'uia').start(cmd_line = acrobat_path + ' ' + pdf_file) print("started") time.sleep(1) app = Application(backend=u'uia').connect(path=acrobat_path) print("connected") 

Шаблонизация PDF

image

Хабрахабр, уважаемые коллеги!

Проблема впечатывания данных в PDF документ не нова, не я первый и не я последний кто с ней сталкивается, поэтому решил поделиться опытом решения и заодно представить вашему вниманию небольшое веб приложение по этой теме.

1. PDF формат хорош тем, что он не редактируемый. Во всяком случае рядовой пользователь вряд-ли будет заниматься внесением правок в документ PDF. И значит формат PDF хорошо подходит для обмена важными документами.

2. PDF формат плох тем, что он нередактируемый ) Т.к. шаблонизация, заполнение набором данных бланка документа PDF в автоматическом режиме затруднена, а в ручном режиме требуется установка платных, тяжеловесных приложений.

Меня, как программиста, беспокоит прежде всего 2-й пункт. Как в программном приложении впечатать необходимый набор данных в документ PDF?

Область применения (постановка задачи)

Сразу хочу обозначить область применения, рамки поставленной задачи, чтобы исключить недоразумения в комментариях:
1. У вас есть веб API приложение на python с множеством функционала.
2. Есть бланк документа в формате pdf, в лучшем случае исходный docx файл из которого сделан этот pdf.
3. Есть требование от бизнес-заказчиков заполнить указанный pdf бланк данными клиента и в формате pdf выдать в браузер (или отправить на почту) клиенту.

Очередное гугление на эту тему не принесло результатов.
Удалось нагуглить только, что с впечатыванием всё плохо (Почему так сложно извлекать текст из PDF?, PDF с точки зрения программиста) и есть вариант шаблонизировать сначала docx файл, это сделать не сложно (Заполняем документы в Microsoft Word. ), а затем преобразовать в консольном libreoffice (librewrite) docx-файл в PDF. Это всё можно сделать автоматически, из приложения.

Но во-первых, такое решение означает, что проект будет иметь тяжёлую зависимость от libreoffice.

А во-вторых, при преобразовании docx в PDF в libreoffice вид документа получается немного не таким, как он смотрится в word, и/или PDF сгенерированном в word из docx файла.

Перейдём наконец к сути рассматриваемого решения. Конечно «шаблонизация» в данном случае слово громкое, но предлагаемое решение вполне годное и полезное.

На python (и на php) есть несколько библиотек (не сложно загуглить), которые позволяют впечатывать строки и картинки в PDF-файлы, мы используем pdfrw + reportlab.Canvas. Т.е., в принципе впечатать данные нет проблем, проблема у этих библиотек в том, что для каждого поля нужно задать свои точные координаты в документе, а это значит, что

1. Нужен какой-то унифицированный функционал, который хранил бы координаты полей не внутри исходного кода, а в отдельном файле. Сразу уточню, что по опыту рекомендую хранить эти координаты в файлах и под контролем версий, т.е. коммитить координаты вместе с соответствующими PDF-бланками и методами, генерирующими тот или иной комплект документов. И не засовывать эти координаты в базу данных, т.к. это затруднит откат к предыдущим версиям (координатам) документов, если возникнет такая необходимость. Тут вроде бы всё понятно.

2. Эти координаты надо как-то вычислить, а это грустное занятие, если делать это вручную.

Тут основная идея заключается в том, чтобы в браузере создать перемещаемые div элементы, с помощью мышки настроить их положение в нужное место документа и получившиеся в браузере координаты элементов сохранить в файл на бэкенде. Собственно эти два пункта и реализованы в приложении

Способ применения

Похоже, что получилось небольшое веб приложение с фронтэндом и бэкендом, т.е. оформить его в качестве python пакета, пожалуй не получится.

1. Скачиваем с гита исходники

2. Устанавливаем зависимости

3. Читаем README.md (устанавливаем и настраиваем nginx для статических файлов)

4. В папке documents создаём подпапку с именем документа, который нужно генерировать и внутри этой подпапки создаём два файла и (если необходимо) одну дирректорию с картинками:

— form.pdf # бланк документа в который надо впечатывать данные
— fields.json # параметры полей, которые необходимо впечатывать
— images # не обязательно, набор картинок, которые необходимо впечатать
Рекомендую также сохранить исходный docx-файл (если имеется), который не участвует в генерации документа, но пригодится при необходимости внести изменения и перегенерировать бланк документа PDF
— form.docx # не обязательно, имя любое

Файл fields.json имеет следующую структуру, например:

Добавление/удаление строк в этот файл добавляет/удаляет поля, впечатываемые в бланк

5. Открываем страницу для настроек полей (http://127.0.0.1/tpdf/positioning?pdf_name=ZayavlenieNaZagranpasport&page_num=1)

6. Настраиваем положение полей с помощью мышки в браузере и сохраняем это положение

7. Мышкой не всегда точно удаётся установить нужное положение полей, чтобы подровнять положение полей можно открыть файл fieldd.json и поправить координаты вручную. Данные в файле упорядочены по координате Y и каждое поле хранится в своей строке файла. Т.е. файл с координатами полей отформатирован аккуратно, что позволяет вручную, легко вносить необходимые корректировки.

8. Создаём ещё один метод для печати данного типа документа (если нужно как-то подготовить исходные данные и/или взять их не из фронта, а из бэкэнда).

9. Если всё в порядке, то коммитим получившийся набор данных fields.json и файлы (только не ко мне на гит, а в свой локальный гит, хотя, если документ может кому-то ещё пригодиться, то можно и публичный банк документов собрать, это идея).

Полученный файл с координатами можно использовать в другом проекте, на другом языке программирования, например php, ведь координаты в файле записаны в единицах измерения (поинты) которые используются в PDF-файлах.

Если у вас проект на python, то исходники данного приложения можно просто внедрить в проект и через использование основного класса Tpdf генерировать PDF в любом удобном месте кода.

Часто нужно сгенерировать не просто один документ из нескольких страниц, а собрать в один PDF-файл несколько документов, каждый из которых должен быть напечатан в нужном порядке и некоторые из них более одного раза. В основном классе данного приложения имеется для этих нужд специальный метод, который генерирует комплект документов, смотрите обработку метод /tpdf/example/.

Данные в основной класс нужно передавать при его инстансцинировании. Основной класс можно расширять свойствами (@property), которые будут вычисляться на основе входных данных и вставляться в PDF по имени свойства = имени поля. Так в примере выводится поле fio, а данные передаются last_name, first_name, middle_name

Можно развернуть это небольшое приложение в качестве самостоятельного сервиса, а все остальные приложения окружения будут к нему обращаться за нужным документом по сети, но тогда появятся расходы времени передачи по сети, файлы PDF не слишком «лёгкие», сама генерация документов происходит быстро.

Вместо сотни слов, иногда лучше посмотреть видео инструкцию (звук не записывал).

Опыт реализации (грабли).

  1. Сначала я реализовал это небольшое приложение на библиотеке PyPDF2, но комплект документов из 28 страниц генерировался 3 секунды, как-то долго. Тогда, чтобы ускорить генерацию документов, я решил попробовать мультипоточность, выделив генерацию каждой страницы в отдельный поток, однако это усложнило код но, на удивление, не дало выигрыша производительности, плюс возникли дополнительные ошибки видимо из-за конфликтов процессов. Тогда я попробовал многопроцессность, однако результат оказался тот же — производительность не выросла а в некоторых конфигурациях кода даже ухудшалась. Наконец я решил проверить быстродействие другой, аналогичной библиотеки pdfrw под которую, оказалось, почти не пришлось переписывать код и она заработала почти на порядок быстрее без всякой мультипоточности и мультипроцессности. Т.е. комплект документов из 28 страниц сгенерировался за 0.3 секунды. Не зависимо от библиотеки код изначально оптимизировал с точки зрения повторной генерации страниц: каждая страница заполняется данными один раз и хранится в памяти, и если она должна быть напечатана несколько раз, то первый раз она генерируется, а последующие разы берётся готовая из памяти.
  2. Листание страниц лучше делать не на ajax, так как, чтобы подтянулись новые поля всё равно нужно перезагружать всю страницу.
  3. Было много возни с преобразованием координат с пикселей фронта в поинты PDF. В итоге, опытным путём и путём гугления выяснилось, что отношение фронтовые координаты нужно умножать на 3/4, чтобы получить координаты документа PDF. Обратное преобразование, соответственно, наоборот.

Нужно сделать (TODO)

    Добавление и удаление новых полей с фронта.

  • pdf
  • заполнение форм
  • заполнить и распечатать бланки
  • шаблонизация

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *