OK-ED 일 때 구성 요소를 인쇄 할 수있는 인쇄 대화 상자를 어떻게 표시합니까?ExtJS 구성 요소를 인쇄하는 방법은 무엇입니까?
답변
ExtJS에서 인쇄하는 것은 아주 쉽지 않습니다. 구성 요소를 인쇄 할 수있게 만드는 데 가장 좋은 자료는 Sencha architect's blog에서 찾을 수 있습니다. 이 게시물에서는 구성 요소에 대한 사용자 지정 인쇄 렌더러 및 인쇄에 대한 기타 세부 정보를 설정하는 방법에 대해 설명합니다. 그러나이 정보는 ExtJS 3.x 용입니다. ExtJS 4로 쉽게 인쇄 할 수 있습니다.
var targetElement = Ext.getCmp('PrintablePanelId');
var myWindow = window.open('', '', 'width=200,height=100');
myWindow.document.write('<html><head>');
myWindow.document.write('<title>' + 'Title' + '</title>');
myWindow.document.write('<link rel="Stylesheet" type="text/css" href="http://dev.sencha.com/deploy/ext-4.0.1/resources/css/ext-all.css" />');
myWindow.document.write('<script type="text/javascript" src="http://dev.sencha.com/deploy/ext-4.0.1/bootstrap.js"></script>');
myWindow.document.write('</head><body>');
myWindow.document.write(targetElement.body.dom.innerHTML);
myWindow.document.write('</body></html>');
myWindow.print();
extjs 인쇄 가능 구성 요소를 문서에 씁니다.
+1이 방법을 사용하여 확장했습니다 (아래 답변 참조). – Peter
나는 Gopal Saini의 답변을 좋아합니다! 나는 그의 접근법을 취하고 내 애플 리케이션 중 하나를위한 함수를 작성했다. 여기에 코드가 있습니다. FF와 Safari에서 테스트되었습니다. IE에서 시도하지 않았지만 작동해야합니다.
print: function(el){
var win = window.open('', '', 'width='+el.getWidth()+',height='+el.getHeight());
if (win==null){
alert("Pop-up is blocked!");
return;
}
Ext.Ajax.request({
url: window.location.href,
method: "GET",
scope: this,
success: function(response){
var html = response.responseText;
var xmlDoc;
if (window.DOMParser){
xmlDoc = new DOMParser().parseFromString(html,"text/xml");
}
else{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.loadXML(html);
}
win.document.write('<html><head>');
win.document.write('<title>' + document.title + '</title>');
var xml2string = function(node) {
if (typeof(XMLSerializer) !== 'undefined') {
var serializer = new XMLSerializer();
return serializer.serializeToString(node);
} else if (node.xml) {
return node.xml;
}
}
var links = xmlDoc.getElementsByTagName("link");
for (var i=0; i<links.length; i++){
win.document.write(xml2string(links[i]));
}
win.document.write('</head><body>');
win.document.write(el.dom.innerHTML);
win.document.write('</body></html>');
win.print();
},
failure: function(response){
win.close();
}
});
}
또 다른 옵션은 구성 요소를 이미지 또는 pdf로 렌더링하는 것입니다. 팝업 창/인쇄 옵션이 좋지만 일부 브라우저는 올바르게 인쇄되지 않습니다. 그들은 배경 이미지, 특정 CSS 속성 등을 무시하는 경향이 있습니다. 구성 요소가 팝업 창에 나타나는 것과 똑같이 인쇄되도록하려면 html을 이미지로 변환하기 위해 서버 측 코드를 작성해야합니다.
print: function(el){
var waitMask = new Ext.LoadMask(Ext.getBody(), {msg:"Please wait..."});
waitMask.show();
//Parse current url to set up the host and path variables. These will be
//used to construct absolute urls to any stylesheets.
var currURL = window.location.href.toString();
var arr = currURL.split("/");
var len = 0;
for (var i=0; i<arr.length; i++){
if (i<3) len+=(arr[i].length+1);
}
var host = currURL.substring(0, len);
if (host.substring(host.length-1)=="/") host = host.substring(0, host.length-1);
var path = window.location.pathname;
if (path.lastIndexOf("/")!=path.length-1){
var filename = path.substring(path.lastIndexOf("/")+1);
if (filename.indexOf(".")!=-1){
path = path.substring(0, path.lastIndexOf("/")+1);
}
else{
path += "/";
}
}
//Start constructing an html document that we will send to the server
var html = ('<html><head>');
html += ('<title>' + document.title + '</title>');
//Insert stylesheets found in the current page. Update href attributes
//to absolute URLs as needed.
var links = document.getElementsByTagName("link");
for (var i=0; i<links.length; i++){
var attr = links[i].attributes;
if (attr.getNamedItem("rel")!=null){
var rel = attr.getNamedItem("rel").value;
var type = attr.getNamedItem("type").value;
var href = attr.getNamedItem("href").value;
if (href.toLowerCase().indexOf("http")!=0){
if (href.toString().substring(0, 1)=="/"){
href = host + href;
}
else{
href = host + path + href;
}
}
html += ('<link type="' + type + '" rel="' + rel+ '" href="' + href + '"/>');
}
}
html += ('</head><body id="print">');
html += (el.dom.innerHTML);
html += ('</body></html>');
//Execute AJAX request to convert the html into an image or pdf -
//something that will preserve styles, background images, etc.
//This, of course, requires some server-side code. In our case,
//our server is generating a png that we return to the client.
Ext.Ajax.request({
url: "/WebServices/Print?action=submit",
method: "POST",
rawData: html,
scope: this,
success: function(response){
var url = "/WebServices/Print?action=pickup&id="+response.responseText;
window.location.href = url;
waitMask.hide();
},
failure: function(response){
win.close();
waitMask.hide();
var msg = (response.responseText.length>0 ? response.responseText : response.statusText);
alert(msg);
}
});
}
는 다시,이 이미지로 html로 변환하는 일부 서버 측의 마법이 필요합니다
는 다음과 같은 클라이언트 코드가 어떻게 표시되는지를 보여줍니다. 제 경우에는 "인쇄"서비스를 구현했습니다. 고객은 "제출"작업을 통해 작업 요청을 제출하고 "픽업"작업을 통해 출력 제품을 검색합니다.
html을 이미지로 변환하려면 Web Screen Capture이라는 무료 명령 줄 앱을 사용했습니다. Windows에서만 작동하며 위험에 얼마나 확장 성이 있는지를 잘 모릅니다.
는 ExtJS 4.1 : 또한 구성 요소를 추가 할 수 있습니다 https://github.com/loiane/extjs4-ux-gridprinter
true로 설정 모달 특성으로 Ext.window.Window에 인쇄 단지에만 원하는 구성 요소를 인쇄하는 표준 인쇄 대화 상자를 엽니 할 .
var view = this.getView();
var extWindow = Ext.create('Ext.window.Window', { modal: true });
extWindow.add(component); // move component from the original panel to the popup window
extWindow.show();
window.print(); // prints only the content of a modal window
// push events to the event queue to be fired on the print dialog close
setTimeout(function() {
view.add(component); // add component back to the original panel
extWindow.close();
}, 0);
이것은 저에게 효과적입니다. 또한 구성 요소를 반복하는 함수를 만들었습니다. 패널 높이를 확인하고 페이지 나누기가 필요할 때 빈 div를 삽입했습니다. –
- 1. Wpf 구성 요소를 인쇄하는 방법
- 2. FireFox3에서 Flex Flex 구성 요소를 인쇄하는 방법은 무엇입니까?
- 3. JavaScript에서 전체 HTML 요소를 인쇄하는 방법은 무엇입니까?
- 4. listView에서 구성 요소를 가져 오는 방법은 무엇입니까?
- 5. Admin Generator에서 구성 요소를 사용하는 방법은 무엇입니까?
- 6. javascript에서 jsf 구성 요소를 추가하는 방법은 무엇입니까?
- 7. FluentNHibernate로 일반 구성 요소를 구성하는 방법은 무엇입니까?
- 8. 파일이 아닌 구성 요소를 관리하는 방법은 무엇입니까?
- 9. 로드시 RichFaces 구성 요소를 숨기는 방법은 무엇입니까?
- 10. PL/SQL에서 ARRAY의 모든 요소를 인쇄하는 방법은 무엇입니까?
- 11. Flex 구동 페이지 내에서 ExtJs 구성 요소를 사용할 수 있습니까?
- 12. ExtJS에서 구성 요소를 어떻게 다시 사용합니까?
- 13. HBITMAP에서 텍스트를 인쇄하는 방법은 무엇입니까?
- 14. iPhone에서 날짜를 인쇄하는 방법은 무엇입니까?
- 15. DataGridview 결과를 인쇄하는 방법은 무엇입니까?
- 16. CMD를 통해 인쇄하는 방법은 무엇입니까?
- 17. 개체 변수를 인쇄하는 방법은 무엇입니까?
- 18. 콘솔에 나무를 인쇄하는 방법은 무엇입니까?
- 19. C에서 % s을 인쇄하는 방법은 무엇입니까?
- 20. 배열에서 개체를 인쇄하는 방법은 무엇입니까?
- 21. listview에서 구성 요소를 사용하고 목록 항목을 클릭하고 구성 요소를 클릭하는 방법은 무엇입니까?
- 22. 접힌 상태에서 ExtJS 아코디언 초기화 구성 요소
- 23. ExtJS 3.2.1 xtype에 사용할 구성 요소 등록
- 24. 스윙 구성 요소를 선택적으로 오버레이합니까?
- 25. 맞춤 구성 요소를 만드는 방법
- 26. 바코드 라벨을 인쇄하는 옵션은 무엇입니까?
- 27. 다른 스레드에서 구성 요소를 업데이트하는 방법은 무엇입니까? .NET CF
- 28. zend 양식에서 미리보기 구성 요소를 사용하는 방법은 무엇입니까?
- 29. 드롭 대상 TransferHandler에서 드래그 소스 구성 요소를 찾는 방법은 무엇입니까?
- 30. android에서 항목을 사용하여 목록보기에 구성 요소를 배치하는 방법은 무엇입니까?
저 Sencha 건축가 링크가 끊어졌습니다. – Blaise
Wayback Machine의 블로그 게시물 복사본을 사용하기위한 링크가 업데이트되었습니다. – NT3RP