페이지에서 브라우저 인쇄 옵션 (헤더, 바닥 글, 여백)을 비활성화 하시겠습니까?


182

나는이 질문이 SO와 다른 여러 웹 사이트에서 몇 가지 다른 방식으로 질문되는 것을 보았지만 대부분 너무 구체적이거나 오래되었습니다. 나는 누군가가 추측에 신경 쓰지 않고 여기에 확실한 대답을 줄 수 있기를 바랍니다.

누군가 브라우저에서 인쇄 할 때 CSS 또는 자바 스크립트로 기본 프린터 설정을 변경하는 방법이 있습니까? 그리고 물론 "브라우저에서 인쇄"란 PDF 나 다른 플러그인 의존 마임 유형이 아닌 HTML 형식을 의미합니다.

참고 :

일부 브라우저 에서이 기능을 제공하고 다른 브라우저는 그렇지 않은 경우 (또는 일부 브라우저에서만 사용하는 방법 만 알고있는 경우) 브라우저 별 솔루션을 환영합니다.

마찬가지로,이 작업을 수행하는 데 대해 특정 제한이있는 메인 스트림 브라우저를 알고 있다면 도움이 되겠지만 상당히 최신의 문서가 도움이 될 것입니다. (XYZ가 지난 3 년 동안이 정책을 크게 변경했을 때 "XYZ의 보안 정책에 위배된다"고 말하는 것은 그리 설득력이 없습니다).

마지막으로 "기본 인쇄 설정 변경"이라고 말하면 내 페이지만을 의미하는 것이 아니며 인쇄 여백, 머리글 및 바닥 글을 구체적으로 언급하고 있습니다.

CSS는 페이지 여백뿐만 아니라 페이지 방향을 변경하는 옵션을 제공한다는 것을 잘 알고 있습니다. 많은 어려움 중 하나는 Firefox와 관련이 있습니다. 페이지 여백을 1 인치로 설정하면 이미 자리에 놓인 반 인치로 ADDS를 추가합니다.

고객 사이트에서 PDF 사용을 줄이려고하지만 프레젠테이션에 대한 침해 (신뢰성 부족)가 주요 관심사입니다.


그렇게하고 싶은 특별한 이유가 있습니까? 요구 사항을 말하면 다른 가능한 해결책 이있을 수 있습니다 ... 사용자 설정을 변경하는 것은 좋은 해결책처럼 보이지 않습니다 ...
Nivas

1
나는 동의한다. 사용자 설정을 변경하고 싶지 않습니다. 브라우저의 기본 설정을 덮어 쓰고 싶습니다. 그리고 그 대안은 CSS를 통해 다른 모든 것을 프린터 친화적으로 만들 수있을 때 불필요하게 보이는 PDF를 사용하기 때문입니다.
Anthony

답변으로 답변을 확인했지만 크롬에서만 작동합니다. 올바른 솔루션 크로스 브라우저를 얻을 수 있었습니까? 아니면 적어도 몇 개의 브라우저에서? 같은 문제가 발생 원인
mavili

크로스 브라우저 솔루션 은 @mavili stackoverflow.com/a/23778125/453605 를 참조하십시오 .
Marcello Nuccio

답변:


200

CSS 표준은 몇 가지 고급 형식을 지원합니다. @pageCSS 에는 종이와 같은 페이징 된 미디어에만 적용 할 수있는 형식을 지정할 수 있는 지시문이 있습니다. http://www.w3.org/TR/1998/REC-CSS2-19980512/page.html을 참조 하십시오 .

단점은 다른 브라우저에서의 동작이 일관성이 없다는 것입니다. Safari는 여전히 프린터 페이지 여백 설정을 전혀 지원하지 않지만 다른 모든 주요 브라우저는이를 지원합니다.

@page지시문을 사용하면 페이지의 프린터 여백을 지정할 수 있습니다 (HTML 요소의 일반 CSS 여백과 동일하지 않음).

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Print Test</title>
    <style type="text/css" media="print">
    @page 
    {
        size:  auto;   /* auto is the initial value */
        margin: 0mm;  /* this affects the margin in the printer settings */
    }

    html
    {
        background-color: #FFFFFF; 
        margin: 0px;  /* this affects the margin on the html before sending to printer */
    }

    body
    {
        border: solid 1px blue ;
        margin: 10mm 15mm 10mm 15mm; /* margin you want for the content */
    }
    </style>
</head>
<body>
  <div>Top line</div>
  <div>Line 2</div>
</body>
</html>

머리글과 바닥 글을 제거하는 효과를 얻기 위해 기본적으로 페이지 별 여백을 비활성화하므로 본문에 설정 한 여백은 페이지 나누기에서 사용되지 않습니다 ( Konrad 에서 언급 한대로 ). 인쇄 된 내용이 한 페이지 만 인 경우 제대로

Firefox 3.6 , IE 7 , Safari 5.1.7 또는 Chrome 4.1 에서는 작동하지 않습니다 .

@page margin 설정은 IE 8 , Opera 10 , Chrome 21Firefox 19에서 적용 됩니다.
이러한 브라우저에서 콘텐츠에 대한 페이지 여백이 올바르게 설정되어 있지만 머리글 / 바닥 글 숨기기를 해결하는 데 이상적입니다.

이것은 다른 브라우저에서 작동하는 방식입니다.

  • Internet Explorer 에서는 이 인쇄 설정에서 여백이 실제로 0mm로 설정되어 있으며 미리보기를 수행하면 기본적으로 0mm가되지만 미리보기에서이를 변경할 수 있습니다.
    페이지 내용이 실제로 올바르게 배치 된 것을 볼 수 있지만 브라우저 인쇄 머리글과 바닥 글은 투명하지 않은 배경으로 표시되므로 해당 위치에서 페이지 내용을 효과적으로 숨길 수 있습니다.

  • 에서 파이어 폭스 최신 버전, 그것은되는 위치 를 올바르게하지만 나쁜 브라우저 헤더 텍스트의 혼합 및 페이지 콘텐츠처럼 보이는 있도록 머리글 / 바닥 글 텍스트 및 컨텐츠 텍스트 모두 표시됩니다.

  • Opera 에서는 표준 CSS에서 불투명 배경을 사용할 때 페이지 내용이 머리글을 숨기고 머리글 / 바닥 글 위치가 내용과 충돌합니다. 꽤 좋지만 여백이 작은 값으로 설정되어 헤더가 부분적으로 표시되는 경우 이상하게 보입니다. 또한 페이지 여백이 올바르게 설정되지 않았습니다.

  • 에서 크롬 최신 버전, 브라우저 머리글과 바닥 글은 @page 마진이 너무 작게 설정되어있는 경우 숨겨진 내용으로 머리글 / 바닥 글 위치 충돌이.입니다 제 생각에는 이것이 정확히 어떻게 작동 해야하는지입니다.

결론은 Chrome 이 머리글 / 바닥 글을 숨기는 데 가장 적합한 구현이라는 것입니다.


1
명확히하기 위해 Firefox 21 또는 IE10에서 헤더를 제거하지는 않지만 헤더 / 바닥 글이 공간을 차지하지 않는 것으로 생각됩니다. Chrome 28에서 작동합니다.
amh15

2
최신 브라우저 버전을 반영하도록 업데이트했습니다. Chrome은 이제 가장 잘 구현되었습니다.
awe

@SearchForKnowledge : 그렇습니다. 내가 말한대로입니다. IE에서 어떻게 동작하는지에 대한 설명에서 내 대답을 읽으면 "페이지 내용이 실제로 올바르게 배치되어 있지만 브라우저 인쇄 머리글과 바닥 글이 페이지를 숨기고 있음을 알 수 있습니다. 해당 위치에있는 콘텐츠 " IE 8에서는 "효과가 있습니다"라고 말하지만 원하는대로 작동하지는 않습니다 ...이 대답을 명확하게하기 위해 답을 편집 할 것입니다.
경외

머리말뿐만 아니라 왼쪽 marign도 제거합니다. 이제 모든 텍스트가 페이지 가장자리에 있습니다.
Mittchel

7
이 솔루션은 단순히 일을하지 않는 전혀 때문에, @page마진과 body마진이 근본적으로 다른 것 같습니다 body마진에만 적용 몸 전체 , 즉 첫 페이지의 맨 마지막 페이지의 하단. 모든 중간 페이지의 경우 상단 / 하단에 여백이 없습니다.
Konrad Rudolph

86

최신 버전의 Chrome 및 Opera 및 Firefox 48 alpha 1 이상

페이지 여백을 너무 작아서 텍스트를 포함하기에 너무 작아서 비활성화 할 수 있습니다 ( 경외 의 대답 에서 차용 ).

@page {
  size: auto;  /* auto is the initial value */
  margin: 0mm; /* this affects the margin in the printer settings */
}
html {
  background-color: #FFFFFF;
  margin: 0px; /* this affects the margin on the HTML before sending to printer */
}
body {
  border: solid 1px blue;
  margin: 10mm 15mm 10mm 15mm; /* margin you want for the content */
}
<ol>
  <li>
    <a href="data:,No Javascript :-(" target="_blank">Middle-click to open in new tab</a>
  </li>
  <li>
    <a href="javascript:print()">Print</a>
  </li>
</ol><!-- Hack to work around stack snippet restrictions --><script type=application/javascript>document.links[0].href="data:text/html;charset=utf-8,"+encodeURIComponent('<!doctype html>'+document.documentElement.outerHTML)</script>

Firefox 버전 최대 48 알파 1

URL, 페이지 번호 및 Firefox가 페이지 여백에 추가하는 기타 항목이 인쇄되지 않도록 태그에 mozNoMarginBoxes속성을 추가 할 수 있습니다 <html>.

Firefox 29 이상에서 작동합니다. 차이점의 스크린 샷을 보려면 여기를 참조 하거나 라이브 예를 보려면 여기를 참조하십시오.

mozDisallowSelectionPrint예제 의 속성 은 여백에서 텍스트를 제거 할 필요 는 없습니다 . PDF.js의 mozdisallowselectionprint 속성의 기능은 무엇입니까?를 참조하십시오 . .

다른 브라우저

불행히도 Internet Explorer에서는이 문제를 해결할 방법이없는 것 같습니다. 따라서 PDF를 사용하거나 사용자에게 여백 텍스트를 사용하지 않도록 요청해야합니다.

Safari도 마찬가지입니다. @Luiz Perez 의 의견에 따르면 , 최신 버전의 Safari (8, 9.1 및 10)는 여전히 @page여백 텍스트 억제를 지원하지 않습니다 .

Edge에서 아무것도 찾을 수 없으며 테스트 할 Windows 10 설치가 없습니다.


5
솔직히, 나는 이것에 동의합니다. "시스템 대화 상자"를 사용하여 인쇄하면 Chrome에서도 작동합니다. <!DOCTYPE html> <html moznomarginboxes mozdisallowselectionprint>설정되어 있는지 확인하십시오 . 출처 :https://bug743252.bugzilla.mozilla.org/attachment.cgi?id=714383
Peter

3
Firefox에서 잘 작동합니다. 그래서 @page{ size: auto; margin: 3mm; } 크롬과 사파리를 지원하기 위해 크로스 브라우저 솔루션을 사용했습니다.
Clain Dsilva

이 솔루션은 FF로 인쇄물에서 원치 않는 정보 / 콘텐츠를 제거하는 데 정말 효과적입니다. 감사!
Varvara Jones

이것은 훌륭하지만 IE는 어떻습니까?
Santosh

1
Safari 8, 9.1 및 10에서이 스 니펫을 테스트했지만 해당 버전의 Safari에서 머리글 또는 바닥 글이 제거되지 않습니다.
Luis Perez

21

@Awe가 위에서 말했듯이 이것이 Chrome에서 작동하는 것으로 확인 된 솔루션입니다!

이것이 head 태그 안에 있는지 확인하십시오.

<head>
<style media="print">
    @page 
    {
        size: auto;   /* auto is the initial value */
        margin: 0mm;  /* this affects the margin in the printer settings */
    }

    body 
    {
        background-color:#FFFFFF; 
        border: solid 1px black ;
        margin: 0px;  /* this affects the margin on the content before sending to printer */
   }
</style>
</head>

3
이것은 매우 좋은 해결책입니다! 여백을 제거하고 머리글과 바닥 글을 제거합니다. 내 유일한 변화는 padding: 0.25in 0.5in;바디 스타일에 추가 하여 멋지고 깨끗한 인쇄에 필요한 정확한 여백을 갖도록하는 것입니다. Chrome v25에서 작업하면서이 특정 프로젝트에 대해 고맙게도 최종 사용자에게 몇 가지 최신 브라우저를 선택하도록 요청할 수 있습니다.
Charlie Schliesser

2
불행히도 이로 인해 여러 페이지 출력물에 문제가 발생합니다. 페이지 하단의 텍스트가 잘립니다.
Jonathan

단일 페이지 출력으로 Chrome 67.0.3396.99 및 Firefox 62.0b5에서 완벽하게 작동합니다.
killscreen

16

헤더, 페이지 번호 및 html 바닥 글을 제거하려는 클라이언트의 유사한 요청이 있습니다. 이 경우 클라이언트는 공식 인증서로 두 배의 HTML 페이지를 제공합니다. 추가 된 URL, 페이지 및 헤더는 관련이 없으며 최종 제품보다 덜 만족 스럽습니다. 어떤면에서는 싸구려처럼 보입니다.

Media = Print는 이러한 브라우저 기본값을 비활성화 할 수 없습니다. 유일한 해결 방법은 사용자에게 "기어"버튼을 클릭하고 해당 항목을 켜거나 끄도록 지시하는 것입니다. 진심으로, 나는 20 년 동안 그렇게 할 수 있다는 것을 몰랐습니다 (일반 사용자는 토글 버튼을 클릭 할 단서가 있다고 생각합니까?).

CSS가 Media = Print를 지원하는 경우 전체 최종 사용자 인쇄 환경을 제어하는 ​​기능을 지원해야합니다. 브라우저가 추가 된 필드를 제공한다는 점에 감사하지만 CSS가 원하는 경우 전체 인쇄 환경을 제어 할 수없는 이유는 무엇입니까? 3 개의 필드가 더 있으면 90 %의 솔루션이 100 %가 될 수 있습니다! 간단한:

#BrowserPrintDefaults{display:none} 

충분할 것입니다.

다시 말하지만, 최종 사용자가 인쇄를 원하는지 여부는 중요하지 않습니다 (클라이언트가 매우 사적이거나 인쇄 된 URL이 떠 다니기를 원하지 않거나 경영진이 개인 공동 작업 사이트를 사용하고 있습니까?). 최종 사용자를 변호하게되어 기쁘지만, 누군가가 답을 찾고 있다면 최종 사용자가 보여 주거나 숨길 수있는 권리라고 대답하지 마십시오. 때로는 고객이 청구서를 지불 할 권리가 있습니다.


나는 원하지 않는만큼 결국 포기했다. 모든 브라우저에 이러한 설정이 있으며 프리젠 테이션 요소이기 때문에 CSS에 이것이 노출되어야한다는 데 동의합니다. 그러나 대신 쿠키를 끄는 것과 같은 응용 프로그램 수준의 환경 설정입니다.
Anthony

1
@Page지시문을 사용하여 프린터 여백을 설정 하는 공식 CSS 표준입니다 (html 페이지의 본문 여백과 동일하지 않음). 현재 Safari를 제외한 모든 주요 브라우저에서 지원되지만 머리글 / 바닥 글에 미치는 영향은 다양합니다. 가장 좋은 구현은 Opera와 Chrome입니다.
awe

6

이 코드를 사용해보십시오 .100 % 작동합니다.
FOR Landscape :

<head>
<style type="text/css">

@page{
  size: auto A4 landscape;
  margin: 3mm;
}

</style>
</head>

대한 Portait입니다 :

<head>
<style type="text/css">

@page{
  size: auto;
  margin: 3mm;
}

</style>
</head>

1
CSS 페이지 규칙은 여백을 설정하지만 브라우저 (페이지 URL, 페이지 번호 등)에 의해 배치 된 내장 헤더 및 바닥 글은 제거하지 않습니다.
Anthony

0

"브라우저에서"와 firefox를 언급 했으므로 Internet Explorer를 사용하는 경우 레지스트리에서 값을 임시로 설정하여 페이지 머리글 / 바닥 글을 비활성화 할 수 있습니다 . 예를 보려면 여기 를 참조 하십시오 . AFAIK 다른 브라우저에서이 작업을 수행하는 방법에 대해 들어 보지 못했습니다. Daniel과 Mickel의 답변이 서로 충돌하는 것 같습니다 .Firefox가 레지스트리 / 어딘가에 머리글 / 바닥 글을 제거하거나 사용자 정의하도록 비슷한 설정이있을 수 있습니다. 당신은 그것을 확인 했습니까?

이것이 도움이 되길 바랍니다. 즐거운 휴일 보내세요.


1
IE7 +에서는 인쇄 미리보기에서 간단한 버튼 클릭으로 머리글 / 바닥 글을 비활성화 할 수 있습니다. 레지스트리에서 할 필요가 없습니다!
awe

0

@page margin : 0mm는 이제 Firefox 19.0a2 (2012-12-07)에서 작동합니다.


0

웹 페이지에 CSS를 사용하여 문제를 해결했습니다.

<style media="print">
   @page {
      size: auto;
      margin: 0;
  }
</style>

0

이것은 약 1cm의 여백으로 나를 위해 일했습니다.

@page 
{
    size:  auto;   /* auto is the initial value */
    margin: 0mm;  /* this affects the margin in the printer settings */
}
html
{
    background-color: #FFFFFF; 
    margin: 0mm;  /* this affects the margin on the html before sending to printer */
}
body
{
    padding:30px; /* margin you want for the content */
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.