将报告保存为pdf

时间:2011-11-15 04:14:29

标签: ms-access vba pdf

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

2 个答案:

答案 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
  • 使用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;

  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

  3. 请注意,第一行指向Ghostscript的版本8.11。如果 你有不同的版本或安装到不同的版本 位置,进行适当的更改。

    1. 下载,解压缩并安装RedMon(Redirection PortMonitor) http://www.cs.wisc.edu/~ghost/redmon/index.htm

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

      • 打印机的驱动程序必须是/ color postscript / 打印机。我选择了HP Color Laserjet 4550 PS
      • 将打印机端口设置为RPT1 :(重定向端口)
    3. 配置端口 将端口重定向到:&#34; C:\ gs \ gs8.11 \ bin \ gswin32c.exe&#34; (更新此行以反映您的版本和位置 Ghostscript,如果不同的话)

    4. 该计划的论点是: @c:\ gs \ pdfconf.txt -sOutputFile =&#34;%1&#34; -c .setpdfwrite -f -

      输出:&#34;提示输入文件名&#34; 运行:&#34;正常&#34;

      1. 尝试向本打印机打印彩色内容。如果一切正常 没错,系统会提示您输入PDF文件的文件名 保存下(不要忘记添加.PDF扩展名)。 &#39; 希望这有助于某人!
      2. CyranoVR@gmail.com