[英]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.