Я использую Службы SQL Reporting, он отлично работает и показывает кнопку печати в IE, но не показан в Mozilla Firefox.
Есть ли у кого-нибудь идеи?
Я проверил это решение, но он не работает:
Я использую Службы SQL Reporting, он отлично работает и показывает кнопку печати в IE, но не показан в Mozilla Firefox.
Есть ли у кого-нибудь идеи?
Я проверил это решение, но он не работает:
Я не думаю, что он использует ActiveX, потому что в таблице onclick событие есть просто:
ReportFramerpvReport.GetReportFrame().contentWindow.print()
Во всяком случае, я заменил этот материал для печати своей собственной функцией печати, потому что этот код выше не работал над FF..
Я знаю это уродливо... но это работает! (просто замените значение ControlName на свой ControlID и обязательно добавьте jQuery lib на свою страницу)
$(document).ready(function()
{
if ($.browser.mozilla)
{
try
{
var ControlName = 'RptDespesas';
var innerScript = '<scr' + 'ipt type="text/javascript">document.getElementById("' + ControlName + '_print").Controller = new ReportViewerHoverButton("' + ControlName + '_print", false, "", "", "", "#ECE9D8", "#DDEEF7", "#99BBE2", "1px #ECE9D8 Solid", "1px #336699 Solid", "1px #336699 Solid");</scr' + 'ipt>';
var innerTbody = '<tbody><tr><td><input type="image" style="border-width: 0px; padding: 2px; height: 16px; width: 16px;" alt="Print" src="/Reserved.ReportViewerWebControl.axd?OpType=Resource&Version=9.0.30729.1&Name=Microsoft.Reporting.WebForms.Icons.Print.gif" title="Print"></td></tr></tbody>';
var innerTable = '<table title="Print" onmouseout="this.Controller.OnNormal();" onmouseover="this.Controller.OnHover();" onclick="PrintFunc(\'' + ControlName + '\'); return false;" id="' + ControlName + '_print" style="border: 1px solid rgb(236, 233, 216); background-color: rgb(236, 233, 216); cursor: default;">' + innerScript + innerTbody + '</table>'
var outerScript = '<scr' + 'ipt type="text/javascript">document.getElementById("' + ControlName + '_print").Controller.OnNormal();</scr' + 'ipt>';
var outerDiv = '<div style="display: inline; font-size: 8pt; height: 30px;" class=" "><table cellspacing="0" cellpadding="0" style="display: inline;"><tbody><tr><td height="28px">' + innerTable + outerScript + '</td></tr></tbody></table></div>';
$("#" + ControlName + " > div > div").append(outerDiv);
}
catch (e) { alert(e); }
}
});
function PrintFunc(ControlName)
{
setTimeout('ReportFrame' + ControlName + '.print();', 100);
}
Вышеупомянутое решение не работало для меня, поэтому после проверки отображаемого html я сделал следующие изменения в этом решении.
ReportViewerGeneral_ctl05 → идентификатор пейджера
VisibleReportContentReportViewerGeneral_ctl09 → идентификатор div, содержащий результат отчета.
pageLoad →
function pageLoad() {
if ($.browser.mozilla && !$("#ff_print").length) {
try {
var ControlName = 'ReportViewerGeneral';
var innerTbody = '<tbody><tr><td><input type="image" style="border-width: 0px; padding: 2px; height: 16px; width: 16px;" alt="Print" src="/Reserved.ReportViewerWebControl.axd?OpType=Resource&Version=9.0.30729.1&Name=Microsoft.Reporting.WebForms.Icons.Print.gif" title="Print"></td></tr></tbody>';
var innerTable = '<table title="Print" onclick="PrintFunc(\'' + ControlName + '\'); return false;" id="ff_print" style="border: 1px solid rgb(236, 233, 216); background-color: rgb(236, 233, 216); cursor: default;">' + innerTbody + '</table>'
var outerDiv = '<div style="display: inline; font-size: 8pt; height: 30px;" class=" "><table cellspacing="0" cellpadding="0" style="display: inline;"><tbody><tr><td height="28px">' + innerTable + '</td></tr></tbody></table></div>';
$("#ReportViewerGeneral_ctl05 > div").append(outerDiv);
}
catch (e) { alert(e); }
}
}
function PrintFunc() {
var strFrameName = ("printer-" + (new Date()).getTime());
var jFrame = $("<iframe name='" + strFrameName + "'>");
jFrame
.css("width", "1px")
.css("height", "1px")
.css("position", "absolute")
.css("left", "-2000px")
.appendTo($("body:first"));
var objFrame = window.frames[strFrameName];
var objDoc = objFrame.document;
var jStyleDiv = $("<div>").append($("style").clone());
objDoc.open();
objDoc.write($("head").html());
objDoc.write($("#VisibleReportContentReportViewerGeneral_ctl09").html());
objDoc.close();
objFrame.print();
setTimeout(function () { jFrame.remove(); }, (60 * 1000));
}
Если вы предлагаете экспортные функции через ReportViewer, пользователь все равно может экспортировать в PDF и распечатать его. Не так эффективно/гладко, как кнопка печати с одним щелчком, но это упрощает работу.
Не решение, а немного информации.
Я использую SSRS довольно регулярно для внутренних проектов, поскольку я знаю, что целевая аудитория использует IE, но я не использую ее для внешних приложений, ориентированных на Интернет, поскольку у меня было так много проблем с ним в FF (сборщики даты не работают и т.д.), хотя я никогда не смотрел параметры кнопки печати, я подозреваю, что это может быть аналогичная проблема (средство управления просмотром отчетов, предназначенное только для IE!), поскольку оно, похоже, влияет на панель инструментов в целом.
Отключение этого http://www.windows-tech.info/15/5fb0fd315e07edf8.php кажется, что некоторые элементы управления activex используются, а FF не делает activeX изначально, хотя я помню плагин, который позволял загружать элементы управления activex, но где я видел, что не могу вспомнить.
EDIT: http://www.iol.ie/~locka/mozilla/plugin.htm Я никогда не использовал его и не могу ручаться за него, но здесь есть плагин.
Для проектов, посвященных веб-проектам, я использую Crystal!
НТН
Я создал решение, которое эмулирует всю кнопку печати из IE в другие браузеры.