Windows Forms/C# - 클립보드에 RTF 텍스트를 복사 및 확인하는 방법
다음의 글을 쓰면서,
PowerShell ISE의 스크립트를 복사 후 PPT/Word에 붙여 넣으면 한글이 깨지는 문제
; https://www.sysnet.pe.kr/2/0/11927
만들어 본 간단한 예제입니다. RTF 텍스트가 있다면 적절하게 escape 처리를 하시고,
string txt = @"{\rtf1\ansi\ansicpg949\deff0\nouicompat\deflang1033\deflangfe1042{\fonttbl{\f0\fnil\fcharset0 Malgun Gothic;}{\f1fnilfcharset129 Malgun Gothic;}{\f2\fnil\fcharset129 \'b8\'bc\'c0\'ba \'b0\'ed\'b5\'f1;}}
{\colortbl ;\red0\green0\blue0;\red0\green100\blue0;\red0\green0\blue255;}
{\*\generator Riched20 10.0.17763}\viewkind4\uc1
\pard\cf1\f0\fs20\lang1042\par
\cf2 #\f1\'c5\'d7\'bd\'ba\'c6\'ae\'c0\'d4\'b4\'cf\'b4\'d92.\cf1\par
\par
\pard\sa200\sl276\slmult1\cf3 Get-Item\cf0\f2\lang18\par}
";
DataObject를 이용해 클립보드에 데이터를 전달할 수 있습니다.
DataObject dataObject = new DataObject();
dataObject.SetData(DataFormats.Rtf, txt);
Clipboard.SetDataObject(dataObject);
클립보드에 데이터가 잘 전달되었는지 확인하고 싶다면 다음과 같이 열람하는 코드를 만들 수 있습니다.
foreach (string txt in Clipboard.GetDataObject().GetFormats())
{
System.Diagnostics.Trace.WriteLine(txt);
object objValue = Clipboard.GetData(txt);
if (objValue != null)
{
System.Diagnostics.Trace.WriteLine(objValue);
}
}
참고로, 위의 코드를 잘 활용하면 현재 클립보드에 복사된 모든 유형의 데이터를 확인하는 용도로도 쓸 수 있습니다. (일례로, Microsoft Word에서 복사를 했는데 클립보드에 어떤 식으로 데이터가 전달되었는지 확인)
다음은 이 글의 소스 코드를 프로젝트 파일로 제공합니다.
DotNetSamples/WinForms/CopyRTFtoClipboard/
; https://github.com/stjeong/DotNetSamples/tree/master/WinForms/CopyRTFtoClipboard
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]