Я использовал этот подход раньше: http://bytes.com/topic/access/answers/204362-howto-automate-printing-access-reports-pdf-files
Это подход, который я использовал для автоматизации печати Microsoft Access
отчеты в формате PDF, то есть без присмотра и без раздражающего «Сохранить как ...»
диалоги, и, что более важно, без использования рекламы
программа, такая как Adobe Acrobat и связанный с ней API.
В технике используются Ghostscript и Redirection Port Monitor - два бесплатных
программы для создания PDF документов предоставлены бесплатно Расселом Лангом.
для реальной автоматизации требуется кодирование VBA с использованием FileSystemObject,
WScript.Network (объект сети Windows Script Host) и доступ
автоматизации.
Инструкция:
1) Установить Ghostscript
- Переводчик для языка Postscript и PDF
http://www.cs.wisc.edu/~ghost/
2) Установить RedMon - Монитор порта перенаправления
- Перенаправляет специальный порт принтера в программу (например,
Ghostscript)
http://www.cs.wisc.edu/~ghost/redmon/
3) Настройка виртуального принтера PDF с использованием Ghostscript и Redmon
- Вот две веб-страницы, которые объясняют, как установить
вышеуказанные инструменты:
http://masterdev.dyndns.dk/know/freepdf.html
http://stat.tamu.edu/~henrik/GSWriter/GSWriter.html
4) Настройте порт принтера RedMon, используемый виртуальным принтером PDF, в
следующий мантер:
- Вывод: «Программа обрабатывает вывод»
- Новый файл PDF всегда следует сохранять в один и тот же файл, т.е.
C: \ Temp \ output.pdf
Используйте это для настройки «Аргументы программы»:
@c: \ gs \ pdfconf.txt -sOutputFile = "C: \ temp \ output.pdf" -c .setpdfwrite
-f -
(обратите внимание на буквальный путь к файлу вместо "% 1")
5) Напишите свой собственный код Visual Basic, который печатает отчет в формате PDF
а затем использует FileSystemObject, чтобы скопировать его на имя / местоположение вашего
Chosing. Используйте объект 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 очень быстро ... однако, если у вас есть очень
большой отчет, выходной.pdf может быть там, когда FileSystemObject
идет переместить / переименовать его. Поэтому вы можете использовать Windows
API Sleep () функция.
Смотрите <<a href="http://support.microsoft.com/kb/q162150/" rel="nofollow">http://support.microsoft.com/kb/q162150/>
Написание процедуры, которая распечатывает несколько отчетов, оставляется как
упражнение для читателя. Лично я предпочитаю хранить свои отчеты в
таблица под названием «Settings_Reports», а не жесткое кодирование имен отчетов
в мои модули VBA.
ДОПОЛНИТЕЛЬНЫЕ СОВЕТЫ:
Использование DoCmd.SendObject()
автоматизировать рассылку по электронной почте вновь созданным
отчитывается перед менеджерами.
Используйте PDF Toolkit для объединения разрозненных отчетов в формате PDF в один файл
URL: http://www.accesspdf.com/pdftk
Это также можно автоматизировать с помощью функции VBA Shell () или в
VBScript с помощью метода WScript.Shell.Run()
Используйте VBScript для автоматизации Access, как в Excel или Word.
Смотрите следующую статью Microsoft KB:
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 - извлечен из:
<<a href="http://masterdev.dyndns.dk/know/freepdf.html" rel="nofollow">http://masterdev.dyndns.dk/know/freepdf.html>
Установить Ghostscript на C: \
http://www.ghostscript.com/doc/AFPL/index.htm
Создайте текстовый файл (c: \ gs \ pdfconf.txt) и добавьте следующий текст:
-ic: \ гс \ gs8.11 \ Lib; C: \ гс \ шрифты
-sDEVICE = pdfwrite
-dNOPAUSE
-dSAFER
Обратите внимание, что первая строка указывает на версию 8.11 Ghostscript. Еслиу вас другая версия или вы установили ее на другую
внесите соответствующие изменения.
Загрузка, распаковка и установка RedMon (Redirection PortMonitor)
http://www.cs.wisc.edu/~ghost/redmon/index.htm
- При запуске setup.exe вы увидите только окно сообщения.
Перейдите в меню «Принтеры / факсы» под кнопкой «Пуск» в Windows и
добавить новый принтер.
- Драйвер для принтера должен быть для / color postscript /
принтер. Я выбрал HP Color Laserjet 4550 PS
- Установите порт принтера на RPT1: (перенаправленный порт)
Настройка порта
Перенаправить порт на: «C: \ gs \ gs8.11 \ bin \ gswin32c.exe»
(Обновите эту строку, чтобы отразить вашу версию и местоположение
Ghostscript, если отличается)
Аргументы для этой программы:
@c: \ gs \ pdfconf.txt -sOutputFile = "% 1" -c .setpdfwrite -f -
Вывод: «Запрашивать имя файла»
Прогон: "Нормальный"
- Попробуйте напечатать что-нибудь цветное на этом принтере. Если все работает
правильно, вам будет предложено указать имя файла, что файл PDF будет
сохранено в (не забудьте добавить расширение .PDF).
'
Надеюсь, это кому-нибудь поможет!
CyranoVR@gmail.com