React-pdf: 마크 νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ 주석 λ ˆμ΄μ–΄μ—μ„œ ν…μŠ€νŠΈλ₯Ό κ°•μ‘° ν‘œμ‹œν•˜λ €κ³  ν•  λ•Œ μ΄μƒν•œ κΈ€κΌ΄ λ™μž‘.

에 λ§Œλ“  2019λ…„ 06μ›” 21일  Β·  4μ½”λ©˜νŠΈ  Β·  좜처: wojtekmaj/react-pdf

기술

마크 νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ 주석 λ ˆμ΄μ–΄μ—μ„œ ν…μŠ€νŠΈλ₯Ό κ°•μ‘° ν‘œμ‹œν•˜λ €κ³  ν•  λ•Œ μ΄μƒν•œ κΈ€κΌ΄ λ™μž‘.

react-bootstrap λͺ¨λ‹¬ λŒ€ν™” μƒμžμ— pdfλ₯Ό ν‘œμ‹œν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. νŽ˜μ΄μ§€ ꡬ성 μš”μ†Œμ˜ customTextRenderer μ†Œν’ˆμ„ μ‚¬μš©ν•˜μ—¬ νŽ˜μ΄μ§€μ—μ„œ 검색어λ₯Ό κ°•μ‘° ν‘œμ‹œν•˜λ €κ³ ν•©λ‹ˆλ‹€. κ°•μ‘° ν‘œμ‹œλœ ν…μŠ€νŠΈλŠ” μ˜¬λ°”λ₯Έ μœ„μΉ˜κ°€ μ•„λ‹Œ λ‹€λ₯Έ κΈ€κΌ΄λ‘œ λ Œλ”λ§λ©λ‹ˆλ‹€.

μž¬ν˜„ 단계

λ™μž‘μ„ μž¬ν˜„ν•˜λŠ” 단계 :
μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

<Modal show={this.state.showPDF}

    onHide={this.handleClose} dialogClassName="modal-100w">
    <Modal.Header closeButton>
    </Modal.Header>
    <Modal.Body style={{margin: "auto"}}>
    <Document file={this.state.pdfURL} onLoadSuccess={(page) => this.onDocumentLoadSuccess(page)}>
        <Page  renderMode="svg" scale={1.0} pageNumber={1} customTextRenderer={(textItem) => this.customTextRenderer(textItem)} onLoadSuccess={(page) => this.onPageLoadSuccess(page)} />
        </Document>
    </Modal.Body>
</Modal>

customTextRenderer λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

return textItem.str
              .split(this.terms[0])
              .reduce((strArray, currentValue, currentIndex) => (
                currentIndex === 0
                  ? ([...strArray, currentValue])
                  : ([...strArray, (
                    // eslint-disable-next-line react/no-array-index-key
                    <mark key={currentIndex}>
                      {this.terms[0]}
                    </mark>
                  ), currentValue])
    ), []);

    }

(주둜 μƒ˜ν”Œ 쀑 ν•˜λ‚˜μ—μ„œ κ°€μ Έμ˜¨ 것 κ°™μŠ΅λ‹ˆλ‹€.)

μ˜ˆμƒλ˜λŠ” 행동

κ°•μ‘° ν‘œμ‹œλœ ν…μŠ€νŠΈ μ‡ΌλŠ” λ™μΌν•œ μœ„μΉ˜, λ™μΌν•œ κΈ€κΌ΄ 및 λ™μΌν•œ μœ„μΉ˜μ— μžˆμ–΄μ•Όν•©λ‹ˆλ‹€.

μΆ”κ°€ 정보
λ‚˜λŠ” svg와 canvas둜 μ‹œλ„ν–ˆμ§€λ§Œ λ™μΌν•œ λ™μž‘μ„ λ΄…λ‹ˆλ‹€.

# 189μ—μ„œλ„ λ™μΌν•œ λ™μž‘μ΄ λ°œμƒν–ˆμ§€λ§Œ ν•΄κ²° λ°©λ²•μœΌλ‘œλŠ” 운이 μ—†μ—ˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” λ˜ν•œ # 212λ₯Ό λ³΄μ•˜λ‹€.

Screen Shot 2019-06-21 at 11 33 00 AM

ν™˜κ²½

  • λΈŒλΌμš°μ € (ν•΄λ‹Ήλ˜λŠ” 경우) [예 : Chrome 57, Firefox 59] : Firefoxμ—μ„œ 두 가지 μ΅œμ‹  Chrome을 ν…ŒμŠ€νŠΈν–ˆμŠ΅λ‹ˆλ‹€. λ™μž‘μ€ λ‘˜ λ‹€μ—μ„œ 결함이 μžˆμŠ΅λ‹ˆλ‹€.
  • React-PDF 버전 [예 : 3.0.4] :
  • React 버전 [예 : 16.3.0] :
  • Webpack 버전 (ν•΄λ‹Ήν•˜λŠ” 경우) [예 : 4.16.2] :
question

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

그것이 λ‚΄κ°€ λ‚΄ μžμ‹ μ˜ ν…ŒμŠ€νŠΈ μŠ€μœ„νŠΈ BTWμ—μ„œ μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. :) 자유둭게 λ³΅μ‚¬ν•˜μ—¬ λΆ™μ—¬ λ„£μœΌμ‹­μ‹œμ˜€!

https://github.com/wojtekmaj/react-pdf/blob/5f9a1928a4ce49f97bca2b5d5e68df63c99725c8/test/Test.less#L126 -L132

λͺ¨λ“  4 λŒ“κΈ€

μ•ˆλ…•ν•˜μ„Έμš”,
PDFκ°€ λ Œλ”λ§λ˜λŠ” λ°©μ‹μœΌλ‘œ 인해 ν…μŠ€νŠΈ λ ˆμ΄μ–΄κ°€ μ•„λž˜μ˜ ν…μŠ€νŠΈμ™€ μ •ν™•νžˆ μΌμΉ˜ν•˜λŠ” 것이 항상 κ°€λŠ₯ν•œ 것은 μ•„λ‹™λ‹ˆλ‹€. μ£„μ†‘ν•©λ‹ˆλ‹€ :( Mozillaμ—λŠ” λ§Žμ€ 트릭이 있으며이 ν…μŠ€νŠΈλ₯Ό μ •λ ¬ν•˜λŠ” 데 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ œμ•ˆ ν•  μˆ˜μžˆλŠ” 것은 Mozillaκ°€ μˆ˜ν–‰ν•˜λŠ” 방식과 μœ μ‚¬ν•˜κ²Œ <mark > κ΅¬ν˜„ν•˜λŠ” κ²ƒμ΄λ―€λ‘œ 투λͺ…ν•œ ν…μŠ€νŠΈλ‘œ , 반투λͺ… λ°°κ²½. μ΄λ ‡κ²Œν•˜λ©΄ μ μ ˆν•˜κ²Œ μ •λ ¬λ˜κ³  μ μ ˆν•˜κ²Œ λ Œλ”λ§ 된 ν…μŠ€νŠΈκ°€ 선택 μ˜μ—­μ„ "λΉ›λ‚˜κ²Œ"λ©λ‹ˆλ‹€.

λ‚΄κ°€ ν•œ λ²ˆν•΄λ³Ό 게. μ œμ•ˆ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

그것이 λ‚΄κ°€ λ‚΄ μžμ‹ μ˜ ν…ŒμŠ€νŠΈ μŠ€μœ„νŠΈ BTWμ—μ„œ μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. :) 자유둭게 λ³΅μ‚¬ν•˜μ—¬ λΆ™μ—¬ λ„£μœΌμ‹­μ‹œμ˜€!

https://github.com/wojtekmaj/react-pdf/blob/5f9a1928a4ce49f97bca2b5d5e68df63c99725c8/test/Test.less#L126 -L132

이것은 μ™„λ²½ν•˜κ²Œ μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€. μ œμ•ˆ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. μ–΄λ–€ 이유둜 CSS에 λŒ€ν•΄ μΆ©λΆ„νžˆ μƒκ°ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 그리고 λ„μ„œκ΄€ μž‘μ—…μ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€! 그것을 μ‚¬μš©ν•˜λŠ” 것이 μ¦κ±°μ› μŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰