【问题标题】:How can I programatically print a DataReport to a pdf file?如何以编程方式将 DataReport 打印到 pdf 文件?
【发布时间】:2011-06-06 16:24:52
【问题描述】:

我正在更新旧的 VB6 代码以将其 DataReports 保存为 PDF,而不是打开打印对话框。

我不能简单地在代码中编写 PDF(使用 VB6 PDF 库等),因为我们所有的软件都已经使用 DataReports,并且为每个软件编写打印代码充其量是乏味的。目前,该流程需要员工将 DataReport 打印到 PDF 打印驱动程序,手动命名并将其保存到需要去的地方。我需要将这一切自动化,以便可以通过编程方式指定保存的 PDF 的名称和位置,而不是手动输入。

最好的解决方案是如果 DataReport 简单地有一个.SaveToPdf(filename) 例程。在最坏的情况下,我看到自己使用SendKeys 自动化了这个过程。但是,此解决方案需要在具有多个可能的打印机的环境中工作(因此 PDF 打印驱动程序可能不是默认的)以及 Windows XP、Vista 或 7。

我尝试用谷歌搜索这个问题没有结果,它只返回有关如何手动完成的教程,就像我们现在所做的一样。

【问题讨论】:

    标签: vb6 pdf-generation


    【解决方案1】:

    您可以考虑使用 PDF 打印机驱动程序,该驱动程序允许您使用自动生成的名称将静默“打印”配置到预设目录。

    有关此类产品的示例,请参阅:

    http://www.iteksoft.com/modules.php?op=modload&name=Sections&file=index&req=viewarticle&artid=21

    【讨论】:

    • 这是我找到的最佳解决方案。 eDocPrinter PDF Pro(您链接的软件)甚至允许您通过注册表设置其所有设置,因此您可以指定名称和目录等。Adobe PDF Printer 允许静默模式,但我没有看到任何以编程方式设置它的设置。
    【解决方案2】:

    我会创建一个对话框,让用户输入打印机(驱动程序)名称、要保存到的目录和文件命名准则,然后将其保存到本地 ini 文件或注册表。然后,您将需要两个打印按钮/菜单。一种是使用默认(已保存)设置直接打印到打印机,另一种是打开他们现在看到的打印窗口,以便他们执行自定义打印。

    请记住,菜单项上的省略号表示附加对话框,Print vs Print...

    【讨论】:

    • 这是我会做的,但没有提供有关如何自动化该过程的任何信息。我仍在打电话给DataReport1.PrintReport,我什至如何指定 PDF 的名称?在 PDF 打印驱动程序生成输出之前,您实际上不会保存任何内容,然后询问您将其保存在哪里。除非您对可能有用的程序化 PDF 打印驱动程序有建议。
    • 我想我误读了您要查找的内容。如果您正在寻找如何将报告发送到 pdf 打印机驱动程序的代码示例,您应该添加您用于打印的内容。这是@Maciej 的一篇文章,演示了使用 GhostScript 进行打印,*.com/questions/2599925/…
    • GhostScript 会很好用,如果我可以将 DataReport 打印到 PostScript 文件。我所知道的只是通过打印对话框进行打印,然后导出为 HTML 或文本,两者都不会保持与打印相同的格式。我没有具体说明我用什么来打印,因为我愿意使用任何可行的东西。
    • @Cyclotis04 那么你是用VB来调用像Crystal Reports这样的DataReport吗?
    • 我正在使用 MSDataReportLib.DataReport,我在设计时设计,在运行时从 mdb 填充,然后调用 DataReport1.PrintReportPrintReport 可以通过将 ShowDialog 设置为 false 以静默方式打印到默认打印机,但这仍然会弹出 PDF 打印驱动程序对话框(假设它是我的默认打印机 - 它可能不是)询问我想要什么命名文件和保存位置。
    【解决方案3】:

    只需使用 Crystal Report Viewer Control 并按照以下步骤操作:

    Set objRpt = objApp.OpenReport("type report path and name")
    
    objRpt.DiscardSavedData
    dim filepath as string
    filepath = report path & report filename
    
    With objRpt
    
        .ExportOptions.FormatType = crEFTPortableDocFormat
        .ExportOptions.DestinationType = crEDTDiskFile
        .ExportOptions.DiskFileName = 'filepath string goes here
        .ExportOptions.PDFExportAllPages = True
        .Export False
    End With
    

    按照这些步骤完成导出。

    【讨论】: