сохранение отчетов в формате PDF - PullRequest
1 голос
/ 15 ноября 2011

В настоящее время я использую pdfcreator для преобразования отчетов в формат pdf.Поскольку это должно быть сделано вручную, я ищу решение для автоматического сохранения отчетов в формате PDF.Код должен работать в Access 2000 и более новых версиях.

Ответы [ 2 ]

3 голосов
/ 15 ноября 2011

Мы используем ReportToPDF Стивена Лебанса для создания PDF-файлов.
Мы используем Access 2003, и он работает для A2000, 2002 и 2003 (A2007 имеет встроенную поддержку PDF).

Он состоит из двух библиотек DLL, которые должны находиться в папке приложения или в папке %windir%\system32, и их не нужно регистрировать .

* 1010.* Мы предпочли использовать это решение вместо PDF-принтера, потому что просто скопировать два файла проще, чем установить PDF-принтер на каждом компьютере.
1 голос
/ 15 ноября 2011

Я использовал этот подход раньше: 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>

  1. Установить Ghostscript на C: \ http://www.ghostscript.com/doc/AFPL/index.htm

  2. Создайте текстовый файл (c: \ gs \ pdfconf.txt) и добавьте следующий текст:

    -ic: \ гс \ gs8.11 \ Lib; C: \ гс \ шрифты -sDEVICE = pdfwrite -dNOPAUSE -dSAFER

Обратите внимание, что первая строка указывает на версию 8.11 Ghostscript. Еслиу вас другая версия или вы установили ее на другую внесите соответствующие изменения.

  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. Настройка порта Перенаправить порт на: «C: \ gs \ gs8.11 \ bin \ gswin32c.exe» (Обновите эту строку, чтобы отразить вашу версию и местоположение Ghostscript, если отличается)

Аргументы для этой программы: @c: \ gs \ pdfconf.txt -sOutputFile = "% 1" -c .setpdfwrite -f -

Вывод: «Запрашивать имя файла» Прогон: "Нормальный"

  1. Попробуйте напечатать что-нибудь цветное на этом принтере. Если все работает правильно, вам будет предложено указать имя файла, что файл PDF будет сохранено в (не забудьте добавить расширение .PDF). ' Надеюсь, это кому-нибудь поможет!

CyranoVR@gmail.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...