|
안녕하세요...여러 가지 테스트를 하고 다시 질문드립니다.
richedit를 사용하여 프린트를 하는 방법으로 세 가지를 시도했는데요...그 방법은 아래와 같습니다.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TPrinter *Prntr = Printer();
TRect r = Rect(200,200,Prntr->PageWidth - 200,Prntr->PageHeight - 200);
Prntr->BeginDoc();
Prntr->Canvas->TextRect(r, 200, 200, RichEdit1->Lines->Text);
Prntr->EndDoc();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TPrinter *p = Printer();
p->BeginDoc();
PrintText(p->Canvas);
p->EndDoc();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
if ( PrintDialog1->Execute() ) RichEdit1->Print(Form1->Caption);
}
//---------------------------------------------------------------------------
void TForm1::PrintText(TCanvas *Canvas)
{
int i,h;
AnsiString S(Form1->Caption);
h = Canvas->TextHeight(S);
for(i=0;i<RichEdit1->Lines->Count;i++)
{
S=RichEdit1->Lines->Strings[i];
Canvas->TextOut(1,h*i,S);
}
}
버튼 1을 눌렀을 때와 2,3을 눌렀을 떄 모두 다른 방법으로 프린트를 해보았는데(제대로 한 건지는 모르겠어요...) 모두 제대로 나오지 않았습니다...
richedit에 텍스트를 뿌리는 방법은 db에서 rtf포맷을 읽어와서 rtfheader와 폰트테이블등 폰트 정보를 붙여주고 rectrl이라는 richedit를 상속받은 놈에 addrtfcontent함수를 만들어 rtf코드를 넘겨주어 richedit에 뿌려주는 형식으로 되어있습니다.
예를 들어 a\u243?bcd\f1 \u2055? \f0 efg 라는 텍스트를 rtfheader와 테일,폰트테이블을 붙여서 addrtfcontent에 넘겨주면 richedit에는 제대로 된 텍스트가 찍혀 나옵니다. (\f1이 직접 만든 폰트입니다.)
헌데 만약 이 텍스트를 98에서 인쇄하면 a bcdㅁefg라고 찍혀서 나옵니다...
\u243?은 찍히지 않고 \f1 \u2055? \f0 는 1바이트짜리 네모가 찍혀 나와요...
유니코드의 문제인지 rtf의 문제인지 richedit의 문제인지 프린트 설정의 문제인지 도무지 원인조차 찾고 있지를 못해 답답할 따름입니다..
조언해주실 분 답변 부탁드립니다...ㅜ.ㅜ
|