SAPфорум.RU
https://sapboard.ru/forum/

Ошибка при конвертации PDF со спула.
https://sapboard.ru/forum/viewtopic.php?f=13&t=95459
Страница 1 из 1

Автор:  ИльнарСР [ Чт, сен 14 2017, 15:41 ]
Заголовок сообщения:  Ошибка при конвертации PDF со спула.

Добрый день!
Столкнулся с такой проблемой:
Кадровикам необходимо чтобы приказы автоматически сохранялись c названием определенного формата(ФИО_таб. ном. и т.д.). Приказы формируются в формате PDF.
Был опыт перевода расчетный листов в PDF и передачи для хранения в архив(Все работает). Думал что здесь можно будет сделать по аналогии.
В принципе все работает до этапа открывания файла: PDF формируется в спуле, при помощи ФМ'CONVERT_ABAPSPOOLJOB_2_PDF' и ФМ 'WS_DOWNLOAD' сохраняю файл с тем наименованием, как мне нужно. Но при попытке отрыть файл - ошибка: не удается открыть файл из-за отсутствия в нем страниц.

Может кто сталкивался с такой проблемой или встречал на форуме(сам я не нашёл).

Спасибо!

P.S. Ответ "пусть ручками меняют" не прокатит. Сами предлагали.

Автор:  dedzinatajs [ Пт, сен 15 2017, 13:32 ]
Заголовок сообщения:  Re: Ошибка при конвертации PDF со спула.

Добрый день, Ильнар!

1. Сначала выберите имя файла из спула:
Code:
     
CALL FUNCTION 'ADS_SR_READ_CONTENT_DIR'
        EXPORTING
          rqident        = lv_spool
        TABLES
          file_list      = file_list
        EXCEPTIONS
          wrong_doctype  = 1
          internal_error = 2
          no_directory   = 3
          OTHERS         = 4.


2. В принципе, большинство ПДФ-ов идут как сингл-парт документы, поэтому достаточно считать из этой таблицы первую запись. В зависимости от того, заканчивается имя file_list-name на .pdf/.pda или нет - вызываете функцию:

Code:
       
    IF pdf_detected = 'X'.
*       Get content of PDF file directly
          CALL FUNCTION 'ADS_SR_READ_CONTENT_TAB'
            EXPORTING
              rqident                     = lv_spool
              partfilename             = file_list-name
            IMPORTING
              filelength                  = infilelength
            TABLES
              content_tab              = content_tab
            EXCEPTIONS
              OTHERS                      = 5.

          CONCATENATE LINES OF content_tab INTO pdf IN BYTE MODE.

        ELSE.

          CALL FUNCTION 'FPCOMP_CREATE_PDF_FROM_SPOOL'
            EXPORTING
              i_spoolid      = lv_spool
              i_partnum      = 1
            IMPORTING
              e_pdf          = pdf
              e_pdf_file     = confile
            EXCEPTIONS
              OTHERS         = 5.

        ENDIF.


3. Конвертируем из Х-стринга в бинари и сохраняем. В lv_file_name должен быть полное имя файла включая путь!
Code:
      CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
        EXPORTING
          buffer = pdf
        IMPORTING
          output_length = lv_length
        TABLES
          binary_tab = lt_data_tab.

      CALL METHOD cl_gui_frontend_services=>gui_download
        EXPORTING
          bin_filesize = lv_length
          filename = lv_file_name
          filetype = 'BIN'
        CHANGING
          data_tab = lt_data_tab[]
        EXCEPTIONS

Автор:  ИльнарСР [ Вт, сен 19 2017, 08:49 ]
Заголовок сообщения:  Re: Ошибка при конвертации PDF со спула.

Олег, спасибо за помощь!
От себя только добавил после конвертации из Х-стринга в бинари обратную конвертацию
[code][/
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
EXPORTING
input_length = lv_length
IMPORTING
buffer = pdf
TABLES
binary_tab = l_tab.]

Все заработало.

Автор:  ИльнарСР [ Вт, сен 19 2017, 08:50 ]
Заголовок сообщения:  Re: Ошибка при конвертации PDF со спула.

Олег, спасибо за помощь!
От себя только добавил после конвертации из Х-стринга в бинари обратную конвертацию

Code:
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
      EXPORTING
        input_length = lv_length
      IMPORTING
        buffer       = pdf
      TABLES
        binary_tab   = l_tab.


Все заработало.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/