将PDF读入blob,然后作为附件发送

将PDF读入blob,然后作为附件发送,pdf,powerbuilder,email-attachments,Pdf,Powerbuilder,Email Attachments,我试图将PDF读入blob对象,然后将其插入我的oracle数据库,以便将其作为附件发送出去。现在,电子邮件部分正在工作,它添加了一个附件,但附件总是损坏,我无法打开它。下面是我创建blob pdf的代码,有人能帮我找出为什么这不能创建正确的附件吗 ls_pdf_name = ls_pdf_path + "\" + "invnum_" + ls_invoice + ".pdf" ls_pdf_filename = "invoice_" + ls_invoice + ".pdf" ls_rc

我试图将PDF读入blob对象,然后将其插入我的
oracle数据库
,以便将其作为附件发送出去。现在,电子邮件部分正在工作,它添加了一个附件,但附件总是损坏,我无法打开它。下面是我创建blob 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)
编辑

因此,我采纳了卡尔文的建议,将插入内容改为:

下面是将blob放入表中的
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打开时出现以下错误-无法打开,因为它不是受支持的文件类型,或者因为它已被损坏(例如,它作为电子邮件附件发送,未正确解码)


谢谢

PDF文件有多大


您可能无法通过简单的
FileRead()
获取所有内容-请尝试使用
FileReadEx()

首先要检查pdf是否正确保存在数据库中:

  • 将pdf文件插入数据库后,不要删除该文件
  • 使用sql解释器计算插入文件的blob列的大小,并验证它是否与文件大小匹配。 您没有提到正在使用的数据库,例如,在ms sql server中,您可以使用datalength()函数来完成此操作。根据数据库的不同,您可以通过计算其md5散列来检查pdf是否损坏
  • 如果使用功能强大的查询工具(例如TOAD for Oracle),则可以将blob保存为pdf文件并验证其可读性

它们的大小可能在200-300KB左右,我想这比32k的FileRead()要大?我尝试了FileReadEx,但同样的问题
li_bytes
声明为什么?您能显示
wf\u update\u pdf\u tables
函数吗?
li\u bytes
是一个整数,我将发布pdf tables函数,pdf table会插入相应的表中。我不能在没有大量编辑的情况下发布,而您正在该函数中使用INSERTBLOB/UPDATEBLOB?你能把它贴到邮件上吗?也许写回文件有问题。你把原始的PDF和电子邮件上的PDF进行了比较吗?只是PDF的结尾部分丢失了吗?还是两者之间存在差异?后者可能表示在数据库访问期间或在邮件中存在编码问题。@mkl一旦将pdf放入数据库中,我实际上无法打开它。它说它是腐败的,这就是为什么我认为把它放入数据库是一个问题。你看过PDF文件,找出它腐败的方式了吗?腐败的类型可能暗示了腐败的原因。我如何找到这些信息?它没有给我任何错误代码或任何东西。只是adobe reader说它无法打开。请提供这样一个损坏的PDF样本进行检查。