【发布时间】:2011-12-29 04:56:44
【问题描述】:
目前我正在使用 pdfcreator 将报告转换为 pdf 格式。由于这必须手动完成,我正在寻找一种将报告自动保存为 pdf 文件的解决方案。该代码应该在 access 2000 和更新版本中工作。
【问题讨论】:
目前我正在使用 pdfcreator 将报告转换为 pdf 格式。由于这必须手动完成,我正在寻找一种将报告自动保存为 pdf 文件的解决方案。该代码应该在 access 2000 和更新版本中工作。
【问题讨论】:
我们正在使用Stephen Lebans' ReportToPDF 生成 PDF 文件。
我们使用 Access 2003,它适用于 A2000、2002 和 2003(A2007 具有开箱即用的 PDF 支持)。
它只包含两个 DLL,它们需要位于您的应用程序文件夹或 %windir%\system32 文件夹中,并且它们不需要注册。
我们更喜欢使用此解决方案而不是 PDF 打印机,因为仅复制两个文件比在每台机器上安装 PDF 打印机更容易。
【讨论】:
我以前用过这种方法: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 脚本宿主网络对象)和访问 自动化。
说明:
1) 安装 Ghostscript - Postscript 语言和 PDF 的解释器 http://www.cs.wisc.edu/~ghost/
2) 安装 RedMon - 重定向端口监视器 - 将一个特殊的打印机端口重定向到一个程序(例如 鬼脚本) 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打印机端口 以下方式: - 输出:“程序处理输出” - 新的 PDF 文件应始终保存到同一个文件,即 C:\temp\output.pdf
将此用于“程序参数”设置: @c:\gs\pdfconf.txt -sOutputFile="C:\temp\output.pdf" -c .setpdfwrite -f -
(注意文字文件路径而不是“%1”)
5) 编写您自己的 Visual Basic 代码,将报告打印为 pdf 然后使用 FileSystemObject 将其复制到您的名称/位置 选择。使用 WScript.Network 对象更改默认打印机 从您常用的默认打印机到 PDF 打印机,然后再返回。
示例代码(访问 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...但是,如果您有一个非常 大报告 output.pdf 可能在 FileSystemObject 时存在 去移动/重命名它。因此,您可能希望使用 Windows API 睡眠()函数。 见http://support.microsoft.com/kb/q162150/>
编写一个打印出多个报告的例程被保留为 练习给读者。就个人而言,我更喜欢将报告保存在 名为“Settings_Reports”的表,而不是硬编码报告名称 进入我的 VBA 模块。
其他提示:
使用 DoCmd.SendObject() 自动发送新创建的电子邮件
向经理汇报。
使用 PDF 工具包将不同的 PDF 报告合并到一个文件中
网址:http://www.accesspdf.com/pdftk
这也可以使用 VBA Shell() 函数或在
VBScript 通过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 Script Host 和 Microsoft Scripting Runtime 图书馆,无论如何你真的应该知道)。最重要的是 完全免费!
设置 PDF 打印机: 以下是安装和配置的更详细说明 虚拟 PDF 打印机 - 抄自: http://masterdev.dyndns.dk/know/freepdf.html>
将 Ghostscript 安装到 C:\ http://www.ghostscript.com/doc/AFPL/index.htm
创建一个文本文件(c:\gs\pdfconf.txt)并添加以下文本:
-Ic:\gs\gs8.11\lib;c:\gs\fonts -sDEVICE=pdfwrite -dNOPAUSE -dSAFER
请注意,第一行指向 Ghostscript 的 8.11 版本。如果 您有不同的版本或将其安装到不同的版本 位置,进行适当的更改。
下载、解压和安装 RedMon(重定向端口监视器) http://www.cs.wisc.edu/~ghost/redmon/index.htm
转到 Windows 中“开始”按钮下的“打印机/传真”菜单,然后 添加新打印机。
配置端口 将端口重定向到:“C:\gs\gs8.11\bin\gswin32c.exe” (更新此行以反映您的版本和位置 Ghostscript,如果不同)
这个程序的参数是: @c:\gs\pdfconf.txt -sOutputFile="%1" -c .setpdfwrite -f -
输出:“提示输入文件名” 运行:“正常”
CyranoVR@gmail.com
【讨论】: