У меня есть необходимость распечатать html-документ из приложения форм UWP Xamarin без диалогового окна подтверждения печати, которое будет показано пользователю.Я посмотрел в Использование полного доверия, но это, похоже, было удалено.Настройка
<Capabilities>
<rescap:Capability Name="runFullTrust"/>
</Capabilities>
Недопустимое повторное копирование отчетов.
Я также безуспешно пытался использовать службу для печати.Использование InternetExplorer или WebBrowser для форматирования и печати работает нормально из приложения Windows Form, но при запуске в службе эфир никогда не вернется после перехода к документу или из команды для печати.
void PrintOnStaThread(string htmlPath)
{
const short PRINT_WAITFORCOMPLETION = 2;
const int OLECMDID_PRINT = 6;
const int OLECMDEXECOPT_DONTPROMPTUSER = 2;
using (var browser = new WebBrowser())
{
DebugLog.WriteLog("Control WebBrowser created");
browser.Navigate(htmlPath);
while (browser.ReadyState != WebBrowserReadyState.Complete)
{
DebugLog.WriteLog("DoEvents loop");
Application.DoEvents();
}
DebugLog.WriteLog("DoEvents loop finished");
dynamic ie = browser.ActiveXInstance;
ie.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, PRINT_WAITFORCOMPLETION);
DebugLog.WriteLog("DoEvents loop finished end of method");
}
}
или
public void Print(string htmlFilename)
{
documentLoaded = false;
documentPrinted = false;
DebugLog.WriteLog("Pre new InternetExplorer()");
InternetExplorer ie = new InternetExplorerClass();
ie.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(ie_DocumentComplete);
ie.PrintTemplateTeardown += new DWebBrowserEvents2_PrintTemplateTeardownEventHandler(ie_PrintTemplateTeardown);
object missing = Missing.Value;
DebugLog.WriteLog("Pre navigate");
ie.Navigate(htmlFilename, ref missing, ref missing, ref missing, ref missing);
while (!documentLoaded && ie.QueryStatusWB(OLECMDID.OLECMDID_PRINT) != OLECMDF.OLECMDF_ENABLED)
{
Thread.Sleep(100);
}
DebugLog.WriteLog("Doc loaded");
ie.ExecWB(OLECMDID.OLECMDID_PRINT, OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, ref missing, ref missing);
DebugLog.WriteLog("Printing");
while (!documentPrinted)
{
Thread.Sleep(100);
DebugLog.WriteLog("Printing loop");
}
DebugLog.WriteLog("Printed");
ie.DocumentComplete -= ie_DocumentComplete;
ie.PrintTemplateTeardown -= ie_PrintTemplateTeardown;
ie.Quit();
}
Я перепробовал много разных вариантов этих подходов с одинаковым результатом.
Реализация кода, который люди привыкли к прошлому (датированному около 2016 года), кажется, больше не работает, поэтому я предполагаю, чтоэто было ограничено Microsoft.Кто-нибудь знает, чтобы добиться того, что мне нужно сделать?