2017-03-24 6 views
-1

인쇄 대화 상자없이 영수증을 인쇄 할 수있는 간단한 POS WPF 앱을 만들고 있습니다. 좁은 글꼴을 사용해야하므로 NK57 Monospace Cd Bk을 선택했습니다. Windows 10에서는 작동하지만 Windows 7에서는 여전히 기본 글꼴 만 사용하여 인쇄합니다. 대상 프린터 (Epson TM-T20II), 일반 프린터 및 PDF로 인쇄를 시도했지만 문제가 발생할 때마다 발생합니다. 또한 몇 가지 다른 Windows 10 및 Windows 7 컴퓨터를 시험해 보았습니다. W10은 매번 작동했지만 W7은 매번 실패했습니다. TextBlock.FontFamily 글꼴에 글꼴을 사용하지 않습니다.

는 지금까지 시도 :
  • 는 Windows 7에 글꼴을 설치하고 직접 사용 : 새 FontFamily를 ("NK57 고정 폭 카드뮴 된 Bk을"). 글꼴이 InstalledFontCollection에서 발견되었습니다. (어쩌면 Font.Name == fontName을 사용하여 테스트했지만, 통과 한 테스트 임) 인쇄에는 사용되지 않았습니다.
  • 이 .TTF 파일에서 직접 폰트를로드 새 FontFamily를을 (새 열린 우리당 (해당 AppDomain.CurrentDomain.BaseDirectory + "# NK57 고정 폭 카드뮴 Bk에"UriKind.Absolute), "NK57 고정 폭 카드뮴 Bk에")
  • 팩 글꼴 app : new FontFamily ("pack : // 응용 프로그램 : ,,,./Fonts/# NK57 Monospace Cd Bk") 또는 새로운 FontFamily ("pack : // 응용 프로그램 : ,,,./Fonts/# NK57 Monospace Cd Bk ");
  • 널리 권장되는 PrivateFontCollection을 사용하지만 WPF에서는 지원되지 않습니다.
  • 대신 새 글꼴 ("...")을 사용하십시오. 그러나 FontFamily로 변환하는 적절한 방법을 찾지 못했습니다.

Windows 7에서는 아무 것도 작동하지 않았고 대부분 Windows 10에서 작동했습니다. 아래의 간단한 코드 샘플 (용지를 절약하기 위해 PDF 인쇄 사용).

var pd = new PrintDialog(); 
pd.PrintQueue = new LocalPrintServer().GetPrintQueue("Microsoft Print to PDF"); 
pd.PrintTicket.CopyCount = 2; // number of copies 
pd.PrintTicket.PageOrientation = PageOrientation.Portrait; 

FixedDocument document = new FixedDocument(); 
document.DocumentPaginator.PageSize = new Size(pd.PrintableAreaWidth, pd.PrintableAreaHeight); 

FixedPage page1 = new FixedPage(); 
page1.Width = document.DocumentPaginator.PageSize.Width; 
page1.Height = document.DocumentPaginator.PageSize.Height; 

//var fontReg = new FontFamily("NK57 Monospace Cd Bk"); 
//var fontReg = new FontFamily(new Uri(AppDomain.CurrentDomain.BaseDirectory + "#NK57 Monospace Cd Bk", UriKind.Absolute), "NK57 Monospace Cd Bk"); 
//var fontReg = new FontFamily("file:///" + AppDomain.CurrentDomain.BaseDirectory + "#NK57 Monospace Cd Bk"); 
//var fontReg = new FontFamily("pack://application:,,,./Fonts/#NK57 Monospace Cd Bk"); 
var fontReg = new FontFamily(new Uri("pack://application:,,,/Fonts/"), "./#NK57 Monospace Cd Bk"); 

TextBlock t = new TextBlock(); 
t.Text = "This is a test"; 
t.FontFamily = fontReg; 
t.FontSize = 14; 
page1.Children.Add(t); 

PageContent page1Content = new PageContent(); 
((IAddChild)page1Content).AddChild(page1); 
document.Pages.Add(page1Content); 

pd.PrintDocument(document.DocumentPaginator, "Print"); 

어떤 아이디어가 잘못 되었나요? 지금까지 유일한 해결책은 고객의 시스템을 Windows 10으로 업그레이드하는 것입니다 (조만간 완료 될 예정이며 완료된 앱의 배송이 지연됩니다).

도움을 주셔서 대단히 감사합니다.

+0

프린터 제조업체, 모델 및 드라이버에 따라 지원되지 않거나 프린터 드라이버 설정을 확인해야 할 수 있습니다. 일부 프린터는 이미 ROM에있는 글꼴 만 인쇄합니다. TrueType 또는 다른 글꼴 형식을 다운로드 할 수 없습니다. 일반적으로 이러한 경우에 텍스트를 래스터 화하도록 프린터 드라이버 설정을 설정할 수 있지만 경우에 따라 비활성화 할 수 있습니다. 물론 어떤 경우에는 옵션을 얻지 못할 수도 있습니다. 이 특정 드라이버로 수행 할 수있는 작업을 보려면 프린터 설정에서 찾아야합니다. XPS 드라이버로 테스트하여 코드 문제를 배제하십시오. –

+0

@PeterDuniho 드라이버 설정이 PDF에도 적용됩니까? PDF로 인쇄 할 때도 작동하지 않았습니다.나는 W7에서 실제로 지원되지 않는다고 생각하기 시작했다. 비록 가장자리의 경우 시나리오 (WPF에서 사용자 정의 글꼴을 사용하여 실제로 인쇄하는 사람이 아닌가?)를 고려하지 않고 있다고 생각하기 시작했다. 나는 어쨌든 프린터 설정으로 바이올린을 시도 할 것이다. 팁 덕택이다. – mikiqex

+0

@mikiqex 정규 레이저젯에 맞춤 글꼴로 인쇄 할 때 글꼴을 잃어 버리는 문제가있었습니다. 나는 꽤 해킹으로 끝났다; 컨트롤의 이미지를 생성하고 그 이미지를 대신 인쇄하십시오. 나는이 질문에 대한 답을보기를 원합니다. 일반 프린터를 사용할 때 글꼴을 유지합니까? – Heki

답변

0

깨끗한 가상 윈도우 7에서 작업 한 후에 나는 스스로를 추적했고 다른 글꼴 스타일을 많이 사용했기 때문에 처음에는 틀린 글꼴로 응용 프로그램을 출하했다고 생각합니다. 이번에 올바른 글꼴이 고객의 Windows 7에 설치되었는지 확인한 후 코드를

var fontReg = new FontFamily("NK57 Monospace Cd Bk"); 

으로 되 돌렸고 현재 작동 중입니다. 어쨌든, 필자는 Windows 7에서는 작동하지 않았기 때문에 Windows 7에서는 지원되지 않는 ttf 파일에 대한 링크를 사용하여 ttf 파일에 대한 링크를 사용한다고 주장하지만 Windows 7에서는 작동하지 않았고 같은 잘못된 글꼴 실수.

감사의 말, Peter와 Heki, 귀하의 제안에 감사드립니다.