【问题标题】:To print a pdf on btPrint using osprint.p (adecomm.pl)使用 osprint.p (adecomm.pl) 在 btPrint 上打印 pdf
【发布时间】:2021-07-20 08:53:58
【问题描述】:

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

/* RUN ShellExecuteA (0,"print":u,cUserFile,"default_Printer","",1,OUTPUT tInt). */ 
/* Using ShellExecute I won't be able to set orientation or any other options */                   
RUN adecomm/_osPrint.p (INPUT wWin, 
                        INPUT cUserFile,
                        INPUT 3,
                        INPUT 1 + IF fc-orient-portrait = 1 THEN 0 ELSE 2 + i-papersize + 160 + 512,
                        INPUT 0,
                        INPUT 0,
                        OUTPUT vResult).
IF vResult THEN DO:            
  OS-DELETE VALUE(cUserFile).
END.

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

谢谢。

【问题讨论】:

    标签: openedge progress-4gl


    【解决方案1】:

    _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?

    【讨论】:

    • 非常感谢。我可能错过了它不打印pdf。 ShellExecute 的参数设置非常有限,但我喜欢 .NET 选项,它看起来很简单。我将尝试实现这一点并发布相关信息。再次感谢。问候。
    • 您好 Mike,根据您的建议,这是最新的发展:stackoverflow.com/questions/67287801/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 2013-07-16
    • 2016-10-09
    • 1970-01-01
    • 2019-12-06
    • 2013-01-25
    相关资源
    最近更新 更多