- doctor Brain
- Новые публикации
- JavaScript: сохраняем страницу в pdf
- HTML: Полезные примеры
- CSS: Ускоряем загрузку страницы
- JavaScript: 5 странностей
- JavaScript: конструктор сортировщиков
- Категории
- О нас
- Показать файлы PDF в браузере пользователей через PHP / Perl
- Php header PDF Open in Browser
- Scroll for More Useful Information and Relevant FAQs
- Что такое PDF и как его можно прикрутить к web-приложениям средствами PHP
doctor Brain
Однажды я столкнулся с необходимостью извлечения информации из документа в формате PDF, с дальнейшим преобразованием полученных данных в JSON-объект для их дальнейшей обработки.
Обработка текстовой информации не вызвала никаких проблем. Для извлечения текста разумно использовать pdftotext :
$content = shell_exec('pdftotext -enc UTF-8 -layout input.pdf -');
После этого, я использовал регулярное выражение, чтобы получить данные файла:
$anagrafica = array(); if (preg_match('/^Denominazione\W*(.*)/m', $content, $aDenominazione))
Но как извлечь данные изображений, не имеющих разметки?
Для этого я применил linux-команду pdftohtml :
$rawImages = shell_exec('pdftohtml -enc UTF-8 -noframes -stdout -xml "'.$this->filePath.'" - | grep image'); $tok = strtok($rawImages,"\r\n"); while ($tok !== false)
Таким образом, с помощью pdftohtml я сформировал XML-документ с записями для каждого текстового поля и изображения.
Получился массив картинок в виде XML-элементов $rawImages , который я отправил, как SimpleXmlObjects в массив $images .
Затем, я нашел нужные мне изображения по ширине (например, нашел изображения, параметр width которых был равен 77-и пикселям) и отсортировал их по положению по вертикали.
Так же я запросил цвет пикселя в каждой нужной позиции картинки с помощью команды convert библиотеки ImageMagick и сохранил все полученные результаты в JSON-объект.
$color = shell_exec('convert "'.$imagePath.'" -format \'%[pixel:p]\' info:- '); switch ($color) < case 'srgb(253,78,83)': $anagrafica[$this::chekcs[$pos]]='red'; break; case 'srgb(123,196,78)': $anagrafica[$this::chekcs[$pos]]='green'; break; case 'srgb(254,211,80)': $anagrafica[$this::chekcs[$pos]]='yellow'; break; >;
Перевод статьи Claudio Fior “Extract data from a PDF”.
Новые публикации
JavaScript: сохраняем страницу в pdf
HTML: Полезные примеры
CSS: Ускоряем загрузку страницы
JavaScript: 5 странностей
JavaScript: конструктор сортировщиков
Категории
О нас
Frontend & Backend. Статьи, обзоры, заметки, код, уроки.
© 2021 dr.Brain .
мир глазами веб-разработчика
Показать файлы PDF в браузере пользователей через PHP / Perl
Я хочу показать своим пользователям файлы PDF. Причина, по которой я использую cgi для показа pdf, – это то, что я хочу отслеживать клики для pdf и скрывать реальное местоположение сохраненного pdf.
Я искал в Интернете и только нашел, как показать диалог сохранения пользователям и создать pdf-файл, а не показывать файлы пользователям.
То, что я хотел, это показать пользователям мои pdf-файлы, а не создавать или загружать PDF-файлы. Вот что я получил из официальной документации php:
Также мой Perl-код google-search-result:
open(PDF, "the.pdf") or die "could not open PDF [$!]"; binmode PDF; my $output = do < local $/; >; close (PDF); print "Content-Type: application/pdf\n"; print "Content-Length: " .length($output) . "\n\n"; print $output
если вы делаете это на рубине, скажите мне это. Но я не уверен, поддерживает ли мой сервер рельсы.
Извините, если мой код слишком далеко от метода, чтобы показать pdf, так как я ничего не знаю о обработке PDF и о том, как реализовать эту проблему.
Предположим, что у пользователей есть подключаемый модуль Adobe Reader. Итак, как исправить мою проблему?
edit : Я хочу показать простой файл PDF. Моя основная цель: отслеживать мои pdf-файлы и использовать некоторые модные URL-адреса.
edit : Вот мой основной php-код:
edit : Теперь код работает. Но индикатор выполнения загрузки (на плагине Adobe Reader X) не появляется. Зачем? Кто-нибудь может мне помочь? Вот мой основной код:
edit : Все мои проблемы решены. Вот окончательный код:
Я предполагаю, что вы хотите, чтобы PDF отображался в браузере, а не форсировал загрузку. Если это так, попробуйте настроить заголовок Content-Disposition со значением inline .
Также помните, что это также будет зависеть от настроек браузера – некоторые браузеры могут быть настроены так, чтобы всегда загружать PDF-файлы или открывать их в другом приложении (например, Adobe Reader)
$url ="https://yourFile.pdf"; $content = file_get_contents($url); header('Content-Type: application/pdf'); header('Content-Length: ' . strlen($content)); header('Content-Disposition: inline; filename="YourFileName.pdf"'); header('Cache-Control: private, max-age=0, must-revalidate'); header('Pragma: public'); ini_set('zlib.output_compression','0'); die($content);
Протестировано и отлично работает. Если вы хотите, чтобы файл загружался, замените
Content-Disposition: inline
Content-Disposition: attachment
Вы можете изменить рендеринг PDF, такой как xpdf, или показать, чтобы отобразить графическое изображение на вашем сервере, а затем доставить изображение пользователю. Это то, как Google быстро просматривает PDF-файлы, они визуализируют его локально, а затем доставляют изображения пользователю. Нет загруженного PDF-файла, и источник довольно хорошо скрыт. 🙂
Самый безопасный способ отображения PDF-файла вместо загрузки, кажется, встраивает его с помощью object или элемента iframe . Существуют также сторонние решения, такие как Google Viewer Google.
См. Лучший способ вставки PDF в HTML для обзора.
Также есть DoPDF , Java-браузер In-browser PDF. Я не могу говорить о его качестве, но он выглядит интересным.
Вы также можете использовать класс fpdf, доступный по адресу: http://www.fpdf.org . Он предоставляет опции для вывода в файл и отображения в браузере.
- Какие обратные вызовы называются?
- Как я могу выполнить глобальное регулярное выражение в Perl?
- Вернуть Perl-вывод в PHP
- Perl-эквивалент preg_callback PHP
- Какие замены должны быть выполнены, чтобы обеспечить безопасный URL-адрес базы 64?
- Есть ли в Perl динамические переменные типа PHP?
- Извлечение совпадений из php regex
- Манипуляции строк и регулярных выражений
- Анализ и создание файлов Microsoft Office 2007 (.docx, .xlsx, .pptx)
- Преобразование в и из индуистского календаря
- TripleDES в Perl / PHP / ColdFusion
- Используйте массив данных Perl’s Data :: Dumper в PHP
Php header PDF Open in Browser
Before going to learn the use of the PHP header function for a pdf file, we need to understand the header function, its properties, and how it works in short. The header function is basically used to send raw HTTP header to the browser (client).
Header Syntax:
header(Param 1 , Param 2, Param 3)
Param 1 — This requires a param of type string. It represents the header string. It’s required param to pass.
- Location: http://www.anyWebPage.com
- HTTP/1.1 404 Not Found
- Content-Type: application/pdf
Param 2 : It is an Optional param of boolean type. It indicates header replacement. Default value is true means it will replace previous.
Param 3: It is an Optional param of Integer type. It represents a response code.
Now let’s understand how we can use the header function to force browsers to prompt save data sent from the server. We will require the following certain headers to accomplish the PHP header pdf open in the browser.
Content Type : Content-Type header string required to signalize media type. It is used to tell browsers about the type of content being sent over.
- Media type is image/png or image/jpg for image per image extension.
- Media type is text/html to indicate an html file.
- Media type is application/pdf to indicate a pdf file.
Therefore to tell about pdf file we need to use header like header(‘Content-Type: application/pdf’);
Content Disposition: Content-Disposition header string used as inline to let the browser know that content passed needs to be inline meaning that it should be part of a web page.
Content-Disposition header string with attachment option is used to prompt use of the «Save as» dialog box.
Therefore to display pdf file on browser we can use header as header(‘Content-Disposition: inline; filename=»abc.pdf»‘);
Let’s explore the following useful ways to download or View pdf in the browser without downloading PHP with related concepts and example codes.
Scroll for More Useful Information and Relevant FAQs
Что такое PDF и как его можно прикрутить к web-приложениям средствами PHP
В наше время формат документов PDF приобретает большую популярность. Он был разработан компанией Adobe Systems Incorporated. Как указано в документации, THE ADOBE PORTABLE DOCUMENT FORMAT (PDF) — переносимый формат документов, является «родным» для программных продуктов семейства Adobe Acrobat. Их цель — дать пользователю возможность легко обмениваться электронными документами и просматривать их независимо от той среды, в которой эти документы были созданы. PDF опирается на графическую модель, позволяющую отображать картинки и текст вне зависимости от установленных на компьютере устройств и разрешения. В документах этого формата присутствуют такие объекты, как гиперссылки и аннотации, что делает их интерактивными.
С другой стороны, web-приложения зачастую нуждаются в отображении динамически составленных документов, таких как отчеты, прайслисты, счета и многое другое. Это позволяет персонализировать приложение и сделать его более мощным по своим функциональным возможностям. Помимо PDF, существуют и другие решения, но этот формат можно назвать одним из самых удачных, так как PDF документ без потери форматирования можно вывести на принтер или конвертировать в HTML или текст.
PHP, как один из самых мощных и популярных современных средств разработки web-приложений, справляется с задачей генерации PDF документов «на лету». Для этого разработано несколько дополнительных инструментов. Не возьмусь перечислить их все, но назову одни из самых известных — библиотеку PDFLib, ClibPDF и PHP класс FPDF.
Названные в предыдущей главе PDFLib и ClibPDF требуют дополнительной настройки PHP, в то время как класс FPDF является чистым PHP кодом и легко подключается к скриптам командой include() и другими подобными. Скачать класс и ознакомиться с подробной документацией можно на сайте www.fpdf.org. Дополнительным (порой решающим) аргументом в пользу этого решения можно рассматривать его бесплатность для использования как в личных, так и коммерческих целях. Цитата из лицензионного соглашения:
«FPDF is Freeware (it is stated at the beginning of the source file). There is no usage restriction. You may embed it freely in your application (commercial or not), with or without modification».
Разрешается также видоизменять исходный код класса. Никаких ограничений.
Решение проблемы с кириллицей
При создании русскоязычных документов средствами иностранных программных продуктов (библиотек, приложений и прочего) часто возникает проблема правильного отображения кириллических шрифтов. Не всякий зарубежный продукт корректно работает (а то и вовсе не работает) с кириллицей. К счастью, класс FPDF не принадлежит к их числу и легко настраивается на работу с русским языком.
Если быть точным, то сам класс настраивать практически не придется. Проблема может возникнуть с файлами кириллических шрифтов. Оговорюсь, что тестирование класса я проводил на wintel платформе (впрочем, весь приведенный код работал и на коммерческом *nix хостинге). В windows одним из самых основных форматов шрифтов (наряду с PostScript) является TTF (True Type Font). Но для правильной работы наших скриптов необходим и еще один формат файлов — AFM (файл метрики шрифта). Как считается, AFM файлы поставляются вместе с TTF. В своей ОС я AFM файлов не обнаружил.
Здесь нам на помощь приходят полезные утилиты, в частности — ttf2pt1. Одна из задач данной утилиты — сгенерировать метрический файл для True Type или PFB. Другими словами, появляется возможность взять из директории /fonts (ОС Windows) любой .TTF файл шрифта с поддержкой кириллицы и получить для него метрику при помощи нашей волшебной утилиты. Скачать утилиту можно по следующим линкам: http://ttf2pt1.sourceforge.net и http://fpdf.org/fr/dl.php?id=22 (для Windows).
После того, как утилита скачана, ее необходимо запустить из командной строки (в windows Пуск->Выполнить команду cmd). Формат вызова утилиты для нужной нам цели выглядит следующим образом: