【问题标题】:saving reports as pdf将报告另存为 pdf
【发布时间】:2011-12-29 04:56:44
【问题描述】:

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

【问题讨论】:

    标签: ms-access vba pdf


    【解决方案1】:

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

    它只包含两个 DLL,它们需要位于您的应用程序文件夹或 %windir%\system32 文件夹中,并且它们不需要注册

    我们更喜欢使用此解决方案而不是 PDF 打印机,因为仅复制两个文件比在每台机器上安装 PDF 打印机更容易。

    【讨论】:

      【解决方案2】:

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

      这是我用来自动打印 Microsoft Access 的方法 报告为 PDF 格式,即无人值守且没有烦人的“另存为...” 对话,而且 - 更重要的是 - 无需使用广告 程序,例如 Adob​​e 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>

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

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

        -Ic:\gs\gs8.11\lib;c:\gs\fonts -sDEVICE=pdfwrite -dNOPAUSE -dSAFER

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

      1. 下载、解压和安装 RedMon(重定向端口监视器) http://www.cs.wisc.edu/~ghost/redmon/index.htm

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

        • 打印机的驱动程序必须用于 /color 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 文件的文件名 保存在(不要忘记添加 .PDF 扩展名)。 ' 希望这对某人有帮助!

      CyranoVR@gmail.com

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-04
        • 1970-01-01
        • 1970-01-01
        • 2010-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多