VC 打 印 字 體 的 控 制

2021-04-02 01:45:51 字數 3147 閱讀 5665

vc5 打 印 字 體 的 控 制

---- vc5.0 為windows 的程式設計師提供了乙個很好的c++開發環境,減少了很多程式設計負擔,但同時也為我們在程式中加入自己的思想增加了難度。本人在一軟體開發中,想控制文字列印時的字型,使字型大小縮小一倍,以節省列印紙。經過一段時間的摸索,終於解決了這一問題,下面分幾步向大家做一介紹。

一、對vc5自動生成的程式框架進行改進 ----

這裡用vc5自動建立乙個例子程式test,單文件介面,注意在最後

一步修改view的繼承類為ceditview。

---- 在view類中,vc5已經自動建立了三個用於支援列印的函式:onprepareprinting,

onbeginprinting,onendprinting。為了實現我們的功能,需要再繼承以下幾個函式:

onpreparedc,onprint。並將onpreparedc和onendprinting改為如下實現:

// onpreparedc()

void ctestview::onpreparedc(cdc* pdc, cprintinfo* pinfo)

// onendprinting()

void ctestview::onendprinting(cdc* pdc, cprintinfo* pinfo)

---- 用cview來替代原來的ceditview,用以避免ceidtview對列印的控制。控制字型及輸

出的功能主要在onbeginprinting和onprint兩個函式來實現。

二、實現onbeginprinting函式

根據vc5程式設計機制,在onbeginprinting函式實現列印前的準備工作,

包括設定列印字型,根據印表機當前頁面尺寸計算所需頁數等。下面的

程式是對列印字型的重新設定和計算所需列印紙頁數。

---- 程式中首先取得印表機的橫向和縱向解析度,再得到當前列印字型的大小,然後計

算出新的字型大小,為預設字型的一半。讀者可以根據需要設定自己的列印字型大小。接

著,取得當前列印紙的寬度和高度,再根據新字型的寬度和高度計算出每行的最大字元數

和每頁的最大行數。由於列印檔案中有些行的寬度可能超過每行的最大字元數,所以程式

中呼叫函式redealtextdata()對列印檔案進行重新整理,函式的實現在下面介紹。

---- 最後,程式中計算並設定所需的列印頁數。

---- onbeginprinting()函式實現如下:

//***********************************=

// onbeginprinting

//***********************************=

void ctestview::onbeginprinting(cdc* pdc,

cprintinfo* pinfo)

--- redealtextdata函式根據每行最大寬度對檔案進行重新調整。主要是計算檔案中每

行的寬度,如果超過最大寬度則加入換行符(0x0d,0x0a)。函式實現如下:

//***********************************====

// redealtextdata

//注:

//pdoc->buffer為檔案緩衝區

//pdoc->file_length為檔案位元組長度

//pdoc->textlines為檔案原行數

//pdoc->maxlinelength為檔案原最大行位元組寬度

//***********************************====

void ctextview::redealtextdata()

else

//如果行寬大於每行最大寬度,進行特殊處理

if(thelinelength > linelengthmax)

else //漢字

newtempptr++; //加入換行符,分為兩行

*newtempptr++="0x0d;" ;

*newtempptr++="0x0a;" ;

for(short k="m+1;" k<256; k++)

*newtempptr++="buff[k]";

m_lines++;

thelinelength="0";

m_file_length +="2;" } } i++; } }

三、實現onprint函式

--- 在onprint函式中實現真正的文字輸出,主要功能包括設定列印字

體大小,計算當前頁號文字輸出位置,以及文字的輸出列印。

---- 程式中首先計算列印區域,文字在這個列印區域內輸出。然後設定新的列印字型。

---- 由於onprint函式是每列印一頁被呼叫一次,所以需要根據當前列印頁號計算出當

前頁的文字在整個文字緩衝區的起始偏移量和終止偏移量。這裡程式中呼叫了函式getoffset(),此函式在下面介紹。

---- 最後呼叫windows的drawtext()函式實現文字的輸出。

---- onprint()函式實現如下:

//***********************************=

// onprint

//****************************************

void ctestview::onprint(cdc* pdc,

cprintinfo* pinfo)

---- 程 序 中 的 getoffset 函 數 是 根 據 給 定 的 行 號 計 算 文 字 的位 置, 其 實 現 如 下:

//****************************************

// getoffset ()

//****************************************

long    ctestview::getoffset(lpstr buffer,

long buffer_length,

unsigned short startline)

{if(startline == 0) return 0;

unsigned short lines=0;

long    i,j;

i = 0;

while(i

----

Findreport報表列印字型顯示問題

注 該路徑需是weblogic在用的jdk路徑,可以通過ps ef grep weblogic 檢視weblogic在用的jdk是哪個。3 使用weblogic使用者執行以下三條命令 sudo mkfontscale 建立字型的fonts.scale檔案,它用來控制字型旋轉縮放 sudo mkfon...

QuickReport列印字型怪怪的如何解決!

三年前做得乙個藥店的銷售單列印的專案,最近又找到了,拿出來測試一下結果用delphi重新編譯,執行軟體,列印。結果發現銷售單的寬度沒有變化,結果字型拉長,紙張的高度本來一概94公釐高,結果成了a4紙張這麼大 去網路上google了一下,沒有找到類似的案例,沒有辦法只有自己解決了,舊程式是好的,新程式...

word文件字不靠邊 Word列印字型靠右怎麼辦

回答 解決方案 1 檢查印表機是否和計算機中的對應埠連線好了。2 系統檔案損壞導致程式出錯 無法連線印表機也可能是系統中與新增印表機程式相關的一些系統檔案意外損壞或丟失了,導致新增印表機程式執行時發生錯誤。為了驗證windows系統檔案是否受到損壞,你可以按照如下方法來嘗試修復受損的系統檔案 依次單...