通过模式使用变量进行翻译

2020-08-14 10:59发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好专家

我使用CONVERT_ABAPSPOOLJOB_2_PDF来将ABAP线轴转换为PDF。 之后,我用翻译命令将132个长字符串转换为255个长字符串。

写作时:

使用'〜'转换ls_pdf_output。

然后在打开pdf时有时可以,但是有时我会收到错误消息"无法提取嵌入式字体…"

写作时:

数据:lv_translate_str TYPE字符串VALUE'〜'

使用lv_translate_str来翻译ls_pdf_output。

然后,当打开pdf时,到目前为止,一切正常。

预先感谢

Hagit

 FORM convert_spool_to_pdf 
使用pv_job_id类型tsp01-rqident
更改pt_mess_att类型esy_tt_solisti1


常量:lc_no(1)TYPE C VALUE''
,lc_device(4)类型c值'LOCL'


数据:lt_pdf_output tline的类型表
,lv_buffer TYPE字符串
,ls_mess_att TYPE solisti1"如pt_mess_att的行


通话功能'CONVERT_ABAPSPOOLJOB_2_PDF'
出口
src_spoolid = pv_job_id
no_dialog = lc_no
dst_device = lc_device
*导入
* pdf_bytecount =
表格
pdf = lt_pdf_output
例外情况
err_no_abap_spooljob = 1
err_no_spooljob = 2
err_no_permission = 3
err_conv_not_possible = 4
err_bad_destdevice = 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
其他=12。
如果sy-subrc <> 0.
RAISE no_conv2pdf。
ELSE。
数据:lv_translate_str TYPE字符串值'〜'
,lv_translate_back_str TYPE字符串VALUE'〜'


*将132个长字符串转换为255个长字符串
循环AT lt_pdf_output INTO DATA(ls_pdf_output)。
*使用'〜'转换ls_pdf_output。
使用lv_translate_str来翻译ls_pdf_output。
合并lv_buffer ls_pdf_output INTO lv_buffer。
ENDLOOP。

*使用'〜'转换lv_buffer。
使用lv_translate_back_str转换lv_buffer。


ls_mess_att = lv_buffer。
附加ls_mess_att至pt_mess_att。
左移lv_buffer 255个位置。
如果lv_buffer是INITIAL。
退出。
ENDIF。
ENDDO。
ENDIF。


ENDFORM。 " convert_spool_to_pdf

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好专家

我使用CONVERT_ABAPSPOOLJOB_2_PDF来将ABAP线轴转换为PDF。 之后,我用翻译命令将132个长字符串转换为255个长字符串。

写作时:

使用'〜'转换ls_pdf_output。

然后在打开pdf时有时可以,但是有时我会收到错误消息"无法提取嵌入式字体…"

写作时:

数据:lv_translate_str TYPE字符串VALUE'〜'

使用lv_translate_str来翻译ls_pdf_output。

然后,当打开pdf时,到目前为止,一切正常。

预先感谢

Hagit

 FORM convert_spool_to_pdf 
使用pv_job_id类型tsp01-rqident
更改pt_mess_att类型esy_tt_solisti1


常量:lc_no(1)TYPE C VALUE''
,lc_device(4)类型c值'LOCL'


数据:lt_pdf_output tline的类型表
,lv_buffer TYPE字符串
,ls_mess_att TYPE solisti1"如pt_mess_att的行


通话功能'CONVERT_ABAPSPOOLJOB_2_PDF'
出口
src_spoolid = pv_job_id
no_dialog = lc_no
dst_device = lc_device
*导入
* pdf_bytecount =
表格
pdf = lt_pdf_output
例外情况
err_no_abap_spooljob = 1
err_no_spooljob = 2
err_no_permission = 3
err_conv_not_possible = 4
err_bad_destdevice = 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
其他=12。
如果sy-subrc <> 0.
RAISE no_conv2pdf。
ELSE。
数据:lv_translate_str TYPE字符串值'〜'
,lv_translate_back_str TYPE字符串VALUE'〜'


*将132个长字符串转换为255个长字符串
循环AT lt_pdf_output INTO DATA(ls_pdf_output)。
*使用'〜'转换ls_pdf_output。
使用lv_translate_str来翻译ls_pdf_output。
合并lv_buffer ls_pdf_output INTO lv_buffer。
ENDLOOP。

*使用'〜'转换lv_buffer。
使用lv_translate_back_str转换lv_buffer。


ls_mess_att = lv_buffer。
附加ls_mess_att至pt_mess_att。
左移lv_buffer 255个位置。
如果lv_buffer是INITIAL。
退出。
ENDIF。
ENDDO。
ENDIF。


ENDFORM。 " convert_spool_to_pdf
付费偷看设置
发送
6条回答
打个大熊猫
1楼 · 2020-08-14 11:43.采纳回答
 DATA lv_translate_back_str TYPE字符串VALUE'〜'。
 使用lv_translate_back_str转换lv_buffer。
 

与使用'〜'的TRANSLATE lv_buffer不同。

是因为,如翻译

  • " 数据对象文本和掩码中的尾随空白适用于数据对象":在第二种情况下,尾随的空白在那里,因此lv_buffer的所有〜都替换为空格。
  • " 如果mask包含奇数个字符,则忽略最后一个字符":在第一种情况的DATA语句中,值'〜'的尾部空格(即 类型C和长度2,因为它是使用直/引号定义的)被忽略,并且字符串最终仅由一个字符组成(波浪号〜),因此TRANSLATE不会替换〜,因为它是掩码的最后一个字符,因此被忽略 解决方案:要使这两种形式等效,请将这两个字符定义为2个字符的STRING,并使用反引号将其尾部空格替换为奇数个字符(1)。

在分配过程中保存:

数据lv_translate_back_str TYPE字符串VALUE`〜`。

PS:我说的与PDF无关,是ABAP固有的。 关于 CONCATENATE ,您可以使用附加的RESPECTING BLANKS 而不是使用TRANSLATE技巧来保持空白是非常危险的,因为在使用TRANSLATE之前PDF可能包含波浪号,并猜测会发生什么...

大简至美
2楼-- · 2020-08-14 11:44

感谢您的反馈。 如果您想"奖励"我,请继续遵循SAP社区的参与规则 。 支持有帮助的答案,或无用的答案,选择"最佳答案"(按钮"接受",如目前所做的那样),以正确的理由结束问题。 谢谢!

昵称总是被占用
3楼-- · 2020-08-14 11:59

Sandra Rossi

感谢您的完美解释。

在我在网络上找到的所有示例中,都使用了翻译。

先前的代码是否等同于下面的代码?

 IF sy-subrc <> 0。
 RAISE no_conv2pdf。
 ELSE。
 *数据:lv_translate_str TYPE字符串VALUE'〜'
 *,lv_translate_back_str TYPE字符串VALUE`〜`
 **,lv_translate_back_str TYPE字符串VALUE'〜'。
 *将132个长字符串转换为255个长字符串
 LOOP AT lt_pdf_output INTO DATA(ls_pdf_output)。
 **使用'〜'来翻译ls_pdf_output。
 *使用lv_translate_str来翻译ls_pdf_output。
 * CONCATENATE lv_buffer ls_pdf_output INTO lv_buffer。
将lv_buffer ls_pdf_output并入lv_buffer尊重空白。
 ENDLOOP。
 **使用'〜'转换lv_buffer。
 *使用lv_translate_back_str来翻译lv_buffer。
 做。
  ls_mess_att = lv_buffer。
 APPEND ls_mess_att至pt_mess_att。
将lv_buffer左移255个位置。
如果lv_buffer是INITIAL。
退出。
 ENDIF。
 ENDDO。
 ENDIF。

谢谢

Hagit

超级大咸鱼
4楼-- · 2020-08-14 11:40

我看着 参与规则,但没有找到如何奖励积分的参考。

您能否更详细地解释我该怎么做才能奖励积分? 在某些链接中,我看到答案旁边应该出现一个星星以便奖励。 但我看不到任何星星

打一壶酱油
5楼-- · 2020-08-14 11:50

您的意思是"对有助于解决问题的答案进行投票,对不起作用的答案进行投票"是指单击箭头(黄色) )? 我最多可以给2。这是什么意思? 然后,我只需要关闭线程?

梦想连接
6楼-- · 2020-08-14 11:57

最重要的是,您必须绝对使用参数pdf_bytecount来修剪多余的字节。

代码的问题是只处理字符,必须将字符转换为字节,然后才能修剪多余的字节。

最后,代码会附加 PDF到"某处",并且必须使用字节而不是字符来完成。 如果对字符进行处理,可能会遇到问题。

一周热门 更多>