RTF技术扩展如何实现完美分页打印.doc_第1页
RTF技术扩展如何实现完美分页打印.doc_第2页
RTF技术扩展如何实现完美分页打印.doc_第3页
RTF技术扩展如何实现完美分页打印.doc_第4页
RTF技术扩展如何实现完美分页打印.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

RTF 技术扩展技术扩展 如何实现完美的分页打印如何实现完美的分页打印 摘要:摘要: 本文给出了一种完美实现 RTF 文件分页打印的方法,并根据此方法实现了 RTF 文件的打印预览 及打印。通过本方法实现的 RTF 文件的 WYSIWYG(所见即所得)显示、分页预览及分页打印三者在效 果上完全一致,解决了以前预览与打印存在偏差的问题,无论在分页速度和效果上均取得了突破。同时, 本方法还解决了分页效果与打印机相关的问题,做到了完全的设备无关。效果图如下: 关键字:关键字:RTF、Rich Text Format、分页、打印。 一、一、背景介绍背景介绍 RTF 文件的分页算法一致是困扰已久的话题,以前我的方法是采用逐行计算行高然后再手工分页的方 法,该方法有很多不足之处: 1、 正在计算的行必须在屏幕可视范围内; 2、 每行的左缩进位置必须为正数; 3、 逐行计算采用模拟键盘操作进行,速度很慢; 4、 手工计算存在一些误差; 5、 分页效果与打印机相关,导致不同打印机结果不一致。 综上几点原因,旧的分页算法存在稳定性差和计算不精确等问题,因此分页结果常常出现偏差。寻找 一种稳定可靠、高效率的分页算法迫在眉睫。 二、新的分页算法简介二、新的分页算法简介 新的分页算法其核心采用以前我翻译的RichTextBox SDK 参考手册一文中介绍的方法:主要 方法是通过向 Rich Edit 控件发送 EM_FORMATRANGE 消息来将其输出重定向到指定设备,比如打印 机。当然,也可以指定一个用于 Rich Text 文本格式化的输出设备,比如图片框。同时,可以使用 EM_SETTARGETDEVICE 消息来指定一个用于 Rich Text 文本格式化的目标设备。该消息用于实现 WYSIWYG(所见即所得)模式,即在该模式下应用程序采用默认打印机字体规格而非屏幕字体规格来定 位文本。这样就实现了 RTF 文本的 WYSIWYG(所见即所得)显示、打印预览与最终打印。 需要说明的是,如果要保持 3 种方法在结果上的一致性,那么采用的目标设备必须统一,这样才能保 证渲染结果的统一。我们采用屏幕 Screen 对象来作为目标设备,这样就实现了渲染结果与打印机无关, 避免了不同打印机其分页效果不同的问题。 下面对这几个消息进行详细讲解: 三、相关三、相关 Windows 消息和函数详解消息和函数详解 EM_FORMATRANGE 消息 EM_FORMATRANGE 消息用于为指定设备格式化一定范围的文本,用于 Rich Edit 控件。 语法:语法: 发送该消息,采用如下方法调用 SendMessage 函数: lResult = SendMessage( / 返回结果值 LRESULT (HWND) hWndControl, / 目标控件句柄 (UINT) EM_FORMATRANGE, / 消息 ID (WPARAM) wParam, / = (WPARAM) () wParam; (LPARAM) lParam / = (LPARAM) () lParam; ); 参数:参数: wParam 表示是否渲染文本。如果该参数为非 0 值,文本将被渲染;否则,文本仅仅被测量(不做实际渲 染) 。 lParam 指向一个 FORMATRANGE 结构体,该结构体包含输出设备相关信息,或者为 NULL 用于释放 目标控件所绑定的信息。 返回值:返回值: 该消息返回适合该区域的最后一个字符位置,加 1。 注释:注释: 该消息通常与 EM_DISPLAYBAND 消息搭配,用于为输出设备诸如打印机等格式化 Rich Edit 控件中的 内容。 非常重要的是,在你最后一次使用该消息后需要为 lParam 参数指定 NULL 值来释放所绑定的信息。另外, 一旦你在某个设备使用该消息后,如果需要在不同设备再使用该消息,同样你必须先释放所绑定的信息。 消息信息:消息信息: 头文件头文件Richedit.h 操作系统操作系统Windows 95, Windows NT 4.0 参见:参见: Rich Edit Controls, EM_DISPLAYBAND, FORMATRANGE FORMATRANGE 结构体 FORMATRANGE 结构体包含用于 Rich Edit 控件格式化其输出到指定设备的相关信息。该结构体用于 EM_FORMATRANGE 消息。 语法:语法: typedef struct _formatrange HDC hdc; HDC hdcTarget; RECT rc; RECT rcPage; CHARRANGE chrg; FORMATRANGE; 成员:成员: hdc渲染设备句柄。 hdcTarget目标设备句柄。 rc渲染区域,单位:缇。 rcPage渲染设备的整体区域,单位:缇。 chrgCHARRANGE 结构体,表示用于格式化的文本范围。 结构体信息:结构体信息: 头文件头文件Richedit.h 操作系统操作系统Windows 95, Windows NT 4.0 参见:参见: Rich Edit Controls, EM_FORMATRANGE EM_DISPLAYBAND 消息 EM_DISPLAYBAND 消息用于显示 Rich Edit 控件的一部分内容,该文本采用前面 EM_FORMATRANGE 消息所指定的设备来格式化。 语法:语法: 发送该消息,采用如下方法调用 SendMessage 函数 lResult = SendMessage( / 返回结果值 LRESULT (HWND) hWndControl, / 目标控件句柄 (UINT) EM_DISPLAYBAND, / 消息 ID (WPARAM) wParam, / = (WPARAM) () wParam; (LPARAM) lParam / = (LPARAM) () lParam; ); 参数:参数: wParam 该参数不使用;必须等于 0。 lParam 指向一个 RECT 结构体所表示的设备显示区域。 返回值:返回值: 如果操作成功,则返回 True;否则返回 False。 注释:注释: 文本及组件对象模型(COM)对象将被该矩形所裁剪。程序不需要设置裁剪区域。 消息信息:消息信息: 头文件头文件Richedit.h 操作系统操作系统 Windows 95, Windows NT 4.0 参见:参见: Rich Edit Controls, EM_FORMATRANGE, RECT GetDeviceCaps函数 GetDeviceCaps 函数用于获取指定设备的设备描述信息。 int GetDeviceCaps( HDC hdc, / DC 句柄 int nIndex / 项目索引值 ); 参数:参数: hdc in DC 句柄。 nIndex in 指定需要返回的项目。可以取下面的值: 索引索引涵义涵义 DRIVERVERSION设备驱动程序版本。 TECHNOLOGY设备工艺。取值可以为: DT_PLOTTER矢量绘图仪 DT_RASDISPLAY光栅显示器 DT_RASPRINTER光栅打印机 DT_RASCAMERA光栅照相机 DT_CHARSTREAM字符流 DT_METAFILE图元文件 DT_DISPFILE显示文件 如果 hdc 参数指向一个增强图元文件的 DC 句柄,设备工艺将 参照 CreateEnhMetaFile 函数所指定的设备。确定是否是增 强图元文件的 DC,可以使用 GetObjectType 函数。 HORZSIZE物理屏幕宽度,单位:毫米。 VERTSIZE物理屏幕高度,单位:毫米。 HORZRES屏幕宽度,单位:象素(pixels) 。 VERTRES屏幕高度,单位:(光栅)行。 LOGPIXELSX沿屏幕宽度的每个逻辑英寸的象素值。在多显示器系统中,所有 显示器的这个值均相同。 LOGPIXELSY沿屏幕高度的每个逻辑英寸的象素值。在多显示器系统中,所有 显示器的这个值均相同。 BITSPIXEL每个象素点的相邻颜色位数。 PLANES颜色平面数。 NUMBRUSHES设备相关画刷(BRUSH)数目。 NUMPENS设备相关画笔(PEN)数目。 NUMFONTS设备相关字体数目。 NUMCOLORS设备颜色表的入口总数,如果设备的颜色深度小于每象素 8 位 时可用。大于该色深时,返回-1。 ASPECTX绘制线条时的相对象素宽度。 ASPECTY绘制线条时的相对象素高度。 ASPECTXY绘制线条时的相对对角线象素宽度。 PDEVICESIZE保留。 CLIPCAPS设备剪切性能标志,如果设备可以剪切为矩形,返回 1;否则为 0。 SIZEPALETTE设备调色板的入口总数。该索引值只能在设备驱动在 RASTERCAPS 等于 RC_PALETTE 位并且在兼容 16 位 Windows 时才可用。 NUMRESERVED系统调色板的保留入口总数。该索引值只能在设备驱动在 RASTERCAPS 等于 RC_PALETTE 位并且在兼容 16 位 Windows 时才可用。 COLORRES设备的实际颜色分辨率,单位:BPP(位/象素) 。该索引值只能 在设备驱动在 RASTERCAPS 等于 RC_PALETTE 位并且在兼容 16 位 Windows 时才可用。 PHYSICALWIDTH对于打印设备而言,表示物理页宽,采用设备单位。例如,打印 机设为 600 dpi,8.5-x11-英寸纸张,那么它的物理宽度值为 5100 设备单位。 注:物理页总是大于页面的可打印区域,不会小于它。 PHYSICALHEIGHT对于打印设备而言,表示物理页高,采用设备单位。例如,打印 机设为 600 dpi,8.5-x11-英寸纸张,那么它的物理高度值为 6600 设备单位。 注:物理页总是大于页面的可打印区域,不会小于它。 PHYSICALOFFSETX对于打印设备而言,表示从物理页的左边缘到可打印区域的左边 缘的距离,采用设备单位。例如,打印机设为 600 dpi,8.5- x11-英寸纸张,那么它不能在左边距大于 0.25 英寸的纸张上 打印,因为此时它的水平物理偏移量为 150 个设备单位。 PHYSICALOFFSETY对于打印设备而言,表示从物理页的上边缘到可打印区域的上边 缘的距离,采用设备单位。例如,打印机设为 600 dpi,8.5- x11-英寸纸张,那么它不能在上边距大于 0.5 英寸的纸张上打 印,因为此时它的垂直物理偏移量为 300 个设备单位。 VREFRESHWindows NT/2000/XP:对显示设备而言,表示当前的垂 直刷新率,单位:Hz。 垂直刷新率为 0 或者 1,表示采用显示硬件的默认刷新率。 This default rate is typically set by switches on a display card or computer motherboard, or by a configuration program that does not use display functions such as ChangeDisplaySettings. SCALINGFACTORX打印机的 X轴缩放比例。 SCALINGFACTORY打印机的 Y轴缩放比例。 BLTALIGNMENTWindows NT/2000/XP: Preferred horizontal drawing alignment, expressed as a multiple of pixels. For best drawing performance, windows should be horizontally aligned to a multiple of this value. A value of zero indicates that the device is accelerated, and any alignment may be used. SHADEBLENDCAPSWindows 98/Me, Windows 2000/XP:表示设备的阴影 及混合特性。参见注释的说明。 SB_CONST_ALPHAHandles the SourceConstantAlpha member of the BLENDFUNCTION structure, which is referenced by the blendFunction parameter of the AlphaBlend function. SB_GRAD_RECTCapable of doing GradientFill rectangles. SB_GRAD_TRICapable of doing GradientFill triangles. SB_NONEDevice does not support any of these capabilities. SB_PIXEL_ALPHACapable of handling per-pixel alpha in AlphaBlend. SB_PREMULT_ALPHACapable of handling premultiplied alpha in AlphaBlend. RASTERCAPS设备的光栅特性。见下表: RC_BANDING需要条带化(Banding)支持。 RC_BITBLT可以传递位图。 RC_BITMAP64可以支持大于 64KB 的位图。 RC_DI_BITMAP支持 SetDIBits 和 GetDIBits 函 数。 RC_DIBTODEV支持 SetDIBitsToDevice 函数。 RC_FLOODFILL可以执行 flood fills 填充操作。 RC_PALETTE指定一个基于调色板的设备。 RC_SCALING支持缩放。 RC_STRETCHBLT支持 StretchBlt 函数。 RC_STRETCHDIB支持 StretchDIBits 函数。 CURVECAPS设备的曲线特性。见下表: CC_NONE设备不支持曲线。 CC_CHORD设备可以绘制弦弧。 CC_CIRCLES设备可以绘制圆。 CC_ELLIPSES设备可以绘制椭圆。 CC_INTERIORS设备可以绘制内部区域。 CC_PIE设备可以绘制扇形。 CC_ROUNDRECT设备可以绘制圆角矩形。 CC_STYLED设备可以绘制样式边框。 CC_WIDE设备可以绘制宽边框。 CC_WIDESTYLED设备可以绘制宽样式边框。 LINECAPS设备的线条特性。见下表: LC_NONE设备不支持线条。 LC_INTERIORS设备可以绘制内部区域。 LC_MARKER设备可以绘制一个标记。 LC_POLYLINE设备可以绘制折线。 LC_POLYMARKER设备可以绘制多个标记。 LC_STYLED设备可以绘制样式线条。 LC_WIDE设备可以绘制宽线条。 LC_WIDESTYLED设备可以绘制宽样式线条。 POLYGONALCAPS设备的多边形特性。见下表: PC_NONE设备不支持多边形。 PC_INTERIORS设备可以绘制内部区域。 PC_POLYGON设备可以绘制交替填充的多边形。 PC_RECTANGLE设备可以绘制矩形。 PC_SCANLINE设备可以绘制设备可以绘制单扫描线。 PC_STYLED设备可以绘制样式边框。 PC_WIDE设备可以绘制宽边框。 PC_WIDESTYLED设备可以绘制宽样式边框。 PC_WINDPOLYGON设备可以绘制螺旋填充的多边形。 TEXTCAPS设备的文本特性。见下表: TC_OP_CHARACTER设备满足字符输出精度。 TC_OP_STROKE设备满足笔画输出精度。 TC_CP_STROKE设备满足笔画裁剪精度。 TC_CR_90设备可以 90 度字符旋转。 TC_CR_ANY设备可以任意字符旋转。 TC_SF_X_YINDEP设备可以在 X 轴和 Y 轴独立缩放。 TC_SA_DOUBLE设备支持 2 倍字符缩放。 TC_SA_INTEGER设备只能采用字符的整数倍缩放。 TC_SA_CONTIN设备可以采用字符的任意倍数缩放。 TC_EA_DOUBLE设备可以绘制双倍磅值的字符。 TC_IA_ABLE设备支持斜体。 TC_UA_ABLE设备支持下划线。 TC_SO_ABLE设备支持删除线。 TC_RA_ABLE设备支持光栅字体。 TC_VA_ABLE设备支持矢量字体。 TC_RESERVED保留;必须为 0。 TC_SCROLLBLT设备采用比特块传送,无法卷动。 注:这表示结果有可能与你期望的相 反。 COLORMGMTCAPSWindows 2000/XP:设备的颜色管理性能。 CM_CMYK_COLOR设备接受 ICC 颜色协议的 CMYK 颜 色 CM_DEVICE_ICM设备可以在设备驱动及其本身执行 ICM。 CM_GAMMA_RAMP设备支持 GetDeviceGammaRamp 和 SetDeviceGammaRamp CM_NONE设备不支持 ICM。 返回值:返回值: 返回值是用户系统希望得到的项目值。 当 nIndex 为 BITSPIXEL,并且设备精度为 15bpp 或者 16bpp,返回值为 16。 注释:注释: 当 nIndex 等于 SHADEBLENDCAPS 时: 对打印机来说,GetDeviceCaps 返回所有打印机报告。 对于显示设备,所有混合操作可用;除了 SB_NONE 外,只能返回 SB_CONST_ALPHA 和 SB_PIXEL_ALPHA,表示该操作采用何种加速模式。 在多显示器系统中,如果 hdc 为桌面,GetDeviceCaps 返回的主显示器的性能参数。 GetDeviceCaps 提供下面的六个索引来代替打印机脱机: 索引索引打印机脱机替换值打印机脱机替换值 PHYSICALWIDTHGETPHYSPAGESIZE PHYSICALHEIGHTGETPHYSPAGESIZE PHYSICALOFFSETXGETPRINTINGOFFSET PHYSICALOFFSETYGETPHYSICALOFFSET SCALINGFACTORXGETSCALINGFACTOR SCALINGFACTORYGETSCALINGFACTOR 配置需求:配置需求: Windows NT/2000/XP: Included in Windows NT 3.1 and later. Windows 95/98/Me: Included in Windows 95 and later. 头文件头文件: Declared in Wingdi.h; include Windows.h. 库库: Use Gdi32.lib. CHARRANGE 结构体 CHARRANGE 结构体用于指定 Rich Edit 控件的一定范围的字符。该结构体用于 EM_EXGETSEL 和 EM_EXSETSEL 消息。 如果成员 cpMin 和 cpMax 相等,表示选定范围为空。如果 cpMin0 且 cpMax1,表示范围包 含所有字符。 语法:语法: typedef struct _charrange LONG cpMin; LONG cpMax; CHARRANGE; 成员:成员: cpMin 该范围的第一个字符的索引位置的直接前驱位置。 cpMax 该范围的最后一个字符的缩影位置的直接后继位置。 结构体信息:结构体信息: 头文件头文件Richedit.h 操作系统操作系统Windows 95, Windows NT 4.0 参见:参见: Rich Edit Controls, EM_EXGETSEL, EM_EXSETSEL EM_SETTARGETDEVICE 消息 EM_SETTARGETDEVICE 消息用于 Rich Edit 控件设置其所见即所得(WYSIWYG)格式的目标设 备及行宽度。 语法:语法: 格式如下: lResult = SendMessage( / 返回值 (HWND) hWndControl, / 目标控件句柄 (UINT) EM_SETTARGETDEVICE, / 消息 ID (WPARAM) wParam, / = (WPARAM) () wParam; (LPARAM) lParam / = (LPARAM) () lParam; ); 参数:参数: wParam 目标设备的设备上下文句柄。 lParam 用于格式化的行宽度。 返回值:返回值: 如果操作成功,返回值为一个非 0 值;如果返回失败,返回 0。 消息信息:消息信息: 头文件头文件Declared in Richedit.h 操作系统操作系统Windows 95, Windows NT 4.0 四、算法源码四、算法源码 4.1 WYSIWYG(所见即所得)显示(所见即所得)显示 WYSIWYG 是 What you see is what you get 的缩写,表示在编辑过程中显示状态与打印效果一致。 # # 功能: RTF 的所见即所得显示(与打印宽度一致) # # 参数: RTF :RTF 控件 # MarginLeft :左边距 # MarginRight :右边距 # MarginTop :上边距 # MarginBottom :下边距 # PaperWidth :页宽 # PaperHeight :页高 # # 说明: 总是以屏幕为度量标准! # Public Sub WYSIWYG_RTF(ByRef RTF As RichTextBox, _ ByVal MarginLeft As Long, _ ByVal MarginRight As Long, _ ByVal MarginTop As Long, _ ByVal MarginBottom As Long, _ ByVal PaperWidth As Long, _ ByVal PaperHeight As Long) Dim lngOffsetLeft As Long 左边偏移量 Dim lngMarginLeft As Long 左边距 Dim R As Long 返回值 Dim lHDC As Long lHDC = GetDC(0) 取屏幕的设备上下文 PaperWidth = PaperWidth - MarginLeft MarginRight计算可打印文字宽度 R = SendMessage(RTF.hwnd, EM_SETTARGETDEVICE, lHDC, ByVal PaperWidth)改变行宽,执行渲染 End Sub 4.2 虚拟打印算法(分页,不作实际打印)虚拟打印算法(分页,不作实际打印) 先定义下面的结构体用于存储分页结果: Public Type PageInfo PageNumber As Long 页码 Start As Long 字符起始位置 End As Long 字符终止位置 ActualHeight As Long 本页实际打印高度 End Type Public AllPages() As PageInfo 存储分页信息 分页算法如下: # # 功能: 执行虚拟打印,更新 RTF 的分页信息 # Public Sub DoVirtualPrint(ByRef RTF As RichTextBox) Dim lngLeft As Long Dim lngTop As Long Dim lngRight As Long Dim lngBottom As Long Dim lngPageCount As Long 总页数 Dim fr As FORMATRANGE 格式化的文本范围 Dim rcDrawTo As RECT 目标文字区域 Dim rcPage As RECT 目标页面区域 Dim lngNextPos As Long 下一个字符位置 Dim R As Long 返回值 Dim lngPWidth As Long 记录目标控件的原始尺寸 Dim lngPHeight As Long lngPWidth = picBuff.Width lngPHeight = picBuff.Height picBuff.Width = mvarPaperWidth picBuff.Height = mvarPaperHeight 开始一个打印作业,用于获取有效的目标设备上下文句柄 hDC picBuff.ScaleMode = vbTwips 设置打印机单位为缇。 设置可打印页面区域 rcPage.Left = 0 rcPage.Top = 0 rcPage.Right = picBuff.ScaleWidth rcPage.Bottom = picBuff.ScaleHeight 设置可打印文字区域 lngLeft = MarginLeft lngTop = MarginTop lngRight = picBuff.ScaleWidth - MarginRight lngBottom = picBuff.ScaleHeight - MarginBottom rcDrawTo.Left = lngLeft rcDrawTo.Top = lngTop rcDrawTo.Right = lngRight rcDrawTo.Bottom = lngBottom 设置打印指令(FormatRange 消息需要的打印信息) fr.hdc = picBuff.hdc 渲染设备 fr.hdcTarget = picBuff.hdc 目标设备 fr.rc = rcDrawTo 文字矩形区域 IN/OUT fr.rcPage = rcPage 整个页面矩形区域 IN fr.chrg.cpMin = 0 打印区域的文字开始位置 fr.chrg.cpMax = -1 文字结束位置(-1 表示直到末尾) 获取整个 RTF 文本长度 Dim lngTmp As Long 用于记录单页字符起始位置 循环分页打印 Do 发送 EM_FORMATRANGE 消息进行虚拟打印 lngNextPos = SendMessage(RTF.hWnd, EM_FORMATRANGE, 0, fr)只分页,不打印 If lngNextPos = lngTmp Then Exit Do 完成所有页面的分页 lngPageCount = lngPageCount + 1 页数1 记录分页信息 ReDim Preserve AllPages(1 To lngPageCount) As PageInfo AllPages(lngPageCount).PageNumber = lngPageCount AllPages(lngPageCount).ActualHeight = fr.rc.Bottom - fr.rc.Top 实际打印高度 AllPages(lngPageCount).Start = lngTmp AllPages(lngPageCount).End = lngNextPos lngTmp = lngNextPos fr.chrg.cpMin = lngNextPos 下一页起始字符位置 fr.hdc = picBuff.hdc fr.hdcTarget = picBuff.hdc fr.rc = rcDrawTo 必须重新设置文字区域,否则有误! Loop PageCount = lngPageCount AllPages(lngPageCount).End = -1 最后一页结束位置为最末尾 允许 RTF 释放内存 R = SendMessage(RTF.hWnd, EM_FORMATRANGE, 0, ByVal CLng(0) End Sub 4.3 打印算法(按照前面分页的结果进行打印)打印算法(按照前面分页的结果进行打印) # # 功能: 打印单独页面到指定设备(打印机/图片框) # # 参数: PageNumber :页码 # objTarget :打印的目标控件(Printer/图片框) # Public Sub PrintPage(ByRef RTF As RichTextBox , ByVal PageNumber As Long, _ Optional ByRef objTarget As Object = Nothing) Dim lngOffsetLeft As Long 左边缘偏移量 Dim lngOffsetTop As Long 上边缘偏移量 Dim lngLeft As Long Dim lngTop As Long Dim lngRight As Long Dim lngBottom As Long Dim lngPageCount As Long 总页数 Dim fr As FORMATRANGE 格式化的文本范围 Dim rcDrawTo As RECT 目标文字区域 Dim rcPage As RECT 目标页面区域 Dim lngNextPos As Long

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论