브라우저 PDF 인쇄 + CSS를 통해 페이지 지정 등에 대한 추가 정보 조정

19689 단어 CSSNext.jsNode.jstech

요약:


Explorer에서 출력 PDF를 인쇄하는 경우CSS를 통해 인쇄 영역 지정하기
이것은 페이지의 위치를 지정하는 예이다.

  • 일반적인 브라우저 사양인 것 같으므로 CSS 조정 이외에는 PDF 레이아웃을 조정할 필요가 없습니다.
    한번 해봤어요.

  • 인쇄 시 웹 화면의 일반 제목, 사이드바, 광고 제목 등을 대상에서 제외한다.
    주요 컨텐트만 인쇄하도록 조정할 수 있습니다.

  • 페이지 나누기는 사용자 정의 탭과 같은 규칙에 의해 결정되며, 클래스 이름을 지정한 후에 화면 표시에div, hr 탭 변환을 표시합니다.
    CSS로 적용하려면

  • 시험은 넥스트다.js/SSG,cloudflare를페이지에서 디버깅을 한 후 인쇄 테스트를 진행하였다.
  • 프로비저닝

  • 크롬:96이상
  • CSS
  • next.js 12
  • node: 16
  • cloudflare.pages
  • 참고 자료

  • 관련 URL
    https://developer.mozilla.org/ja/docs/Web/CSS/page-break-before
    https://developer.mozilla.org/ja/docs/Web/CSS/@media
  • 인쇄 범위 설정

  • 다음 파란색 상자 안의 인쇄 예.(테두리 이외의 내용은 인쇄하지 않음)

  • 인쇄 범위 설정, @media print

  • 인쇄 시에만 사용할 수 있습니다.머리, 버튼 등 숨기기
  • class= hidden_@media print 조건 하에서숨기기(display:none)
    @media print {
        .hidden_print{
            display: none;
        }
    }
    
  • pdf 인쇄를 하면 1등이 표시되지 않습니다.컨텐츠 섹션이 성공적으로 출력되었습니다.

  • 수정 페이지:page-break-before

  • 여기는 자동으로 줄을 바꿀 수 없습니다.
  • 사용자 정의 탭을 수동으로 정의하고 화면 표시 시 페이지-break-before
  • 적용
    .pdf_next_page {
        page-break-before: always;
    }
    
  • 사용자 정의 (예제) 페이지 나누기 위치로 설정
  • :::nextpage
    
  • HR 태그 등으로 변환(next.js)
  • 인쇄할 때만 상기 페이지-break-before를 적용합니다.페이지당 처리
  • <hr class="pdf_next_page" />
    
  • 페이지별 PDF 출력 예제
  • 수동으로 추가한 페이지 나누기 위치에 페이지를 추가할 수 있습니다
  • 상세한 화면 코드 참조:next.js
  • https://gist.github.com/kuc-arc-f/190f7f36e8eb15a9fd88e1ac58184371
    /src/pages/posts/[id].tsx
    [id].tsx
    /* pdf print css add */
    import Head from 'next/head'
    import React from 'react'
    import Link from 'next/link';
    
    import marked from  'marked'
    
    import Layout from '../../components/layout'
    import LibCommon from '../../libs/LibCommon'
    import LibCms from '../../libs/LibCms'
    //
    export default function Page({ blog }) {
    //console.log(blog)
      return (
        <Layout>
        <Head><title key="title">{blog.title}</title></Head>      
        <div className="container bg-light">
          <div className="hidden_print">
            <Link href="/home" >
              <a className="btn btn-light btnx-outline-orange mt-2">Back</a>
            </Link>
            <hr className="mt-2 mb-2" />
            <div className="show_head_wrap">
              <i className="bi bi-house-fill mx-2"></i>&nbsp;{blog.title}
            </div>
          </div>
          <div className="card shadow-sm my-2">
            <div className="card-body">
              <h1>{blog.title}</h1>
              Date: {blog.created_at}<br />
              Category : {blog.category.name }
            </div>
          </div>
          <div className="shadow-sm bg-white p-4 mt-2 mb-4">
            <div id="post_item" dangerouslySetInnerHTML={{__html: `${blog.content}`}}>
            </div>
          </div>                       
        </div>
        <style>{`
          div#post_item img{
            max-width : 100%;
            height : auto;
          }
          .show_head_wrap{ font-size: 1.4rem; }
          .pdf_next_page {
            page-break-before: always;
            background-color: green;
            border: none;        
          }
          @media print {
            .hidden_print{
              display: none;
            }
          }
          `}</style>      
      </Layout>
      )
    }
    //
    export const getStaticPaths = async () => {
      const dt = LibCommon.formatDate( new Date(), "YYYY-MM-DD_hhmmss");
      const url = process.env.MY_JSON_URL+ '?' + dt
      const req = await fetch( url );
      const json = await req.json();  
      const items = json.items     
      const paths = []
      items.map((item, index) => {
        let row = { params: 
          { id: item.save_id } 
        }
        paths.push(row)
      })
    //console.log(paths)
      return {
        paths: paths,
        fallback: false
      } 
    };
    export const getStaticProps = async context => {
      const id = context.params.id
    //console.log(id)
      const dt = LibCommon.formatDate( new Date(), "YYYY-MM-DD_hhmmss");
      const url = process.env.MY_JSON_URL+ '?' + dt
      const req = await fetch( url );
      const json = await req.json();  
      let items = json.items 
      items = LibCommon.convert_items( items )
      let item  = LibCms.get_show_item( items, String(id) )
      item.content = marked(item.content)
      item = LibCms.get_post_itemOne(item , json.category_items)
    //console.log(json.category_items )  
      return {
        props: { 
          blog: item,
        },
      }  
    };
    
    
    ....

    좋은 웹페이지 즐겨찾기