Descrição
Comportamento estranho da fonte ao tentar destacar o texto na camada de anotação com a marca de marcação.
Estou exibindo um pdf em uma caixa de diálogo modal react-bootstrap. Estou tentando destacar termos de pesquisa na página usando o prop customTextRenderer do componente Página. O texto destacado é renderizado em uma fonte diferente e não exatamente no local certo.
Passos para reproduzir
Passos para reproduzir o comportamento:
O código é parecido com este:
<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>
e customTextRenderer
tem esta aparência:
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])
), []);
}
(tirado principalmente de uma de suas amostras, eu acho)
Comportamento esperado
O texto destacado deve estar no mesmo local, com a mesma fonte e no mesmo local.
Informação adicional
Eu tentei com svg e canvas, mas vi o mesmo comportamento.
O mesmo comportamento foi encontrado no # 189, mas não tive sorte com nenhuma solução alternativa. Eu também olhei para # 212.
Meio Ambiente
Oi,
devido à forma como os PDFs são renderizados, nem sempre é possível que a camada de texto corresponda exatamente ao texto abaixo. Sinto muito sobre isso :( Há muitos truques que a Mozilla e eu estamos usando para alinhar este texto. O que posso sugerir é implementar <mark
> de maneira semelhante à que a Mozilla faz, então com texto transparente e um fundo semitransparente. Dessa forma, o texto devidamente alinhado e renderizado "brilhará" na seleção.
Vou tentar. Obrigado pela sugestão.
Isso é o que eu uso em meu próprio conjunto de testes, a propósito :) Fique à vontade para copiar e colar!
Funcionou perfeitamente. Muito obrigado pela sugestão, por algum motivo não pensei o suficiente sobre o CSS. E obrigado pelo seu trabalho na biblioteca! Foi um prazer usá-lo.
Comentários muito úteis
Isso é o que eu uso em meu próprio conjunto de testes, a propósito :) Fique à vontade para copiar e colar!
https://github.com/wojtekmaj/react-pdf/blob/5f9a1928a4ce49f97bca2b5d5e68df63c99725c8/test/Test.less#L126 -L132