首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建公司卡w/ Vpim Gem

创建公司卡w/ Vpim Gem
EN

Stack Overflow用户
提问于 2011-07-03 04:16:14
回答 2查看 1.2K关注 0票数 4

我使用Vpim生成.vcf文件,然后用户可以将这些文件导入他们的地址簿。我的问题是,他们下载的信息是给公司的,而不是给个人的,所以我需要把卡片标记为这样。是否有一种使用Vpim来完成此操作的方法?还是有另一种创业板可以用来完成这一任务?

代码语言:javascript
复制
def to_vcf
  card = Vpim::Vcard::Maker.make2 do |maker|
  ...
  end
end

来自地址簿的名片的源

代码语言:javascript
复制
BEGIN:VCARD
VERSION:3.0
N:;;;;
FN:The Flow Skatepark
ORG:The Flow Skatepark;
item1.TEL;type=pref:(614) 864-1610
item1.X-ABLabel:Work #
item2.ADR;type=WORK;type=pref:;;4252 Groves Rd;Columbus;OH;43232;USA
item2.X-ABADR:us
BDAY;value=date:2001-07-06
X-ABShowAs:COMPANY
X-ABUID:5F7349CB-369F-4EAC-AB65-49ED902BEF9F\:ABPerson
END:VCARD

来自地址簿的非名片的源

代码语言:javascript
复制
BEGIN:VCARD
VERSION:3.0
N:;The Flow Skatepark;;;
FN:The Flow Skatepark
item1.TEL;type=pref:(614) 864-1610
item1.X-ABLabel:Work #
item2.ADR;type=WORK;type=pref:;;4252 Groves Rd;Columbus;OH;43232;USA
item2.X-ABADR:us
BDAY;value=date:2001-07-06
X-ABUID:5F7349CB-369F-4EAC-AB65-49ED902BEF9F\:ABPerson
END:VCARD

显然,在这些代码示例中有两个主要区别:

  • ORG: Flow Skatepark;
  • X-ABShowAs:公司

不过,我不知道这如何转化为Vpim。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-11 19:34:21

快速而肮脏的实现,我希望我能正确地理解你:

代码语言:javascript
复制
require 'vpim/vcard'

vcards = <<VCARD
BEGIN:VCARD
VERSION:3.0
N:;;;;
FN:The Flow Skatepark
ORG:The Flow Skatepark;
item1.TEL;type=pref:(614) 864-1610
item1.X-ABLabel:Work #
item2.ADR;type=WORK;type=pref:;;4252 Groves Rd;Columbus;OH;43232;USA
item2.X-ABADR:us
BDAY;value=date:2001-07-06
X-ABShowAs:COMPANY
X-ABUID:5F7349CB-369F-4EAC-AB65-49ED902BEF9F\:ABPerson
END:VCARD
BEGIN:VCARD
VERSION:3.0
N:;The Flow Skatepark;;;
FN:The Flow Skatepark
item1.TEL;type=pref:(614) 864-1610
item1.X-ABLabel:Work #
item2.ADR;type=WORK;type=pref:;;4252 Groves Rd;Columbus;OH;43232;USA
item2.X-ABADR:us
BDAY;value=date:2001-07-06
X-ABUID:5F7349CB-369F-4EAC-AB65-49ED902BEF9F\:ABPerson
END:VCARD
VCARD

contacts = []
Vpim::Vcard.decode(vcards).each do |vcard|
  contacts << {
    first_name:        vcard.name      ? vcard.name.given         : '',
    last_name:         vcard.name      ? vcard.name.family        : '',
    organisation_name: vcard.org       ? vcard.org.first          : '',
  }
end

def to_vcard(card)
  Vpim::Vcard::Maker.make2 do |maker|
    maker.add_name do |name|
      name.given = card[:first_name] unless card[:first_name].empty? || card[:first_name].nil?
      name.family = card[:last_name] unless card[:last_name].empty?  || card[:last_name].nil?
    end
    maker.org = card[:organisation_name] unless card[:organisation_name].empty? || card[:organisation_name].nil?
  end
end

contacts.each_with_index do |contact, idx|
  File.open("contact#{idx}.vcf", 'w') {|f| f.write(to_vcard(contact)) }  
end

票数 3
EN

Stack Overflow用户

发布于 2011-07-10 09:25:21

看起来maker对象有一个org=方法,您可以使用它来设置ORG。至于,maker有一个add_field方法.您可能可以为此创建自己的字段(http://vpim.rubyforge.org/classes/Vpim/DirectoryInfo/Field.html)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6561061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档