2

PDF を blob オブジェクトに読み込んでからoracle database、添付ファイルとして送信できるように INSERT を実行しようとしています。現在、電子メール部分が機能しており、添付ファイルが追加されていますが、添付ファイルは常に破損しており、開くことができません。以下は、ブロブ pdf を作成するコードです。これが適切な添付ファイルを作成しない理由を理解するのを手伝ってもらえますか?

ls_pdf_name = ls_pdf_path + "\" + "invnum_" + ls_invoice + ".pdf"  
ls_pdf_filename = "invoice_" + ls_invoice +  ".pdf"
ls_rc = wf_check_pdf_status(ll_invoice_number, ls_sub_type, ll_user_supp_id)
If ls_rc = "Y" Then
    li_fnum = FileOpen(ls_pdf_name, StreamMode!)
    li_bytes = FileRead(li_fnum, bPDF)
    FileClose(li_fnum)
    ll_rc = wf_update_pdf_tables(bPDF, ls_pdf_filename, ls_sub_type, ll_user_supp_id, ll_invoice_number, ls_month, ls_year)

編集

そこで、Calvin のアドバイスを受けて、挿入を次のように切り替えました。

INSERTブロブをテーブルに入れるステートメントは次のとおりです

INSERT INTO ATTACH_DOCUMENT
(id, filename, mime_type, date_time_created)
VALUES
(ATTACH_DOCUMENT_SEQ.NEXTVAL, :pdf_filename, 'application/pdf', CURRENT_TIMESTAMP);

UPDATEblob ATTACH_DOCUMENT
SET data = :pdf
WHERE id = ATTACH_DOCUMENT_SEQ.CURRENTVAL;

しかし、電子メールから PDF 電子メールの添付ファイルを開こうとすると、Adobe が次のエラーで開きます。正しくデコードされませんでした)

ありがとう

4

2 に答える 2

2

PDFファイルのサイズは?

単純な方法ではすべてのコンテンツを取得できない場合がありますFileRead()-使用してみてくださいFileReadEx()

于 2012-11-29T20:27:12.297 に答える
0

最初に行うことは、pdf がデータベースに正しく保存されているかどうかを確認することです。

  • データベースに挿入された後、pdf ファイルを削除しないでください。
  • SQL インタープリターを使用して、ファイルを挿入した BLOB 列のサイズを計算し、それがファイル サイズと一致することを確認します。使用しているデータベースについては言及していません。たとえば、ms sql サーバーでは、datalength() 関数を使用してこれを行うことができます。データベースによっては、md5 ハッシュを計算して、pdf が破損しているかどうかを確認できます。
  • 有能なクエリ ツール (Oracle の TOAD など) を使用する場合は、ブロブを pdf ファイルとして保存し、それが読み取り可能であることを確認できます。
于 2012-11-30T14:00:41.050 に答える