Что нового

работа с pdf-принтерами

lelik_keo

Новичок
Сообщения
32
Репутация
0
Здравствуйте! Пытаюсь написать скрип оформления отчета в pdf формат. Использую dll: https://www.autoitscript.com/forum/topic/51054-printing-using-udf-and-a-dll/?page=1
Проблема в том, что данная функция не позволяет производить выбор формата листа (А3,А2,А1 и т.д.), принимает то формат, который установлен на принтере. Я решил установить несколько принтеров с автосохранением, указать каждому свой формат. Вот что получилось:
Код:
#include 'printMGv2.au3';the print UDF
Global $hp, $hpp
Local $mmssgg,$marginx,$marginy


$hp = _PrintDllStart($mmssgg);this must always be called first
if $hp = 0 then
    consolewrite("Error from dllstart = " & $mmssgg & @CRLF)
    Exit
endif


_PrintSelectPrinter($hp,"PDFCreator");Automatically choose the printer 24x16

_PrintPageOrientation($hp,1);set landscape printing
_PrintSetDocTitle($hp,"24x16")
_PrintStartPrint($hp)
$pght = _PrintGetpageheight($hp) - _PrintGetYOffset($hp)
$pgwd = _PrintGetpageWidth($hp) - _PrintGetXOffset($hp)

 _PrintSetLineWid($hp,10)

_PrintSetLineCol($hp,0x000000)
_PrintLine($hp, 1, 1, 2840, 1);start x,y, end x,y in tenths of mm
_PrintLine($hp, 1, 1, 1, 1970);start x,y, end x,y in tenths of mm
_PrintLine($hp, 2840, 1, 2840, 1970);start x,y, end x,y in tenths of mm
_PrintLine($hp, 1, 1970, 2840, 1970);start x,y, end x,y in tenths of mm


_PrintImage($hp,"24x16.jpg",_PrintGetXOffset($hp),_PrintGetYOffset($hp),$pgwd,$pght)
_PrintEndPrint($hp)
_PrintNewPage($hp);Not really needed if no more pages to be printed
_printDllClose($hp)


Sleep(4500)
$hWnd = WinGetHandle("[ACTIVE]")
WinClose($hWnd)


_1()




Func _1()


   $hpp = _PrintDllStart($mmssgg);this must always be called first
if $hpp = 0 then
    consolewrite("Error from dllstart = " & $mmssgg & @CRLF)
    Exit
endif


_PrintSelectPrinter($hpp,"pdfFactory Pro");Automatically choose the printer 24x16

_PrintPageOrientation($hpp,0);set landscape printing
_PrintSetDocTitle($hpp,"24!!!!!!")
_PrintStartPrint($hpp)
$pght = _PrintGetpageheight($hpp) - _PrintGetYOffset($hpp)
$pgwd = _PrintGetpageWidth($hpp) - _PrintGetXOffset($hpp)

 _PrintSetLineWid($hpp,10)

_PrintSetLineCol($hpp,0x000000)
_PrintLine($hpp, 1, 1, 2840, 1);start x,y, end x,y in tenths of mm
_PrintLine($hpp, 1, 1, 1, 1970);start x,y, end x,y in tenths of mm
_PrintLine($hpp, 2840, 1, 2840, 1970);start x,y, end x,y in tenths of mm
_PrintLine($hpp, 1, 1970, 2840, 1970);start x,y, end x,y in tenths of mm


;~ _PrintImage($hpp,"24x16.jpg",_PrintGetXOffset($hpp),_PrintGetYOffset($hpp),$pgwd,$pght)
_PrintEndPrint($hpp)
_PrintNewPage($hpp);Not really needed if no more pages to be printed
_printDllClose($hpp)


Sleep(4500)
$hWnd = WinGetHandle("[ACTIVE]")
WinClose($hWnd)

   EndFunc


Возникла новая проблема: программа использует только тот формат листа, который указан у принтера по умолчанию. Настройки других принтеров не учитываются. Кто в курсе, помогите пожалуйста разобраться. Заранее всем спасибо!)))
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
тоже использовал эту библиотеку для печати. сейчас проверил свой код на программе doPDF. печатает в любом установленном формате. формат устанавливаю когда выбираю принтер
 
Автор
L

lelik_keo

Новичок
Сообщения
32
Репутация
0
joiner сказал(а):
тоже использовал эту библиотеку для печати. сейчас проверил свой код на программе doPDF. печатает в любом установленном формате. формат устанавливаю когда выбираю принтер

Если формат устанавливать вручную, то работает, но мне надо, чтобы он определялся автоматически, поэтому я и хочу прописать несколько принтеров
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
lelik_keo [?]
чтобы он определялся автоматически
не понял. чем определялся? функцией или принтером?
или тебе нужно, чтобы функция меняла автоматом формат в принтере?
 
Автор
L

lelik_keo

Новичок
Сообщения
32
Репутация
0
joiner сказал(а):
lelik_keo [?]
чтобы он определялся автоматически
не понял. чем определялся? функцией или принтером?
или тебе нужно, чтобы функция меняла автоматом формат в принтере?


Да, мне нужно, чтобы функция меняла автоматом формат в принтере
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
lelik_keo

Решение еще интересует?
Думаю, могу слепить dll, подключаемую к autoit на основе одной бесплатной pdf-библиотеки.
Поддерживается кириллица, размер и положение листа, картинки и т. д.
 
Автор
L

lelik_keo

Новичок
Сообщения
32
Репутация
0
WSWR сказал(а):
lelik_keo

Решение еще интересует?
Думаю, могу слепить dll, подключаемую к autoit на основе одной бесплатной pdf-библиотеки.
Поддерживается кириллица, размер и положение листа, картинки и т. д.
Да, интересует!!! Я конечно придумал некий вариант, но он очень не удобный(((( Буду очень благодарен за любую помощь!!! :laugh: :IL_AutoIt_1: :beer:
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
lelik_keo

Вот http://autoit-script.ru/index.php?topic=20016.0
на основе libharu http://libharu.org/ собранной в dll

Проверял на Autoit 3.3.8.1

В оригинале две сотни функций, пока добавил основные - вывод текста, рисование линий и фигур, рисование картинок, многостраничность
Практически для кириллицы набор шрифтов пока ограничен Courier

В архиве UDF, dll, пример с комментариями
Вроде работает)

В теории, путем некоторых манипуляций можно dll внедрить прямо в скрипт, чтобы не нужно было ее таскать рядом со скриптом.
 
Автор
L

lelik_keo

Новичок
Сообщения
32
Репутация
0
WSWR сказал(а):
lelik_keo

Вот pdf_au3_haru.au3
на основе libharu http://libharu.org/ собранной в dll

Проверял на Autoit 3.3.8.1

Спасибо большое!!!!Это то что мне нужно!!!!! ;D ;D ;D
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
lelik_keo,
Предупреждение За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Глобальный модератор.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
OffTopic:
To: WSWR
WSWR [?]
А так вроде подобного для Autoit не встречал.
Плохо искали.
Во-первых, есть уже готовая Haru Free PDF Library
Во-вторых, UDF для работы с PDF форматом (наработки) в Autoit есть. IMHO, они не были доведены до логического конца, но всё же есть.
Create PDF from your application
libharu
В-третьих, у меня самого лежит не доведённая до конца обёртка для Haru Free PDF Library (руки не доходят закончить), если вам нужно, могу скинуть.
Мне нужна была функция вывода PDF в GUI, но к сожалению не нашёл такой функции. Пытался прикрутить pdf.dll от Chrome (там есть функция RenderPDFPageToDC) но безрезультатно.

Надо бы оформить в соответствующий раздел по UDF, но что-то правила там строгие, не знаю даже
Правил бояться не нужно, их нужно соблюдать :smile:
Оформляйте.

P.S. Мой вам совет, посмотрите как оформлена любая тема от Yashied
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
OffTopic:
Garrett
Ну, те ссылки на www.autoitscript.com я видел
Несколько раз давал здес ссылку на MPDF_UDF, пока не обнаружил, что кириллицу она не поддерживает)
Можно и прямо с libharu.dll работать, но тогда, на мой взгляд, нужно было долго разбираться с типами данных. Поэтому я просто сделал обертку на freebasic, сократив типы до integer, string, double.

Оформление UDF уже начал, выложу в ближайшее время.

На счет вывода pdf в GUI, меня это тоже очень интересует:
многие в сети ссылаются на эту библиотеку https://ru.wikipedia.org/wiki/Poppler
Правда, к ней еще не подступался.

Через браузер можно с помощью скрипта http://mozilla.github.io/pdf.js/web/viewer.html
Работет в IE, начиная с 9 или 10 версии
 
Автор
L

lelik_keo

Новичок
Сообщения
32
Репутация
0
WSWR сказал(а):
lelik_keo

В оригинале две сотни функций, пока добавил основные - вывод текста, рисование линий и фигур, рисование картинок, многостраничность

А можно еще сделать форматы бумаги А2, А1 и А0??? Они мне очень нужны)))


Добавлено:
Сообщение автоматически объединено:

lelik_keo сказал(а):
WSWR сказал(а):
lelik_keo

В оригинале две сотни функций, пока добавил основные - вывод текста, рисование линий и фигур, рисование картинок, многостраничность

А можно еще сделать форматы бумаги А2, А1 и А0??? Они мне очень нужны)))

Разобрался, можно просто менять количество пикселей листа! Еще раз СПАСИБО!!!!))))
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
lelik_keo

Эти функции должны помочь:

Код:
; Установка высоты указанной страницы (в точках)
AU3_HPDF_Page_SetWidth($p, $iWidth)
; Установка высоты указанной страницы (в точках)
AU3_HPDF_Page_SetHeight($p, $iHeight)


Размер можно выставлять от 3 до 14400
При разрешении 300 пикселей - А1 - где-то 9930 х 7020
В общем, считать надо)

Придется после создания каждой страницы использовать эти функции
А вот AU3_HPDF_Page_SetSize нужно убрать


Там еще есть ошибка в названиях функций
AU3_HPDF_Page_GetCurrentTextPosX
AU3_HPDF_Page_GetCurrentTextPosY

исправлю позже
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
lelik_keo сказал(а):
WSWR
Подскажите пожалуйста, как правильно вставлять картинки в pdf файл расширения jpg?
а то у меня пока не получается...(
После добавления страницы
Код:
$image = AU3_HPDF_LoadJpegImageFromFile('7.jpg')
AU3_HPDF_Page_DrawImage ($page, $image, 100, 300, AU3_HPDF_Image_GetWidth($image), AU3_HPDF_Image_GetHeight ($image))
 
Автор
L

lelik_keo

Новичок
Сообщения
32
Репутация
0
WSWR сказал(а):
После добавления страницы
Код:
$image = AU3_HPDF_LoadJpegImageFromFile('7.jpg')
AU3_HPDF_Page_DrawImage ($page, $image, 100, 300, AU3_HPDF_Image_GetWidth($image), AU3_HPDF_Image_GetHeight ($image))

Спасибо!!! ;D ;D ;D
 
Верх