设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 6117|回复: 8
打印 上一主题 下一主题

[与其它组件] 【分享】PDF输出的另类玩法——使用XFDF填充报表

[复制链接]
跳转到指定楼层
1#
发表于 2015-7-14 15:42:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 roych 于 2015-7-14 15:58 编辑

       前天在图书馆借了本《Access 2013 web编程》,打算在培训群里装一下十三的。前面十四章都是关于Access Web应用程序,于是昨天就激活了小妖姐姐去年给的Office365账号【灰常感谢{:soso_e142:}】,打算具体测试一下SharePoint的,感觉Access web程序还行,应该是用ASP.NET来完成远程交互的。所以VBE被取消了,只能写数据宏或者普通宏来完成交互,而且增加了不少内置函数,比较接近JavaScript的内置函数,具体机制还没研究……可惜只有30天试用期,看来得抓紧时间测试了。              
       第二部分匆匆浏览一遍,觉得有些东西还是可以跟大家分享下的。稍稍消化下,就过来发帖了。{:soso_e113:}

       第一个想说的是,使用XFDF填充表单。和论坛的导出PDF报表相比,优缺点如下:

项目优点 缺点
PDF导出报表
  • 可以按记录导出
  • 允许导出复杂报表,所见即所得
  • 代码较为复杂,可能不易维护
  • 由于引用第三方控件,部分电脑可能无法执行或出错
XFDF填充表单
  • 代码相对简单,易于维护
  • 格式固定,适用于汇总类报表
  • 使用了域文本,只能按固定格式填充。
  • 需要预先设置好表单格式。

      具体做法是先设置好固定格式的表单,插入文本和域文本,保存为模板,然后创建XML格式的XFDF文件①,再执行即可生成PDF文件②,具体效果如下:

习惯上,还是先贴代码:
  1. Private Sub 提交_Click()
  2. '
  3. Const strPDF As String = "PDFDemo.pdf"
  4. Const strXFDF As String = "theDBguy.xfdf"

  5. Dim strPath As String
  6. Dim intFile As Integer
  7. '加上控件方便写循环语句。
  8. Dim ctr As Control

  9. strPath = CurrentProject.Path
  10. intFile = FreeFile
  11. '需用二进制方式写入,用OpenTextFile方式测试没成功。
  12. Open strPath & "" & strXFDF For Output As #intFile
  13. 'UTF-8不支持汉字,需改为GB2312或者GBK编码。
  14. Print #intFile, "<?xml version=""1.0"" encoding=""GBK""?>"
  15. Print #intFile, "<xfdf xmlns=""http://ns.adobe.com/xfdf/"" xml:space=""preserve"">"
  16. Print #intFile, "<f href=""" & strPDF & """/>"
  17. Print #intFile, "<fields>"
  18. For Each ctr In Me.Controls
  19.     If ctr.ControlType = acTextBox Or ctr.ControlType = acComboBox Then
  20.         Print #intFile, "<field name=""" & ctr.Name & """>"
  21.         Print #intFile, "<value>" & ctr.Value & "</value>"
  22.         Print #intFile, "</field>"
  23.     End If
  24. Next
  25. Print #intFile, "</fields>"
  26. Print #intFile, "</xfdf>"
  27. Close #intFile
  28. ShellEx strPath & "" & strXFDF
  29. 'ShellEx是封装后的ShellExecute API函数,这里就不贴了。详细见附件
  30. End Sub
复制代码

注:
       ①:源文件是一行行输入的。我嫌麻烦,就稍稍改了代码,使用了循环。另外,XFDF格式使用Name属性必须加上双引号【不加双引号时会出错,单引号没试过。】
       ②:生成PDF表单,详见二楼图解。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2015-7-14 15:42:35 | 只看该作者
本帖最后由 roych 于 2015-7-14 15:49 编辑

PDF表单的制作:先创建一个文本文档【反正我手头上的版本是无法从Excel或者Word导入表单的】


选择从文件创建PDF,即可得到一个PDF文档。

右击空白处,选择编辑文本和图像

在右侧的菜单栏选择需要的功能完成表单制作,保存文件即可。

如果不想域数据被更改,可以在域的属性上设置“只读”
——“只读”指的是用ADOBE Reader打开文档时无法删除数据,但是ADOBE Acrobat还是可以编辑的,而且 XFDF的数据也可以写进去。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

点击这里给我发消息

3#
发表于 2015-7-14 16:04:06 | 只看该作者
最近也在使用Office365,我有账号,但不知道如何延长使用时间。好久没用了
4#
发表于 2015-7-14 16:38:24 | 只看该作者
{:soso_e103:}看图示,是先建个模板,然后根据模板格式输出xml(或说根据xml格式建pdf模板),再启动模板并将xml传递给它,流程是这样吧?
5#
 楼主| 发表于 2015-7-14 16:44:29 | 只看该作者
风中漫步 发表于 2015-7-14 16:38
看图示,是先建个模板,然后根据模板格式输出xml(或说根据xml格式建pdf模板),再启动模板并将xml ...

原理是这样,也只有这样才比较节省代码。对于格式固定的汇总类报表,或者填写表单提交之类应该是比较方便的。
6#
 楼主| 发表于 2015-7-14 16:49:35 | 只看该作者
admin 发表于 2015-7-14 16:04
最近也在使用Office365,我有账号,但不知道如何延长使用时间。好久没用了

虽然家里装了Access 2013,但新功能一直都没用,所以想看看Access web方向怎么样。
现在看来Access CDN也是挺麻烦的,如果没有免费的第三方托管网站,估计使用SharePoint/Office 365的只能是一部分企业用户了,——虽然一年只有几百块。
7#
发表于 2015-7-14 21:20:19 | 只看该作者
不看好。
这可能是又一出access数据页的结局
何况,infopath可是配合c#的,可谓福比天高。但结果命比纸薄

点击这里给我发消息

8#
发表于 2015-7-14 21:35:06 | 只看该作者
企业客户已经有一大部分客户转过去了。云已经是大趋势。微软云的占有率还是比较高的,相对于手机的不争气
9#
发表于 2015-7-17 07:10:07 | 只看该作者
OFFICE2013 365 淘宝有激活码买,几元钱,买一个就行。还有你可以使用小马哥的激活工具激活也是可以的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-29 22:36 , Processed in 0.093858 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表