La description
Comportement de police étrange lorsque vous essayez de mettre en évidence du texte dans le calque d'annotation avec la balise de marque.
J'affiche un pdf dans une boîte de dialogue modale react-bootstrap. J'essaie d'obtenir des termes de recherche en surbrillance sur la page à l'aide de l'accessoire customTextRenderer du composant Page. Le texte en surbrillance est rendu dans une police différente et pas tout à fait au bon endroit.
Étapes à suivre pour reproduire
Étapes pour reproduire le comportement:
Le code ressemble à ceci:
<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>
et customTextRenderer
ressemble à ceci:
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])
), []);
}
(tiré principalement de l'un de vos échantillons, je pense)
Comportement prévisible
Le texte en surbrillance doit être affiché au même endroit et dans la même police et au même endroit.
Information additionnelle
J'ai essayé avec svg et canvas mais j'ai le même comportement.
Le même comportement a été rencontré dans # 189, mais je n'ai eu aucune chance avec des solutions de contournement. J'ai également regardé # 212.
Environnement
Salut,
en raison de la façon dont les PDF sont rendus, il n'est pas toujours possible que le calque de texte corresponde exactement au texte en dessous. Je suis désolé pour cela :( Il y a beaucoup d'astuces que Mozilla et moi utilisons pour aligner ce texte. Ce que je peux suggérer, c'est d'implémenter <mark
> de la même manière que Mozilla le fait, donc avec du texte transparent , et un arrière-plan semi-transparent. De cette façon, le texte correctement aligné et correctement rendu "brillera" dans la sélection.
Je vais essayer. Merci pour la suggestion.
C'est ce que j'utilise dans ma propre suite de tests BTW :) N'hésitez pas à copier et coller!
Cela a parfaitement fonctionné. Merci beaucoup pour la suggestion, pour une raison quelconque, je n'avais pas suffisamment réfléchi au CSS. Et merci pour votre travail sur la bibliothèque! Cela a été un plaisir de l'utiliser.
Commentaire le plus utile
C'est ce que j'utilise dans ma propre suite de tests BTW :) N'hésitez pas à copier et coller!
https://github.com/wojtekmaj/react-pdf/blob/5f9a1928a4ce49f97bca2b5d5e68df63c99725c8/test/Test.less#L126 -L132