説明
マークタグを使用して注釈レイヤーのテキストを強調表示しようとしたときの奇妙なフォントの動作。
react-bootstrapモーダルダイアログにPDFを表示しています。 Pageコンポーネントの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])
), []);
}
(主にあなたのサンプルの1つから取られたと思います)
予想される行動
ハイライトされたテキストショーは、同じ場所、同じフォント、同じ場所にある必要があります。
追加情報
svgとcanvasの両方で試しましたが、同じ動作が見られます。
#189でも同じ動作が発生しましたが、回避策がありませんでした。 #212も見てきました。
環境
こんにちは、
PDFのレンダリング方法が原因で、テキストレイヤーが下のテキストと正確に一致するとは限りません。 申し訳ありませんが:(Mozillaと私がこのテキストを揃えるために使用しているトリックはたくさんあります。私が提案できるのは、Mozillaと同じように<mark
>を実装することです。 、および半透明の背景。このようにして、適切に配置され、適切にレンダリングされたテキストは、選択範囲を「照らします」。
私はそれを試してみます。 提案をありがとう。
それは私が自分のテストスイートで使用しているものです:)コピーして貼り付けてください!
これは完璧に機能しました。 何らかの理由でCSSについて十分に考えていなかったため、提案をありがとうございました。 そして、ライブラリでの作業に感謝します! それを使用することは喜びでした。
最も参考になるコメント
それは私が自分のテストスイートで使用しているものです:)コピーして貼り付けてください!
https://github.com/wojtekmaj/react-pdf/blob/5f9a1928a4ce49f97bca2b5d5e68df63c99725c8/test/Test.less#L126 -L132