cancel
Showing results for 
Search instead for 
Did you mean: 

Sapscript-PDF-Mail error: Insufficient data for an image

marcos_suarezhulet
Participant
0 Kudos

Hi, I've made a function module that takes a Purcharse Orden from spool, converts to PDF file and then send the form via mail. Everything work fine but the corporative logo in the form can't be seen... When I try to open the attachment, Acrobat Reader launchs a popup with the message "Insufficient data for an image" and then ONLY the logo is not displayed.

Here's the MF code. I'll give points to useful answers. Thank you.


FUNCTION Z_WF_SENDMAIL_PO_PDF.
*"----------------------------------------------------------------------
*"*"Interfase local
*"  IMPORTING
*"     VALUE(PO_ORDER) LIKE  EKKO-EBELN
*"     VALUE(DELETE_SPOOL) LIKE  SYST-FTYPE OPTIONAL
*"     VALUE(FILENAME) LIKE  P05T_RESPONSE-FILENAME OPTIONAL
*"     VALUE(RECEPTOR) LIKE  SWHACTOR STRUCTURE  SWHACTOR
*"  EXCEPTIONS
*"      SENDING_FAILURE
*"      CONVERSION_ERROR
*"      NO_SPOOL
*"      UPLOAD_ERROR
*"----------------------------------------------------------------------
 
  DATA: T_TSP01 TYPE TSP01 OCCURS 0 WITH HEADER LINE,
        PDF TYPE TLINE OCCURS 0 WITH HEADER LINE.
  DATA: NUMBYTES TYPE I,
        PDFSPOOLID TYPE TSP01-RQIDENT,
        JOBNAME TYPE TBTCJOB-JOBNAME,
        JOBCOUNT TYPE TBTCJOB-JOBCOUNT,
        SPOOLS TYPE I.
  DATA: gd_cnt TYPE i,
        gd_sent_all(1) TYPE c,
        gd_doc_data LIKE sodocchgi1,
        gd_error TYPE sy-subrc.
 
  DATA: it_packing_list LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE.
  DATA: lt_objpack LIKE sopcklsti1 OCCURS 2 WITH HEADER LINE,
        lt_objhead LIKE solisti1 OCCURS 1 WITH HEADER LINE,
        lt_objbin LIKE solisti1 OCCURS 10 WITH HEADER LINE,
        lt_objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE,
        lt_reclist LIKE somlreci1 OCCURS 5 WITH HEADER LINE,
        l_document_data TYPE sodocchgi1.
 
  DATA: l_att_lines TYPE i,
        gd_buffer type string.
 
  DATA: BEGIN OF lt_mails occurs 0,
          bname like usr21-bname,
          smtp_addr like adr6-smtp_addr,
        END OF lt_mails.
 
************************************************************************
  REFRESH : pdf, it_packing_list.
  CLEAR : pdf, it_packing_list.
 
  SELECT RQIDENT
  INTO T_TSP01-RQIDENT
  FROM TSP01
  WHERE RQOWNER EQ receptor-objid
    AND RQCLIENT EQ SY-MANDT.
    APPEND T_TSP01.
  ENDSELECT.
 
  IF SY-SUBRC NE 0.
    RAISE NO_SPOOL.
  ELSE.
    SORT T_TSP01 DESCENDING.
    READ TABLE T_TSP01 INDEX 1.
 
    CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
      EXPORTING
        SRC_SPOOLID              = T_TSP01-RQIDENT
        NO_DIALOG                = ''
      IMPORTING
        PDF_BYTECOUNT            = NUMBYTES
*        PDF_SPOOLID              = PDFSPOOLID
*        BTC_JOBNAME              = JOBNAME
*        BTC_JOBCOUNT             = JOBCOUNT
      TABLES
        PDF                      = PDF
      EXCEPTIONS
        ERR_NO_OTF_SPOOLJOB      = 1
        ERR_NO_SPOOLJOB          = 2
        ERR_NO_PERMISSION        = 3
        ERR_CONV_NOT_POSSIBLE    = 4
        ERR_BAD_DSTDEVICE        = 5
        USER_CANCELLED           = 6
        ERR_SPOOLERROR           = 7
        ERR_TEMSEERROR           = 8
        ERR_BTCJOB_OPEN_FAILED   = 9
        ERR_BTCJOB_SUBMIT_FAILED = 10
        ERR_BTCJOB_CLOSE_FAILED  = 11
        OTHERS                   = 12.
 
    IF SY-SUBRC NE 0.
      RAISE CONVERSION_ERROR.
    ELSE.
      IF NOT FILENAME IS INITIAL.
        open dataset filename for output in binary mode.
        if sy-subrc ne 0 .
          RAISE UPLOAD_ERROR.
        endif.
 
        loop at pdf.
          transfer pdf to filename.
          if sy-subrc ne 0 .
            RAISE UPLOAD_ERROR.
          endif.
        ENDLOOP.
      ENDIF.
      IF NOT DELETE_SPOOL IS INITIAL.
        DELETE FROM TSP01 WHERE RQIDENT EQ T_TSP01-RQIDENT.
      ENDIF.
 
********************************************************
 
      CHECK NOT ( receptor IS INITIAL ).
 
      CLEAR: lt_reclist, lt_reclist[],
             lt_objhead, lt_objhead[],
             lt_objtxt, lt_objtxt[],
             lt_objbin, lt_objbin[],
             lt_objpack, lt_objpack[].
 
      CLEAR l_document_data.
 
* Chequea si fue bajada la orden de spool
      CHECK NOT ( pdf[] IS INITIAL ).
 
* Transferir los strings de 132 caracters a strings de 255 caracteres.
      loop at pdf.
        translate pdf using ' ~'.
        concatenate gd_buffer pdf into gd_buffer.
      endloop.
 
      translate gd_buffer using '~ '.
 
      do.
        lt_objbin = gd_buffer.
        append lt_objbin.
        shift gd_buffer left by 255 places.
        if gd_buffer is initial.
          exit.
        endif.
      enddo.
 
* Cuerpo del mail
      CONCATENATE 'Se adjunta Pedido de Compra' PO_ORDER INTO lt_objtxt SEPARATED BY SPACE.
      APPEND lt_objtxt.
 
      DESCRIBE TABLE lt_objtxt LINES l_att_lines.
      READ TABLE lt_objtxt INDEX l_att_lines.
 
* Titulo del mail
      l_document_data-obj_descr = 'Envio de Pedido de Compra'.
      l_document_data-obj_name = 'Pedido'.
      l_document_data-sensitivty = 'F'.
      l_document_data-expiry_dat = sy-datum + 10.
      l_document_data-doc_size = ( l_att_lines - 1 ) * 255 + strlen( lt_objtxt ).
      l_document_data-obj_langu = sy-langu.
 
      lt_objhead = 'ORDERS'.
      APPEND lt_objhead.
 
* Configuración del cuerpo del mail
      CLEAR lt_objpack.
      REFRESH lt_objpack.
      lt_objpack-transf_bin = space.
      lt_objpack-head_start = 1.
      lt_objpack-head_num = 0.
      lt_objpack-body_start = 1.
*      lt_objpack-body_num = 1.
      lt_objpack-body_num = l_att_lines.
      lt_objpack-doc_type = 'RAW'.
*      lt_objpack-doc_size = STRLEN( lt_objtxt ).
      APPEND lt_objpack.
 
* Configuración del archivo adjunto del mail
      DESCRIBE TABLE lt_objbin LINES l_att_lines.
      READ TABLE lt_objbin INDEX l_att_lines.
 
      clear lt_objpack.
      lt_objpack-transf_bin = 'X'.
      lt_objpack-head_start = 1.
      lt_objpack-head_num = 1.
      lt_objpack-body_start = 1.
      lt_objpack-body_num = l_att_lines.
      lt_objpack-doc_type = 'PDF'.
      lt_objpack-obj_name = 'Pedido'.
      lt_objpack-obj_descr = 'Pedido de Compra'.
*      lt_objpack-doc_size = ( 255 * ( l_att_lines - 1 ) ) + STRLEN( lt_objbin-line ).
      lt_objpack-doc_size = 255 * l_att_lines.
      append lt_objpack.
 
* Lista de receptores
      SELECT u~bname a~smtp_addr
        FROM usr21 as u
        INNER JOIN adr6 as a
        ON u~persnumber = a~persnumber
        INTO TABLE lt_mails
        WHERE bname = receptor-objid.
 
      LOOP AT lt_mails.
        clear lt_reclist.
        refresh lt_reclist.
        lt_reclist-receiver = lt_mails-smtp_addr.
        lt_reclist-rec_type = 'U'.
        lt_reclist-com_type = 'INT'.
        APPEND lt_reclist.
      ENDLOOP.
 
* Envio del mail
      CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
        EXPORTING
          document_data              = l_document_data
          put_in_outbox              = 'X'
          commit_work                = 'X'
        TABLES
          packing_list               = lt_objpack
          object_header              = lt_objhead
          contents_bin               = lt_objbin
          contents_txt               = lt_objtxt
          receivers                  = lt_reclist
        EXCEPTIONS
          too_many_receivers         = 1
          document_not_sent          = 2
          document_type_not_exist    = 3
          operation_no_authorization = 4
          parameter_error            = 5
          x_error                    = 6
          enqueue_error              = 7
          OTHERS                     = 8.
 
      IF SY-SUBRC NE 0.
        RAISE SENDING_FAILURE.
      ENDIF.
    ENDIF.
  ENDIF.
 
ENDFUNCTION.

Accepted Solutions (1)

Accepted Solutions (1)

former_member196280
Active Contributor
0 Kudos

I guess this could be one of the reasons, check you have authorizations on image.

Regards,

SaiRam

marcos_suarezhulet
Participant
0 Kudos

Could you tell me in which trx I can see that (images authorizations)?

Answers (0)