目前我正在使用pdfcreator将报告转换为pdf格式。由于必须手动完成,我正在寻找一种自动将报告保存为pdf文件的解决方案。代码应该在Access 2000和更新版本中工作。
答案 0 :(得分:3)
我们正在使用Stephen Lebans' ReportToPDF生成PDF文件 我们使用Access 2003,它适用于A2000,2002和2003(A2007具有开箱即用的PDF支持)。
它只包含两个需要在您的应用程序文件夹或%windir%\system32
文件夹中的DLL,它们不需要注册。
我们更倾向于使用此解决方案而不是PDF打印机,因为只复制两个文件比在每台计算机上安装PDF打印机更容易。
答案 1 :(得分:1)
我之前使用过这种方法:http://bytes.com/topic/access/answers/204362-howto-automate-printing-access-reports-pdf-files
这是我用于自动打印Microsoft Access的方法 报告为PDF格式,即无人值守且无烦恼"另存为..." 对话框,更重要的是 - 无需使用商业广告 程序,如Adobe Acrobat及其相关的API。
该技术使用Ghostscript和Redirection Port Monitor - 两个免费 Russell Lang免费提供创建PDF文档的程序。该 实际自动化需要使用FileSystemObject进行VBA编码, WScript.Network(Windows脚本宿主网络对象)和Access 自动化。
<强>说明强>
1)安装Ghostscript - Postscript语言和PDF的翻译 http://www.cs.wisc.edu/~ghost/
2)安装RedMon - 重定向端口监视器 - 将特殊打印机端口重定向到程序(例如 Ghostscript的) http://www.cs.wisc.edu/~ghost/redmon/
3)使用Ghostscript和Redmon设置虚拟PDF打印机 - 这是两个网页,解释如何安装 以上工具: http://masterdev.dyndns.dk/know/freepdf.html http://stat.tamu.edu/~henrik/GSWriter/GSWriter.html
4)配置PDF虚拟打印机使用的RedMon打印机端口 以下内容: - 输出:&#34;程序处理输出&#34; - 新的PDF文件应始终保存到同一文件,即 C:\ TEMP \输出.pdf
将此用于&#34;程序参数&#34;设置: @c:\ gs \ pdfconf.txt -sOutputFile =&#34; C:\ temp \ output.pdf&#34; -c .setpdfwrite -f -
(注意文字文件路径而不是&#34;%1&#34;)
5)编写自己的Visual Basic代码,将报告打印到pdf 然后使用FileSystemObject将其复制到您的名称/位置 艇员选拔。使用WScript.Network对象更改默认打印机 从您通常的默认打印机到PDF打印机再返回。
示例代码(Access Visual Basic):
Sub PrintReportToPDF(strReport as String, _
strOutputPath as String)
Const PDF_PRINTER as String = "PDF Printer"
Const ORIGINAL_PRINTER as String = "\\OFFICE\HP1320"
Const TEMP_PATH as String = "C:\temp\output.pdf"
Dim net as WScript.Network
Dim fso as Scripting.FileSystemObject
Set net = new WScript.Network
net.setDefaultPrinter PDF_PRINTER
DoCmd.OpenReport strReport
Set fso = New Scripting.FileSystemObject
fso.CopyFile TEMP_PATH, strOutputPath, True
fso.DeleteFile TEMP_PATH
Set fso = Nothing
net.setDefaultPrinter ORIGINAL_PRINTER
Set net = Nothing
End Sub
要使上述代码在Access 2000中工作,您必须添加 对Microsoft Scripting Runtime和Windows Script Host的引用 对象模型。
到目前为止,我的经验是子程序DoCmd.OpenReport()完成 将报告快速输出到PDF ...但是,如果你有一个非常快 当报告FileSystemObject时,output.pdf可能存在大的报告 去移动/重命名它。因此,您可能希望使用Windows API Sleep()函数。 见&lt; http://support.microsoft.com/kb/q162150/&gt;
编写打印出多个报告的例程将保留为 锻炼给读者。就个人而言,我更愿意将报告保存在 表名为&#34; Settings_Reports&#34;而不是硬编码报告名称 进入我的VBA模块。
其他提示:
使用DoCmd.SendObject()
自动发送新创建的电子邮件
向经理报告。
使用PDF工具包将不同的PDF报告合并到一个文件中
网址:http://www.accesspdf.com/pdftk
这也可以使用VBA Shell()函数自动执行,或者在
通过WScript.Shell.Run()
方法
使用VBScript自动化Access,就像Excel或Word一样。 请参阅以下Microsoft知识库文章: ACC:使用Microsoft Access作为自动化服务器 http://support.microsoft.com/kb/q147816/
代码片段(VBScript):
dim acc
set acc = CreateObject("Access.Application")
with acc
..OpenCurrentDatabase "C:\Reports\Sales.mdb"
' Call the customer subroutine we defined earlier
..Run("PrintReportToPDF", "rptSalesFigures_Monthly", _
"N:\Marketing\Reports\SalesSummary" _
& Year(Date()) & Format(Month(Date()),"00")
[Etc...]
毋庸置疑,这种方法可以做很多事情。 最好的部分是你不必学习另一个API(其他 比标准的Windows脚本宿主和Microsoft Scripting Runtime 图书馆,无论如何你真的应该知道。最重要的是它 完全免费!
设置PDF打印机: 以下是有关安装和配置的详细说明 虚拟PDF打印机 - 来自: &LT; http://masterdev.dyndns.dk/know/freepdf.html&gt;
将Ghostscript安装到C:\ http://www.ghostscript.com/doc/AFPL/index.htm
创建一个文本文件(c:\ gs \ pdfconf.txt)并添加以下文字:
-Ic:\ GS \ gs8.11 \ lib中; C:\ GS \字体 -sDEVICE = pdfwrite -dNOPAUSE -dSAFER
请注意,第一行指向Ghostscript的版本8.11。如果 你有不同的版本或安装到不同的版本 位置,进行适当的更改。
下载,解压缩并安装RedMon(Redirection PortMonitor) http://www.cs.wisc.edu/~ghost/redmon/index.htm
转到Windows中“开始”按钮下的“打印机/传真”菜单 添加一台新打印机。
配置端口 将端口重定向到:&#34; C:\ gs \ gs8.11 \ bin \ gswin32c.exe&#34; (更新此行以反映您的版本和位置 Ghostscript,如果不同的话)
该计划的论点是: @c:\ gs \ pdfconf.txt -sOutputFile =&#34;%1&#34; -c .setpdfwrite -f -
输出:&#34;提示输入文件名&#34; 运行:&#34;正常&#34;
CyranoVR@gmail.com