标题:怎么修改报表的打印环境?
只看楼主
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 9楼 mywisdom88
一般使用情况 GetPrinter() 和 set printer to NAME 就可以适应不同的打印设备。
如果有想法:先设计一些报表文件作为模板,实际打印时通过复制报表文件模板,修改报表文件相关数据(如纸张类型等)后再打印输出,也算是一种动态报表的设计方法吧。
报表页面参数就是上面讲到的报表文件相关数据,这些数据都可读可写的,也可以自定义的。怎样保存就随便了,只要能找得回来就可以。
2016-06-04 21:54
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
以下是引用吹水佬在2016-6-4 21:34:09的发言:

SYS(1037)是通过对话方式设置当前打印状态。
其中:
    SYS(1037, 0)是默认的页面设置。
    SYS(1037, 1)是报表页面设置,要求独占打开报表文件。
        USE XXX.frx EXCLUSIVE
        SYS(1037, 1)
设置了返回1,否则返回0.
 
其他页面相关数据,如纸张类型,纵向(横向)等,参考VFP帮助 PRTINFO() 函数,有详细说明。
sys(1037) 有选择纸张的界面,但 sys(1037,1)无选择界面,我怎么选?
难道是3句一起用的?
sys(1037,0)
us XXX.frx excl
sys(1037,1) &&找到答案了,要先打开1个表,才有界面



[此贴子已经被作者于2016-6-5 12:02编辑过]

2016-06-05 11:24
wangxinlj
Rank: 1
等 级:新手上路
威 望:1
帖 子:5
专家分:0
注 册:2016-6-14
得分:0 
=THISFORM.RPT("RPT_TEST")
************************
* frm1.RPT             *      && 1400 * 780
************************
PARAMETERS xRPT
PRIVATE xRPT_FILE_N, xRPT_FILE_S, xRPT_FILE_C, xRPT_NAME, xRPT_LEN, xRPT_LENGTH, xRPT_WIDTH, xIN_FILE, xPAGE_NAME
xIN_FILE = SELECT()
********************
SET_PRINTER("EPSON")
********************
xRPT_LENGTH = 770
xRPT_WIDTH  = 1400
xRPT_FILE_N = xRPT
********************
xPAGE_NAME  = "1400x770"     && 寬x高
xRPT_FILE_S = mpAPP_PATH + "PRG\" + xRPT_FILE_N + ".*"
xRPT_FILE_C = mpTEMP_PATH + xRPT_FILE_N + ".*"
xRPT_NAME   = mpTEMP_PATH + xRPT_FILE_N
********************
COPY FILE (xRPT_FILE_S) TO (xRPT_FILE_C)
********************
SET_PAGE(xPAGE_NAME, xRPT_LENGTH, xRPT_WIDTH, xRPT_FILE_N + ".FRX", mpTEMP_PATH)       && 2008.07.12, in VFP_FUNC.PRG
********************
    ****************************************
    Report form &xRPT_NAME Preview window showrep
    ****************************************
********************
DELE FILE &xRPT_FILE_C
********************
SELECT (xIN_FILE)
RETURN

2016-06-14 17:48
wangxinlj
Rank: 1
等 级:新手上路
威 望:1
帖 子:5
专家分:0
注 册:2016-6-14
得分:0 
*******************************************************************************
FUNCTION SET_PRINTER        && Printer Name  may diff with the installed driver
*******************************************************************************
PARAMETERS xxPRT
DO CASE
   CASE xxPRT = "EPSON"    && LQ-1900K driver can work once rename below name
          xpPRINTER = "Epson LQ-1170 ESC/P 2"
          **********************************************************
        mpSET_PRINTER = "set printer to name '" + xpPRINTER + "'"
          **********************************************************        
          *****************
          &mpSET_PRINTER
          *****************
   CASE xxPRT = "LQ-1900"  
          xpPRINTER = "EPSON LQ-1900K II+ ESC/P 2"
          **********************************************************
        mpSET_PRINTER = "set printer to name '" + xpPRINTER + "'"
          **********************************************************               &mpSET_PRINTER
          *****************
          &mpSET_PRINTER
          *****************
   CASE xxPRT = "LASER"
          xpPRINTER = "HP_LASER"
          **********************************************************
        mpSET_PRINTER = "set printer to name '" + xpPRINTER + "'"
          **********************************************************        
          *****************
          &mpSET_PRINTER
          *****************
   CASE xxPRT = "PDF Writer"
          xpPRINTER = "PDF Writer"
          **********************************************************
        mpSET_PRINTER = "set printer to name '" + xpPRINTER + "'"
          **********************************************************        
          *****************
          &mpSET_PRINTER
          *****************
ENDCASE      
RETURN
2016-06-14 17:50
wangxinlj
Rank: 1
等 级:新手上路
威 望:1
帖 子:5
专家分:0
注 册:2016-6-14
得分:0 
**************************************************************
FUNCTION SET_PAGE        && 自定義紙張, 2008.01.28
**************************************************************
PARAMETER lcPAPERNAME,lcPAPERLENGTH,lcPAPERWIDTH,lcRPT_FILE,lcRPT_PATH
PRIVATE xIN_SELE   && ,PAPERNAME,PAPERLENGTH,PAPERWIDTH
xIN_SELE = SELECT()
PAPERNAME   = lcPAPERNAME
PAPERLENGTH = lcPAPERLENGTH
PAPERWIDTH  = lcPAPERWIDTH
SELECT 0
USE ALLT(lcRPT_PATH) + ALLT(lcRPT_FILE)
IF IS_WIN98()
    REPL EXPR WITH ItemSet(EXPR,"PAPERSIZE",256)
ELSE
    DECLARE INTEGER PaperCode IN mpAPP_PATH + "LdPrn.dll" STRING,STRING,INTEGER,INTEGER
    revalue= PaperCode(PAPERNAME," ",PAPERWIDTH,PAPERLENGTH)
    REPL EXPR WITH ItemSet(EXPR,"PAPERSIZE",revalue)
ENDIF
USE
SELECT (xIN_SELE)
RETURN
**************************************************************
Function ItemSet              && 自定義紙張, 2008.01.28
**************************************************************
PARA tcStr,tcItemID,tnItemValue  
IF tcItemID $ tcStr
   np1 = AT(tcItemID,tcStr)
   cSubStr = SUBS(tcStr,np1+LEN(tcItemID)+1,6)
   cItemValue = SUBS(cSubStr,1,AT(CHR(10),cSubStr)-1)
   cItem = tcItemID+"="+cItemValue
   cNewItem = tcItemID+"="+LTRIM(STR(tnItemValue))
   RETU STUFF(tcStr,AT(cItem,tcStr),LEN(cItem),cNewItem)
ELSE
   RETU tcStr+tcItemID+"="+LTRIM(STR(tnItemValue))+CHR(10)+CHR(13)   
ENDIF
**************************************************************
FUNCTION IS_WIN98
**************************************************************
IF SUBSTR(OS(), AT('.',OS())-1)<='4'
    lRtn = .T.
ELSE
    lRtn = .F.
ENDIF
RETURN lRtn
2016-06-14 17:52
wangxinlj
Rank: 1
等 级:新手上路
威 望:1
帖 子:5
专家分:0
注 册:2016-6-14
得分:0 
需要調用1個DLL文件:LdPrn.dll
LdPrn.zip (192.1 KB)


2016-06-14 17:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-465559-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.101912 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved