Показаны сообщения с ярлыком pdf. Показать все сообщения
Показаны сообщения с ярлыком pdf. Показать все сообщения

пятница, 23 марта 2018 г.

QR код с многострочным тестом в PDF

Обычно я говорю, что все, что в Adobe могут делать хорошо, это Photoshop. Хотя, наверняка это преувеличение, и всякие там AfterEffects и Illustrator достойные представители своего жанра. Но поскольку абаперу в основном приходится сталкиваться с продукций Adobe в виде LiveCycleDesign при создании PDF форм, то весь негатив вызван в основном этим продуктом.

LiveCycleDesign ужасен и полон багов, а связка с SAP GUI через внедрение по COM стабильности не добавляет. Но все равно PDF лучше чем SAPScript и SmartForms.

Кстати небольшое отступление. Часто в LiveCycleDesign при открытии какой-нибудь панели (как правило Info или Drawing Aids) интерфейс зависает, вернее не реагирует, и панель эту не убрать, и не сдвинуть даже. Как правило помогает выбрать в меню сброс layout (Palletes->Workspace->Reset Pallete Locations), но естественно все ваши тщательно расположенные панельки слетают. Так вот можно добиться восстановления работоспособности просто открыв в меню Help->About и закрыв окно About.  Вот такой милый глюк. Между прочим уже 11 версия программы от солидной фирмы.

На днях столкнулся с очередной особенностью. Хотя тут виноват скорее даже не сам  LiveCycleDesigner, а сервис генерации PDF.

Возникла задача в PDF выводить QR-код, в котором закодирован многострочный текст. Но в PDF перенос текста стабильно заменялся на пробел (или что-то аналогичное) и переноса строк не было. Есть нота 2358186, но она относится только к SAPScript и SmartForm.
В результате копания и использования метода научного тыка выяснилось, что для достижения необходимого результата нужно выполнить следующие условия:
  1. Строки при передаче в ФМ формирования PDF необходимо разделять через перевод строки и только. Это управляющий символ с кодом 10 (0A в 16-ной системе). Во многих языках программирования это "\n", в ABAP нужно юзать cl_abap_char_utilities=>newline (ну или %_NEWLINE). 
  2. Для тестирования (preview) можно еще в событии initialize написать следующий код на JavaScript:
    this.rawValue = this.rawValue.replace(/\\n/g,"\n");
    


    Естественно, при наличии такого кода для разделения строк в ABAP также можно применять строку '\n'
  3. В свойствах формы  Edit->Form Properties... необходимо везде указать генерацию статического PDF.
    А именно здесь (для непосредственной генерации):


     и здесь (для предпросмотра в LiveCycleDesigner):
  4. При вызове ФМ генерации PDF необходимо чтобы в передаваемом параметре /1bcdwb/docparams поля Fillable и Dynamic были пустыми.
Возникает вопрос. Что же такого есть в динамических (интерактивных) формах, что при генерации QR сервис Adobe не может корректно обработать перенос строки? И что делать если форма нужна именно интерактивная? Только страдать. 


среда, 22 января 2014 г.

SAP TM Enhancement Guide

SAP TM 8.0 8.1 Enhancement guide.pdf
SAP TM Enhancement Guide 2nd Edition.pdf

понедельник, 23 апреля 2012 г.

Особенности вывода PDF в Web Dynpro

При использовании Web Dynpro компонента INTERACTIVE_FORM для вывода PDF прямо в HTML страницу могут возникнуть некоторые проблемы.

Например, если на представлении помимо компонента INTERACTIVE_FORM присутствуют другие элементы, которые должны реагировать на действия пользователя - типичный вариант, кнопка Назад - то реагировать они не будут. Происходит это похоже потому, что используемый для вывода Adobe Reader перехватывает эти события и до обработчиков они не доходят. Возможно, это сделано для работы с интерактивными PDF-формами. Не знаю, пока с ними не сталкивался.
Но если у Вас обычная форма, которую нужно просто показать пользователю, то решением будет просто снятие флага Enabled у компонента INTERACTIVE_FORM.

Вторая тонкость заключается в способе формирования PDF. Компонент позволяет 2 варианта. В первом случае вы задаете в свойстве templateSource имя шаблона,  а в свойство dataSource "байндите" данные. Очень похоже на то, как  PDF выводится через свой сгенерированный ФМ при работе через SAP GUI. Но при выводе этим способом уже неоднократно сталкивались с тем, что при этом формируемый  на сайте PDF либо вообще не содержит текста, либо кракозябры вместо него. Возможно проблема в отсутствии каких-то шрифтов или прописанных путей до них. Пока не нашли в чем дело. Да и не искали особо. Потому что есть более надежный и простой способ - сгенерировать PDF как обычно через ФМ, но не выводить его, а получить сформированный файл в виде XSTRING и присвоить свойству pdfSource компонента INTERACTIVE_FORM. Для получения файла в виде XSTRING необходимо при вызове ФМ FP_JOB_OPEN передать в параметре ie_outputparams установленные поля nodialog и getpdf. При этом вызов сгенерированного ФМ для формирования выходного документа в параметре /1bcdwb/formoutput вернет в поле pdf созданный файл.