繁体   English   中英

如何在 C# 中显示来自 SAP RFC 的 pdf

[英]How to display a pdf from an SAP RFC in C#

在我的 C# 应用程序中,我正在调用 SAP RFC,它返回 pdf 的二进制格式(SAP 中的关联类型是 HRB2A_TAB_RAW255)。

但是,当我读取 C# 中返回的数据时,它是一个字符串数据类型 - “255044462D312E330D0A25E2E3CF...等”。

Response.Binarywrite 需要一个字节数组,而不是二进制数据的字符串表示。

当它作为字符串数据类型出现时,我如何使用该二进制数据块?

=======================================

更新2:最后,我让它工作了。

由于每一行都是一个 255 字节的数组,我使用 Array.Copy 创建一个单行,其中元素数 = 255 * 从 SAP 返回的行

IRfcFunction uploadFile = rfcrep.CreateFunction("ZTEST_BOL");
IRfcTable fileBin = uploadFile.GetTable("BIN");
uploadFile.SetValue("SHIPMENT_NO", "701324577");
uploadFile.Invoke(dest);

int len;
byte binary = new byte[255 * fileBin.RowCount + 1];

for (int i = 0; i <= fileBin.RowCount - 1; i++)
{
    fileBin.CurrentIndex = i;

    if(i==0)
    {
      Array.Copy(fileBin.CurrentRow.GetByteArray("CONTENT"), 0, binary, 0, 
        fileBin.CurrentRow.GetByteArray("CONTENT").Length);
      len = fileBin.CurrentRow.GetByteArray("CONTENT").Length;
    }
    else
    {
    Array.Copy(fileBin.CurrentRow.GetByteArray("CONTENT"), 0, binary, len, 
          fileBin.CurrentRow.GetByteArray("CONTENT").Length);
    len += fileBin.CurrentRow.GetByteArray("CONTENT").Length;
    }
}

System.IO.File.WriteAllBytes(@"C:\Projects\hello.pdf", binary);

我认为,如果我理解正确,您需要的是:

System.Text.ASCIIEncoding.Default.GetBytes("255044462D312E330D0A25E2E3CF...etc")

它可能不是你所拥有的 Ascii,但 System.Text 有一些字符串编码器。 您可以使用它们将字符串转换为字节并再次转换回来。

由于HRB2A_TAB_RAW255是一个原始表,其中每一行都是HRB2A_RAW255类型的字段,它是原始数据,因此该表的每一行可能都是一个字节数组。

考虑 SAP 中的这个映射表: RFC To .NET 数据类型映射

你可以尝试这样的事情:

foreach (IRfcStructure row in sapTable)
        {
            DataTable loTable = new DataTable();
            for (int liElement = 0; liElement < sapTable.ElementCount; liElement++)
            {
                RfcElementMetadata metadata = sapTable.GetElementMetadata(liElement);

                byte[] binary = new byte[255];
                binary  = row.GetByte(metadata.Name);
                ldr[metadata.Name] = binary;
            }
            loTable.Rows.Add(ldr);
        }
        return adoTable;
    }

不要从字面上说,这只是一个快速的镜头,我什至不知道它是否有效。 你也可以检查这个

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM