0

次のような Hexa 文字列バイトストリームの形式で利用できる pdf ファイルがあります。

"255044462D312E330D0A25E2E3CFD30D0A322030206F626A......"

(非常に長い文字列なので、形式を指定しました)これは、ブラウザで使用できる文字列形式です。

これを 16 進形式に変換して、この出力ストリームを pdf ファイルに書き込んで Web ブラウザーで pdf をレンダリングできるようにする必要があります。組み込み関数があるかどうか、または Javascript でこれを実現できる方法があるかどうかを知る必要があります。

この機能の実装は Java で簡単であることはわかっていますが、ABAPこの文字列のみをフェッチするバックエンドとSAPUI5、Javascript ベースのフレームワークであるフロント エンドがあります。

データが正しいかどうかをテストするためだけに PDF を生成する単純な Java プログラムを作成して、このバイトストリームの有効性を確認しました。

public static void main(String[] args) {
  FileOutputStream fop = null;
  File file;
  file = new File("C:/Users/I074098/Desktop/Project Temps/test.pdf");
  fop = new FileOutputStream(file);
  // if file doesnt exists, then create it
  if (!file.exists()) {
    file.createNewFile();
  }
  //I manually added "(byte) 0x" in the above string and 
  //converted it to the following format, I skipped that conversion in this code
  byte[] contentInBytes = new byte[]{
    (byte) 0x25,(byte) 0x50,(byte) 0x44,(byte) 0x46, .....
  } 
  fop.write(contentInBytes);
    fop.flush();
    fop.close();
  } 

これにより、pdfが生成されます。しかし、私はそれが非常に非効率的であることを知っており、これがすべて JavaScript で実行できるかどうかはわかりません。私は多くの検索を行いましたが、実りはありませんでした。どんな助けにも感謝します。

よろしく、 リスワン

4

1 に答える 1

2
   //  To IE Boat method is here,

        if (!window.btoa) {
    var tableStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    var table = tableStr.split("");

    window.btoa = function (bin) {
    for (var i = 0, j = 0, len = bin.length / 3, base64 = []; i < len; ++i) {
    var a = bin.charCodeAt(j++), b = bin.charCodeAt(j++), c = bin.charCodeAt(j++);
    if ((a | b | c) > 255) throw new Error("String contains an invalid character");
    base64[base64.length] = table[a >> 2] + table[((a << 4) & 63) | (b >> 4)] +
    (isNaN(b) ? "=" : table[((b << 2) & 63) | (c >> 6)]) +
    (isNaN(b + c) ? "=" : table[c & 63]);
    }
    return base64.join("");
    };
    } 

      //script block
      // try this way  to open you pdf file like this in javascript hope it will help you.
        function hexToBase64(str)
          {
         return btoa(String.fromCharCode.apply(null,str.replace(/\r|\n/g, "").replace(/([\da-fA-F]{2}) ?/g, "0x$1 ").replace(/ +$/, "").split(" ")));
          }

          var data=   hexToBase64("255044462D312E330D0A25E2E3CFD30D0A322030206F626A");// here pass the big hex string

            // it will be open in the web browser like this
            document.location.href = 'data:application/pdf;base64,' +data;

     **//to open up in the new window**
    window.open('data:application/pdf;base64,' +data, "_blank", "directories=no, status=no, menubar=no, scrollbars=yes, resizable=no,width=600, height=280,top=200,left=200");
于 2012-06-21T06:29:58.707 に答える