2011-11-15 177 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]