使用 osprint.p (adecomm.pl) 在 btPrint 上打印 pdf

问题描述

我正在尝试使用此 osprint.p 选项从我的应用程序打印 pdf,我可以使用保存 pdf 的打印机选项,但 pdf 的格式不可读This is how it looks。知道我做错了什么。此外,是否有任何选项可以通过此选项以及其他选项(如份数、分页等)设置认打印机,而不会触发 MSW 打印设置对话框 I want to programmatically send these options?使用下面的第 4 个参数,我可以设置方向和纸张尺寸,但不知道如何设置其他参数。

doesCompanyNameExist(companyName: string):any {
        return this.http.post(`${this.BASE_URL}/RESTAPI/reports/doesCompanyNameExist?companyName=${companyName}`,this.httpOptions);
}

作为参考,我使用了 Chris 的这篇文章https://www.progresstalk.com/threads/printing-on-ladscape-mode.48/ 连同这个:https://knowledgebase.progress.com/articles/Knowledge/18776

谢谢。

解决方法

_osprint.p 不能用于打印 PDF 文件。正如文件头 (https://github.com/consultingwerk/ADE-Sourcecode/blob/master/src/adecomm/_osprint.p) 所说,它的目的是将文本文件发送到打印机。

打印 PDF 文件最简单的方法是使用 ShellExecuteA API,例如:

PROCEDURE ShellExecuteA EXTERNAL "shell32":U:
    DEFINE INPUT PARAMETER HWND         AS LONG .
    DEFINE INPUT PARAMETER lpOperation  AS CHARACTER .
    DEFINE INPUT PARAMETER lpFile       AS CHARACTER .
    DEFINE INPUT PARAMETER lpParameters AS CHARACTER .
    DEFINE INPUT PARAMETER lpDirectory  AS CHARACTER .
    DEFINE INPUT PARAMETER nShowCmd     AS LONG .
    DEFINE RETURN PARAMETER hInstance   AS LONG .
END PROCEDURE .

DEFINE VARIABLE hInstance AS INTEGER NO-UNDO.

RUN ShellExecuteA (0,"print","c:\temp\oe-122-pdfs\start.pdf","",3,OUTPUT hInstance) .

有关选项,请参阅 https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shellexecutea

如果您对 .NET 的 OpenEdge GUI 有一些经验,那么将提到 Google Pdfium 库的答案翻译成 ABL 应该很简单:

How can I send a file document to the printer and have it print?