2011-11-15 68 views
1

目前,我正在使用pdfcreator将报告转换为pdf格式。由于这必须手动完成,我正在寻找一种解决方案来自动将报告保存为pdf文件。该代码应该在访问2000和更新版本中工作。将报告保存为pdf

回答

3

我们正在使用Stephen Lebans' ReportToPDF生成PDF文件。
我们使用Access 2003,它适用于A2000,2002和2003(A2007具有开箱即用的PDF支持)。

它由只需要在您的应用程序文件夹或%windir%\system32文件夹和他们不需要注册两个DLL组成。

我们倾向于使用此解决方案而不是PDF打印机,因为只需复制两个文件比在每台计算机上安装PDF打印机更简单。

1

我曾经使用过这种方法:http://bytes.com/topic/access/answers/204362-howto-automate-printing-access-reports-pdf-files

这是我用于自动化Microsoft Access的印刷方法 报告为PDF格式,即无人值守,没有恼人的“另存为...”对话框 ,以及 - 更重要的是 - 无需使用Adobe Acrobat等商业程序及其相关API。

该技术使用Ghostscript和重定向端口监视器 - 两个免费的 程序用于创建由Russell Lang免费提供的PDF文档。 实际自动化需要使用FileSystemObject,WScript.Network(Windows脚本主机网络对象)和Access 自动化进行VBA编码。

说明:

1)安装Ghostscript的 - 重定向端口监视器 - - 为PostScript语言及PDF http://www.cs.wisc.edu/~ghost/

2)安装雷德曼解释器重定向特殊的打印机端口的程序(如 Ghostscript) http://www.cs.wisc.edu/~ghost/redmon/

3)设置虚拟PDF打印机使用的Ghostscript和雷德曼 - 这里有两个网页,讲解如何安装上面的 工具: http://masterdev.dyndns.dk/know/freepdf.html http://stat.tamu.edu/~henrik/GSWriter/GSWriter.html

4)配置 - 输出:在 使用的PDF虚拟打印机以下mannter雷德曼打印机端口“程序处理输出” - 新的PDF文件应始终保存到同一文件即 C:\ TEMP \输出.pdf

将此用于“程序参数”设置: @c:\ gs \ pdfconf.txt -sOutputFile = “C:\ TEMP \输出.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脚本运行时和Windows脚本宿主 对象模型。

我的经验,到目前为止是子程序DoCmd.OpenReport()完成 输出为PDF格式的报告非常快......但是,如果你有一个非常大的 报告输出.pdf可能在那里当FileSystemObject的 去移动/重命名它。因此,您可能需要使用Windows的Sleep()函数。 请参阅< http://support.microsoft.com/kb/q162150/>

编写打印出多个报告的例程作为 练习留给读者。就个人而言,我宁愿将我的报告保存在名为“Settings_Reports”的 表中,而不是将报告名称 硬编码到我的VBA模块中。

其他提示:

  • 使用DoCmd.SendObject()自动化的新创建 报告经理发送电子邮件。

  • 使用PDF工具包不同的PDF报告合并成一个文件 URL:http://www.accesspdf.com/pdftk 这也可以使用VBA Shell()函数通过WScript.Shell.Run()方法自动化的,或在 的VBScript

  • 使用VBScript使Excel自动化,就像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>

  1. 安装的Ghostscript到C:\ http://www.ghostscript.com/doc/AFPL/index.htm

  2. 创建一个文本文件(c:\ gs \ pdfconf.txt)并添加以下文本:

    -Ic:\ GS \ gs8.11 \ lib中; C:\ GS \字体 -sDEVICE = pdfwrite -dNOPAUSE -dSAFER

注意,第一行点的8.11版Ghostscript的。如果 您有不同的版本,或将其安装到不同的 位置,请进行适当的更改。

  1. 下载,解压缩,并安装雷德曼(重定向PortMonitor) http://www.cs.wisc.edu/~ghost/redmon/index.htm

    • 当你运行setup.exe你只会看到一个消息框。
  2. 转到Windows中的“开始”按钮下的“打印机/传真”菜单,然后 添加一台新打印机。

    • 打印机的驱动程序必须用于打印机/色彩postscript/ 打印机。我选择于HP Color LaserJet 4550 PS
    • 设置打印机端口到RPT1:(重定向端口)
  3. 配置端口重定向 港:“C:\ GS \ gs8.11 \ BIN \ gswin32c .EXE “ (更新这一行来反映你的 Ghostscript的版本和位置,如果不同)

参数对这一计划的是: @c:\ GS \ pdfconf.txt -sOutputFile =” %1 “-c .setpdfwrite -f -

输出:“提示输入文件名” 运行“正常运行”

  1. 尝试打印彩色的东西到这台打印机。如果一切正常 正确,您将被提示输入一个文件名,该文件将保存在 下(不要忘记添加.PDF扩展名)。 ' 希望这可以帮助别人!

[email protected]