Вот мой наиболее часто используемый скрипт ниже. Я использую это для запуска сценариев в двух таблицах / представлениях с заданием SQL и отправляю результаты в виде двух таблиц HTML по почте. Конечно, вы должны создать почтовый профиль перед запуском.
DECLARE @mailfrom varchar(max)
DECLARE @subject varchar(100)
DECLARE @tableHTML NVARCHAR(MAX), @tableHTML1 NVARCHAR(MAX), @tableHTML2 NVARCHAR(MAX), @mailbody NVARCHAR(MAX)
DECLARE @Table1 NVARCHAR(MAX), @Table2 NVARCHAR(MAX)
DECLARE @jobName varchar(100)
SELECT @jobName = name from msdb..sysjobs where job_id = $(ESCAPE_NONE(JOBID))
-- If the result set is not empty then fill the Table1 HTML table
IF (SELECT COUNT(*) FROM [Database].[Schema].[Table1]) > 0
BEGIN
SET @Table1 = N''
SELECT @Table1 = @Table1 + '<tr style="font-size:13px;background-color:#FFFFFF">' +
'<td>' + ColumnText + '</td>' +
'<td>' + CAST(ColumnNumber as nvarchar(30)) + '</td>' + '</tr>'
FROM [Database].[Schema].[Table1]
ORDER BY ColumnText,ColumnNumber
SET @tableHTML1 =
N'<table border="1" align="Left" cellpadding="2" cellspacing="0" style="color:black;font-family:arial,helvetica,sans-serif;text-align:left;" >' +
N'<tr style ="font-size:13px;font-weight: normal;background: #FFFFFF">
<th align=left>ColumnTextHeader1</th>
<th align=left>ColumnNumberHeader2</th> </tr>' + @Table1 + '</table>'
END
ELSE
BEGIN
SET @tableHTML1 = N''
SET @Table1 = N''
END
-- If the result set is not empty then fill the Table2 HTML table
IF (SELECT COUNT(*) FROM [Database].[Schema].[Table2]) > 0
BEGIN
SET @Table2 = N''
SELECT @Table2 = @Table2 + '<tr style="font-size:13px;background-color:#FFFFFF">' +
'<td>' + ColumnText + '</td>' +
'<td>' + CAST(ColumnNumber as nvarchar(30)) + '</td>' + '</tr>'
FROM [Database].[Schema].[Table2]
ORDER BY ColumnText,ColumnNumber
SET @tableHTML2 =
N'<table border="1" align="Left" cellpadding="2" cellspacing="0" style="color:black;font-family:arial,helvetica,sans-serif;text-align:left;" >' +
N'<tr style ="font-size:13px;font-weight: normal;background: #FFFFFF">
<th align=left>ColumnTextHeader1</th>
<th align=left>ColumnNumberHeader2</th> </tr>' + @Table2 + '</table>'
END
ELSE
BEGIN
SET @tableHTML2 = N''
SET @Table2 = N''
END
SET @tableHTML = @tableHTML1 + @tableHTML2
-- If result sets from Table1 and Table2 are empty, then don't sent mail.
IF (SELECT @tableHTML) <> ''
BEGIN
SET @mailbody = N' Write mail text here<br><br>' + @tableHTML
SELECT @mailfrom = 'SQL Server <' + cast(SERVERPROPERTY('ComputerNamePhysicalNETBIOS') as varchar(50)) + '@domain.com>'
SELECT @subject = N'Mail Subject [Job: ' + @jobName + ']'
EXEC msdb.dbo.sp_send_dbmail
@profile_name= 'mailprofilename',
@recipients= '<mailaddress@domain.com>',
@from_address = @mailfrom,
@reply_to = '<mailaddress@domain.com>',
@subject = @subject,
@body = @mailbody,
@body_format = 'HTML'
-- ,@importance = 'HIGH'
END
Есть сценарий, который отображает кучу DIV в разных шрифтах, затем проверяет, имеет ли полученный DIV правильный размер для данного шрифта.
Это возможно, если доступна Flash. См. http://www.maratz.com/blog/archives/2006/08/18/detect-visitors-fonts-with-flash/
Оформить заказ на подключаемый модуль jQuery FontUnstack из этого вопроса .
Вот список наиболее распространенных шрифтов на компьютерах Windows и Mac (со сравнением изображений каждого из них). Я использую его при выборе шрифтов для использования в проекте.
Не существует надежного способа определения установленных (и используемых) шрифтов на клиентском компьютере через браузер.
Flash может позволить вам это сделать, или, возможно, какой-то сумасшедший (но забавный) write) JavaScript, который делает предположения о размере элементов с заданным шрифтом - но этот сценарий может быть восприимчив к различиям в настройках клиента независимо от того, сколько случаев он рассматривает.
Я настоятельно рекомендую не использовать подход опроса / развертывания, который вы предлагают. Вам придется принять некоторые невозможные решения - например, какой процент доступности является приемлемым? Если это 100%, что вы будете делать, если появится новый пользователь, у которого нет этого шрифта? Если это не так,
Нет хорошего способа сделать это. Хотя, если у вас есть список шрифтов, которые вас интересуют, создайте класс с постоянно присутствующим запасным вариантом:
span#knownfont{font-family:Verdana, font-size:12px;}
span#font1{font-family:NonExistingFont1, Verdana, font-size:12px;}
span#font2{font-family:NonExistingFont2, Verdana, font-size:12px;}
...
Then create HTML for each case:
<span id="knownfont">Lorem ipsum dolor sit amet</span>
<span id="font1">Lorem ipsum dolor sit amet</span>
<span id="font2">Lorem ipsum dolor sit amet</span>
Затем напишите сценарий, который сравнивает ширину известного диапазона шрифтов и каждого из другие. Если ширина отличается, шрифт существует на клиенте.
Я знаю, что он еще не поддерживается всеми браузерами, но в css есть @ font-face, как описано здесь , поэтому, если вы знаете, что ваши пользователи используют IE (для пример) вы можете использовать это, чтобы получить шрифт.
Вы можете получить список шрифтов, установленных в клиентской ОС с помощью Flash:
var embeddedAndDeviceFonts:Array = Font.enumerateFonts(true);
Затем вы можете использовать ExternalInterface для перемещения этой информации между Flash и Javascript. Это не требует много кода.
Посмотрите мою статью в блоге об этом для получения дополнительной информации и демонстрационной реализации.