问题描述
我正在尝试使用此 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?