从 PI java 映射中具有 Base64 有效负载的 URL 获取 PDF 文件



我能够从URL获取PDF文件,将流编码为base 64并将字符串发送给XML文件字段中的第三方,但是当我尝试打开PDF文件解码时,我遇到了下一个问题。

无法提取嵌入的字体"ArialMT,粗体"。某些字符可能无法正确显示或打印。

以下是SAP PI 7.1中Java Mapping的代码:

    urlStr = "Insert here your url";
    StringBuffer data = new StringBuffer();
    URL url = new URL(urlStr);
    URLConnection conn = url.openConnection ();
    // Get the response
    BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    StringBuffer sb = new StringBuffer();
    String line;
    String carriagereturn = System.getProperty("line.separator");
    while ((line = rd.readLine()) != null)
    {
        trace.addWarning(line);
        sb.append(line);
        sb.append(carriagereturn);
    }
    rd.close();
    result = sb.toString();
} catch (Exception e){
    trace.addWarning(e.toString());
}
return org.apache.commons.codec.binary.Base64.encodeBase64String(result.getBytes());

我读过,由于信件的版权,执行InputStreamReader时无法检索字体。是真的吗?

之后是否还有其他

可能使用 iText 库或类似工具嵌入字体?

OP评论说,据他们所知,字体是嵌入的

PDF 由 SAP 生成并存储在内容服务器中。您可以通过 url 访问文件并检查文档属性,嵌入字体。当我恢复 pdf 的流时出现问题,不包括字体。

字体不再被视为嵌入在 PDF 接收器中的原因是,在传输过程中,文件二进制内容很可能被修改。

就其本身而言,将二进制文件干净地转换为 base64 并再次清理应该永远不会更改文件内容。然而,由于该方法涉及额外的故障点,因此可能会出现几个问题,而简单地提供通常为 95+% 的可靠性但也可能是多个故障点的<a href="download.pdf">

base64 中最常见的故障是在任一端(字符串流之外(使用任何其他编码。因此,通常在之前或之后使用字符串函数几乎肯定会破坏字体和/或图像,因为它们是二进制中的二进制单字节流.PDF

如果在创建过程中字体未嵌入到 PDF 中,并且您在打开 PDF 的系统上没有完全相同的字体,则可能会发生这种情况。

pdf 是使用 itext 生成的吗? 在这种情况下,这个答案可以帮助你。否则,请尝试将字体放入系统字体目录中。

编辑:至于第二个问题,有一个小型演示程序可以将字体嵌入到现有的PDF文件中,而字体未嵌入此处

最新更新