Печать PDF из программы под Linux
Модератор: Модераторы
- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
Печать PDF из программы под Linux
У меня есть приложение на Дизель-Паскале (тобишь Lazarus, использует LCL), которое работает с личными кабинетами Почты России, СДЭК, Боксберри, Пикпоинт. Вопрос в печати этикеток, после добавления посылки в личный кабинет прилетает этикетка PDF (адресный ярлык). Много лет я использую ActiveX контейнер с прилинкованным Adobe Reader. Все хорошо, но с ним я гвоздями прибит к Win32 (Adobe Reader только x32), про Linux вообще разговора нет. Шибко охота сделать кросс-платформенный вариант. Собственно этикетку, как на скриншоте можно не показывать, главное после получения отправлять её сразу на принтер.
Есть идеи?
Есть идеи?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Всё очень просто.
Можно использовать несколько вариантов.
1. lp (https://www.opennet.ru/docs/HOWTO-RU/Pr ... TO-37.html)
2. Открыть pdf в вьювере, установленном по-умолчанию (например с помощью xdg-open)
3. Использовать любой pdf вьювер.
Можно попробовать использовать вот этот компонент https://github.com/dinmil/PDFPreview, если правильно понял, это обертка для mupdf
Можно использовать несколько вариантов.
1. lp (https://www.opennet.ru/docs/HOWTO-RU/Pr ... TO-37.html)
2. Открыть pdf в вьювере, установленном по-умолчанию (например с помощью xdg-open)
3. Использовать любой pdf вьювер.
Можно попробовать использовать вот этот компонент https://github.com/dinmil/PDFPreview, если правильно понял, это обертка для mupdf
Если нужен настоящий кроссплатформ и embeded решение, то возможно имеет смысл покопать в сторону интеграции браузера на форме*Rik* писал(а):Есть идеи?
Например, https://github.com/PierceNg/fpwebview
Но не уверен конкретно в решении выше в плане встроенного просмотра и печати pdf под linux и macos, под windows в webview2 это точно есть.
Если есть желание сохранить наглядность и при этом получить кроссплатформенность, то может уйти вообще от сложности с прикручиванием через посредников к форме pdf, а сконвертить сначала pdf в растр, например jpg, внешней командной утилитой и просто приклеить на форму и печатать картинку?
https://www.xpdfreader.com/pdftoppm-man.html - linux
https://askubuntu.com/questions/150100/ ... 44#1187844
https://imagemagick.org/index.php - кроссплатформенная
https://wiki.freepascal.org/Printing
https://wiki.freepascal.org/Print_Bitmap/ru
- Alexander
- энтузиаст
- Сообщения: 864
- Зарегистрирован: 18.12.2005 18:10:00
- Откуда: оттуда
- Контактная информация:
Ещё:
lpr
Может быть также какие-то возможности командой строки Inkscape, MSEIde report и предобработка вроде http://ekhlakov.blogspot.com/2013/10/pdf-linux.html , https://www.linux.org.ru/forum/desktop/13794638
Добавлено спустя 22 минуты 52 секунды:
И была попытка создания https://www.opennet.ru/opennews/art.shtml?num=33911
https://github.com/hughsie/printerd
lpr
Может быть также какие-то возможности командой строки Inkscape, MSEIde report и предобработка вроде http://ekhlakov.blogspot.com/2013/10/pdf-linux.html , https://www.linux.org.ru/forum/desktop/13794638
Добавлено спустя 22 минуты 52 секунды:
И была попытка создания https://www.opennet.ru/opennews/art.shtml?num=33911
https://github.com/hughsie/printerd
Я бы воспользовался ImageMagick-ом. В fcl он уже есть.
delphius писал(а):*Rik* писал(а):Есть идеи?
В развитие идеи, можно использоватьЕсли нужен настоящий кроссплатформ и embeded решение, то возможно имеет смысл покопать в сторону интеграции браузера на форме
Например, https://github.com/PierceNg/fpwebview
Но не уверен конкретно в решении выше в плане встроенного просмотра и печати pdf под linux и macos, под windows в webview2 это точно есть.
https://github.com/mozilla/pdf.js
Вот онлайн пример...
https://mozilla.github.io/pdf.js/web/viewer.html
- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
Коллеги, добрый день.
Самый быстрый вариант оказался с ImageMagick, начал с него, только в систему я ни чего монтировать не стал, а просто использую командную строку для конвертации PDF в PNG.
Process1.CommandLine = 'C:\ImageMagick\convert.exe -density 200 -background white -alpha remove -alpha off ' + PdfFile + ' ' + PngFile;
Здесь задается 200dpi, белый фон и удаляется альфа канал, без удаления прозрачности не печатает совсем (хотя на экране в окне просмотра отображается нормально).
Затем изображение загружается в бланк LazReport и печатается на принтере этикеток TOSHIBA, к сожалению у него драйверов под Linux нет, поэтому всё равно под Win пробуем.
Результат заметно хуже оригинала PDF, т.к. видимо растровая картинка стретчится до нужного размера, пытаясь вписаться в нужный прямоугольник. У принтера 203 dpi, поэкспериментировал с ключем -density, оптимальным вариантом оказалось 200dpi, но все равно стрёмненько, хотя все штрихкоды и datamatrix читаются.
Может идеи какие-то будут по улучшению изображенгия?
Пользовался ли кто GHostScript для отправки pdf на принтер с помощью командной строки?
Самый быстрый вариант оказался с ImageMagick, начал с него, только в систему я ни чего монтировать не стал, а просто использую командную строку для конвертации PDF в PNG.
Process1.CommandLine = 'C:\ImageMagick\convert.exe -density 200 -background white -alpha remove -alpha off ' + PdfFile + ' ' + PngFile;
Здесь задается 200dpi, белый фон и удаляется альфа канал, без удаления прозрачности не печатает совсем (хотя на экране в окне просмотра отображается нормально).
Затем изображение загружается в бланк LazReport и печатается на принтере этикеток TOSHIBA, к сожалению у него драйверов под Linux нет, поэтому всё равно под Win пробуем.
Результат заметно хуже оригинала PDF, т.к. видимо растровая картинка стретчится до нужного размера, пытаясь вписаться в нужный прямоугольник. У принтера 203 dpi, поэкспериментировал с ключем -density, оптимальным вариантом оказалось 200dpi, но все равно стрёмненько, хотя все штрихкоды и datamatrix читаются.
Может идеи какие-то будут по улучшению изображенгия?
Пользовался ли кто GHostScript для отправки pdf на принтер с помощью командной строки?
- Alexander
- энтузиаст
- Сообщения: 864
- Зарегистрирован: 18.12.2005 18:10:00
- Откуда: оттуда
- Контактная информация:
> на принтере этикеток TOSHIBA, к сожалению у него драйверов под Linux нет,
А это не подходит ?
https://usca.tscprinters.com/en/downloads
https://www.posland.ru/promyshlennye/b- ... -dpi__drv/
А это не подходит ?
https://usca.tscprinters.com/en/downloads
https://www.posland.ru/promyshlennye/b- ... -dpi__drv/
В Linux*Rik* писал(а):Пользовался ли кто GHostScript для отправки pdf на принтер с помощью командной строки?
Код: Выделить всё
lpr -P 'My Fav Printer' my_file.pdfImageWand API => открыли PDF => прочитали постранично => отправили на печать.*Rik* писал(а):Самый быстрый вариант оказался с ImageMagick, начал с него, только в систему я ни чего монтировать не стал, а просто использую командную строку для конвертации PDF в PNG.
Не проще ли использовать стандартную
?
Код: Выделить всё
function OpenDocument(APath: String): Boolean;
lclintf.pas(83,10)
Description
Opens the specified document using the default application for the platform or widgetset.- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
Подкрутили пока драйвер принтера, поставили сглаживание, сейчас вполне приемлемо. Самое главное, когда печатали через OLE, были сбои. Сейчас несколько дней отработали через ImageMagic, ни одного сбоя.
Сам ImageMagic использует GHostScript, и похоже PDF конвертирует через него. Я сделал конвертацию без ImageMagic, но пока не запустил этот вариант в работу и самое главное GHostScript так-же может отправить PDF на печать, на днях пробовали, качество вроде лучше (а может и нет), но там есть нюансы надо разбираться, пока времени на это нет, попробую летом, когда работы будет меньше будут свободные принтера, один возьму для экспериментов и попробую наладить печать почтовых ярлыков через GHostScript без ImageMagic. Пока разбирался с GHostScript, появилась догадка почему были сбои при печати через OLE, похоже иногда ярлык за границу бумаги улазит, после этого принтер встает колом.
Сам ImageMagic использует GHostScript, и похоже PDF конвертирует через него. Я сделал конвертацию без ImageMagic, но пока не запустил этот вариант в работу и самое главное GHostScript так-же может отправить PDF на печать, на днях пробовали, качество вроде лучше (а может и нет), но там есть нюансы надо разбираться, пока времени на это нет, попробую летом, когда работы будет меньше будут свободные принтера, один возьму для экспериментов и попробую наладить печать почтовых ярлыков через GHostScript без ImageMagic. Пока разбирался с GHostScript, появилась догадка почему были сбои при печати через OLE, похоже иногда ярлык за границу бумаги улазит, после этого принтер встает колом.
