在 vba 中创建带有图片的 VCF 卡

Posted

技术标签:

【中文标题】在 vba 中创建带有图片的 VCF 卡【英文标题】:Create VCF card with picture in vba 【发布时间】:2015-04-26 17:46:14 【问题描述】:

我在 MS Access 中有一个包含联系人信息的数据库和一个包含所有图片的单独文件夹。我想创建嵌入图片的 vcf 卡。从数据库中提取信息并读取图片的代码有效,但创建卡片的代码无效(可能是因为 base64)。你能帮帮我吗?

Private Function encodeBase64(ByRef arrData() As Byte) As String

Dim objXML As Object
Dim objNode As Object

Set objXML = CreateObject("MSXML2.DOMDocument")
Set objNode = objXML.createElement("Base64Data")
objNode.DataType = "bin.base64"
objNode.nodeTypedValue = arrData
encodeBase64 = objNode.text

Set objNode = Nothing
Set objXML = Nothing

End Function

Private Sub createVCF()

Dim objXML As Object
Dim objNode As Object
Dim encode As String
Dim image_bin() As Byte

'read image
file = CurrentProject.Path & "\" & "photo.jpg"
Open file For Binary Access Read As #1
ReDim image_bin(LOF(1) - 1)
Get #1, , image_bin
Close #1

'encode
encode = encodeBase64(image_bin)

'create vcf
Open CurrentProject.Path & "\" & "card_test.vcf" For Append Access Write As 2
Print #2, "BEGIN:VCARD"
Print #2, "VERSION:3.0"
Print #2, "N;CHARSET=WINDOWS-1252;ENCODING=QUOTED-PRINTABLE:;" & "Doe" & ";" & "John" & ";;;;;"
Print #2, "NAME;CHARSET=WINDOWS-1252;ENCODING=QUOTED-PRINTABLE:" & "John" & " " & "Doe"
Print #2, "NOTE;CHARSET=WINDOWS-1252;ENCODING=QUOTED-PRINTABLE:" & "From MS Access"
Print #2, "TEL;Work:" & "1234"
Print #2, "TEL;Cell:" & "4321"
Print #2, "EMAIL;Work:" & "john.doe@doe.com"
Print #2, "ADR;WORK:;;" & "Building A" & " - " & "2B" & ";;;;"
Print #2, "PHOTO;ENCODING=BASE64:" & encode
Print #2, "END:VCARD"
Close #2

Set objNode = Nothing
Set objXML = Nothing
End Sub

谢谢你,阿诺

【问题讨论】:

您能否更清楚地说明代码中的问题究竟出在哪里? 打开 vcard 时 Outlook 不显示图片 【参考方案1】:

如 VCard 规范中所述,您需要在 VCard 文件中的每个折叠(换行)行中添加一个前导空格。 https://www.rfc-editor.org/rfc/rfc6350#section-3.2

在这种情况下,这适用于您的 Base64 图像数据。

为了实现这一点,将 Base64 数据中的所有 LF(换行符)替换为 LF 后跟空格。

'encode
encode = Replace(encodeBase64(image_bin), vbLf, vbCrLf & Space(1))

当我们这样做时,代码也将 LF 替换为 CRLF,因为这是规范所要求的。 - 虽然它对 Outlook 没有任何影响。

【讨论】:

它有效。它对 Outlook 有所不同。非常感谢。

以上是关于在 vba 中创建带有图片的 VCF 卡的主要内容,如果未能解决你的问题,请参考以下文章

在 Excel VBA 中创建文件夹和子文件夹

React Native - 尝试在反应导航中创建一个带有选项卡导航器的抽屉,而不呈现选项卡的抽屉项目

在菜单栏中创建带有文本的分隔符

如何在 html 中创建带有 4 个选项卡的菜单,该菜单将在一页上显示内容?

如何在android中创建带有下划线文本的Textview [重复]

手机拍照及简单的图片压缩