Pdf.js: A impressão está confusa / desfocada

Criado em 20 fev. 2013  ·  38Comentários  ·  Fonte: mozilla/pdf.js

se eu imprimir um pdf com FF19 e ​​a nova função de pdf, a impressão fica borrada.

se eu imprimir com acrobat, a fonte é clara.

left = acrobat
direita = ff pdf

você tem uma ideia?

https://plus.google.com/105533044232180103026/posts/dYL855pBkSM

3-upstream 4-printing

Comentários muito úteis

Desde https://github.com/mozilla/pdf.js/commit/c09f634bb6c713f6dc36628145788c88e60448e0 agora há renderPage função em web/viewer.js e resolução de impressão é codificado lá como 150 PPP.

function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size) {
  var scratchCanvas = activeService.scratchCanvas;
  var PRINT_RESOLUTION = 150;
  var PRINT_UNITS = PRINT_RESOLUTION / 72.0;

Para alterar a resolução de impressão para 300 DPI, basta alterar a linha abaixo.

var PRINT_RESOLUTION = 300;

De acordo com as tags de lançamento, todas as versões do PDF.js de 1.7.x a 1.10.x devem ter essa capacidade agora. Estou surpreso que isso não esteja documentado em lugar nenhum.

Idealmente, deve haver a capacidade de alterar a resolução de impressão dos parâmetros de consulta em vez de modificar web/viewer.js .

Consulte Como aumentar a qualidade de impressão do arquivo PDF com o visualizador PDF.js para obter mais detalhes.

Todos 38 comentários

Acho que é porque a saída do pdf.js é uma tela (uma tela por página, para ser exato), que provavelmente não corresponde a 100% da resolução da impressora.

Isso acontece comigo também.

DSCF8966

  • top = PDF.js integrado ao Firefox
  • inferior = Adobe Acrobat

A qualidade de impressão é simplesmente inaceitável.
Além disso, o PDF.js integrado gera uma borda preta nos lados direito e inferior, como se fosse fotocopiando uma folha de tamanho menor.

Qualquer solução? Estou em uma linha direta e tenho 200 usuários com esse problema.

@BadFriend , @musiphil , qual sistema operacional você ou seus usuários usam?

Mesmo problema aqui no FFox 19 em WinXP para impressora PostScript. As linhas horizontais finas são pontilhadas, enquanto as linhas verticais são finas. Cabeçalhos e rodapés também são adequados.

Estou executando o Firefox 19.0 no Windows 7 e imprimi esses documentos em uma impressora HP Color LaserJet CP4525 com PCL6.

FF19 + Win7 64bit + OKI561 via PCL6 na porta WSD ou Adobe PDF (Adobe Acrobat 9.2.0)

IMG_20130222_074757

esquerda: plug-in do Chrome
meio: Adobe Reader
certo: Firefox pdf.js

Baixe o PDF -> http://www.file-upload.net/download-7241349/offers-36.pdf.html

Veja também # 2771. Citando @brendandahl :

A baixa qualidade está sendo monitorada em https://bugzilla.mozilla.org/show_bug.cgi?id=811002 .

O bug upstream foi corrigido. Isso ainda é um problema com as versões mais recentes do Firefox e PDF.js?

O bug upstream foi corrigido. Isso ainda é um problema com as versões mais recentes do Firefox e PDF.js?

Acho que só foi corrigido para o Windows. Há um novo bug preenchido para OSX (bug 932313), mas não estou convencido de que seja válido (veja meu comentário em https://bugzilla.mozilla.org/show_bug.cgi?id=932313#c2).

Até que o problema não seja corrigido no Linux, eu voto por manter esse bug aberto.

Está consertado?
Esta página de demonstração é impressa ok do firefox
http://mozilla.github.io/pdf.js/web/viewer.html
https://dl.dropboxusercontent.com/u/1383480/work/printing/2015-02-16%2011.29.52.jpg

do Chrome e do Chromium o resultado da impressão está TÃO borrado que não consigo encontrar palavras para descrevê-lo
https://dl.dropboxusercontent.com/u/1383480/work/printing/2015-02-16%2011.29.58.jpg
Tentei definir dpi para impressora e PRINT_SCALE RATIO para 1, 3, 4, 8 - sem efeito
Tentei a versão mais recente do github (8614c17) - o mesmo
(ambiente: Chrome, Chromium, windows 7)

Estou esquecendo de algo?
Você poderia revisar isso e possivelmente sugerir uma solução rápida?

@ jonny64 obrigado por relatar isso! Infelizmente, acho que não há muito que possa ser feito pelo Chrome / Chromium aqui. A melhor qualidade de impressão no Firefox resulta do uso de uma API especial para impressão que está disponível no Firefox, mas não no Chrome. Antigamente eu propunha a API como padrão, mas não havia muito interesse e, portanto, ainda está disponível apenas no Firefox.

:) @jviereck , bem, ok, eu deveria conviver com isso
Experimentei o visualizador interno do Chrome
Ele imprime bem, mas é 'Salvar' no modo quiosque
(precisamos imprimir com visualização do Chrome no modo quiosque de tela cheia)

Felizmente, eu tenho alguns fundamentos com C algum tempo atrás
https://pdfium.googlesource.com/pdfium.git
É a fonte correta para o visualizador interno do Chrome?
É melhor ocultar 'Salvar' nas configurações do Chrome ou quando a linha de comando --kiosk estiver definida?
Você tem alguma ideia de alto nível onde e como posso implementá-lo?

Isso ainda é um bug no OS X e na última edição do Firefox Dev, pelo que eu posso dizer, pelo menos em algumas circunstâncias.

Como reproduzir sem impressora:

  • Clique em "Imprimir" no visualizador de PDF.js.
  • Clique no botão "PDF".
  • Escolha "Salvar como PostScript ..." ( não "Salvar como PDF ...")
  • Abra o arquivo .ps salvo em Preview.app.

O texto não é selecionável e, ao aumentar o zoom, o texto fica bastante pixelizado. O texto fica ótimo se você escolher "Salvar como PDF…"

Tentei aumentar a resolução padrão em
web / app.js :: beforePrint
<< var pageSize = this.pdfViewer.getPageView (0) .pdfPage.getViewport (1);

var pageSize = this.pdfViewer.getPageView (0) .pdfPage.getViewport (2);

e web / pdf_page_view.js :: beforePrint
<< var viewport = pdfPage.getViewport (1);

var viewport = pdfPage.getViewport (2);

A impressão está mais lenta, mas a qualidade melhorou

Algumas melhorias após # 7677

Houve alguma atualização para esse problema nos últimos 4 meses? Isso ainda é perceptível na versão mais recente do pdf.js. Recentemente, lancei uma implantação usando pdf.js e agora tenho documentos sendo impressos com letras difusas que não eram um problema com o leitor de PDF nativo do Chrome.

Você pode reproduzir este problema imprimindo da própria página de demonstração da Mozilla. Sei que não é um problema de driver porque também acontece quando você imprime em PDF.

Parece que algumas pessoas que usam o pdf.js na produção tiveram que ignorar o pdf.js totalmente para contornar esse problema ( exemplo ).

Atualmente, a impressão de qualidade superior não é possível sem aumentar muito o uso de memória, o que a maioria dos navegadores não aceita bem. O back-end do canvas não pode fornecer tal funcionalidade. Há um projeto aberto (https://github.com/mozilla/pdf.js/projects) para pesquisar usando o back-end do protótipo SVG para impressão de alta qualidade.

Descobri que o PDF.js tem qualidade de impressão aceitável e qualidade de impressão difusa, dependendo da versão do Firefox instalada, então gostaria de dar uma olhada no que mudou entre as versões das quais consegui imprimir. Eu tenho https://imgur.com/7Beh7MO , que é resultado de uma impressão direta da esquerda para a direita do Firefox 52, 47.0.2 e 42, com os dois primeiros pelo menos sendo atualizações recentes. Como mostrado, algo mudou no PDF.js entre as versões FF 47.0.2 e FF 52 que parece ter prejudicado a qualidade, então, se alguém tiver informações sobre quais marcadores procurar para começar nessas versões do Firefox, eu não o faria Não me importo de dar uma olhada para começar.

Olhando para as versões do repositório do Firefox de PDF.js, vejo que 47.0.2 era a versão 1.4.121, que corresponde ao commit 51f6aba (pode ser o commit depois, que é be1e12d) e que o Firefox 52 vem com PDF.js 1.6. 315, que é aproximadamente o commit c23f124. Atualmente, estou procurando por diffing esses commits, mas a diferença entre eles é provavelmente 400 commits e qualquer informação sobre onde imprimir mentiras seria muito útil.

Como mostrado, algo mudou no PDF.js entre as versões FF 47.0.2 e FF 52 que parece ter prejudicado a qualidade,

Embora seja certamente possível que uma alteração no PDF.js seja responsável, eu não (pelo menos inicialmente) descartaria totalmente a possibilidade de que o problema possa estar relacionado, por exemplo, a gráficos / código de impressão em outras partes do Firefox.
Pode ser útil, e talvez até mais rápido, usar http://mozilla.github.io/mozregression/ para tentar encontrar um intervalo de regressão.

O botão de impressão dentro do PDF.js usa o Firefox para imprimir? Meu
suposição baseada no fato de que o plugin está disponível em outros navegadores
é que não haveria problemas relacionados a como o navegador subjacente
lida com impressão. Isso também é suportado pela caixa de diálogo de processamento de impressão
listando a renderização de PDF.js como uma tarefa para enviar os dados para a impressora. eu vou
faça alguns testes adicionais e tente executar PDF.js como um plug-in e teste
diferentes versões do possível para ver se isso muda alguma coisa.

Em 14 de março de 2017, às 9h58, "Jonas Jenwald" [email protected] escreveu:

Como mostrado, algo mudou no PDF.js entre as versões FF 47.0.2 e FF 52
que parece ter prejudicado a qualidade,

Embora seja certamente possível que uma mudança no PDF.js seja responsável, eu
não (pelo menos inicialmente) descartaria totalmente a possibilidade de que o
problema pode estar relacionado a, por exemplo, gráficos / código de impressão em outras partes de
Raposa de fogo.
Pode ser útil, e talvez até mais rápido, usar
http://mozilla.github.io/mozregression/ para tentar encontrar uma regressão
faixa.

-
Você está recebendo isto porque comentou.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/mozilla/pdf.js/issues/2750#issuecomment-286428765 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/AOZHcyFJnLjI8MhAXspe-SIikmMA7YWOks5rlpzwgaJpZM4AcblL
.

-
Clique para ler os Avisos:
http://www.mediweightlossclinics.com/sig/ Comunicação confidencial
http://www.mediweightlossclinics.com/sig/ Isenção de responsabilidade para fins educacionais
http://www.mediweightlossclinics.com/sig/ Declaração de divulgação de franquia

Anteriormente, usávamos mozPrintCallback específicos do Mozilla sempre que poderíamos se fosse compatível, ou seja, em versões adicionais e não complementares no navegador Firefox, já que presumivelmente nos permitia imprimir com menos memória consumo e maior qualidade. No entanto, tentamos reduzir o uso disso porque é específico do Firefox e às vezes tem bugs, então agora só o usamos no complemento do Firefox (https://github.com/mozilla/pdf.js/blob/master/ web / firefox_print_service.js).

Em geral, agora renderizamos as telas e as imprimimos usando a lógica de impressão definida pelo navegador regular, então acho que o problema pode estar no dimensionamento da tela / código de renderização de fonte alterado ou em um bug do navegador.

Consulte https://github.com/mozilla/pdf.js/commit/c09f634bb6c713f6dc36628145788c88e60448e0 para a maior parte dessa alteração. Você pode querer verificar se há diferença na qualidade de impressão do Firefox com e sem o complemento.

Desde https://github.com/mozilla/pdf.js/commit/c09f634bb6c713f6dc36628145788c88e60448e0 agora há renderPage função em web/viewer.js e resolução de impressão é codificado lá como 150 PPP.

function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size) {
  var scratchCanvas = activeService.scratchCanvas;
  var PRINT_RESOLUTION = 150;
  var PRINT_UNITS = PRINT_RESOLUTION / 72.0;

Para alterar a resolução de impressão para 300 DPI, basta alterar a linha abaixo.

var PRINT_RESOLUTION = 300;

De acordo com as tags de lançamento, todas as versões do PDF.js de 1.7.x a 1.10.x devem ter essa capacidade agora. Estou surpreso que isso não esteja documentado em lugar nenhum.

Idealmente, deve haver a capacidade de alterar a resolução de impressão dos parâmetros de consulta em vez de modificar web/viewer.js .

Consulte Como aumentar a qualidade de impressão do arquivo PDF com o visualizador PDF.js para obter mais detalhes.

Se a correção de @mpryvkin for legítima, isso definitivamente deve ser exposto como uma opção em about: config.

Isso pode ser parametrizado?

Tentei aumentar a resolução padrão em
web / app.js :: beforePrint
<< var pageSize = this.pdfViewer.getPageView (0) .pdfPage.getViewport (1);

var pageSize = this.pdfViewer.getPageView (0) .pdfPage.getViewport (2);

e web / pdf_page_view.js :: beforePrint
<< var viewport = pdfPage.getViewport (1);

var viewport = pdfPage.getViewport (2);

A impressão está mais lenta, mas a qualidade melhorou

funciona!

O visualizador genérico agora expõe a opção do app printResolution graças a # 10854 para que o visualizador pré-construído não precise mais ser modificado para isso. Observe que aumentar a resolução da impressão, ao mesmo tempo que melhora a qualidade da impressão, pode tornar a impressão mais lenta e / ou o navegador menos responsivo, mas isso agora é uma troca que os próprios usuários visualizadores podem fazer.

@timvandermeij Obrigado pela atualização! Para esclarecer, você está falando de "usuários" como em "usuários da biblioteca pdf.js", ou como em "usuários do Firefox"? Eu caio na última categoria (e acredito que esse bug diz respeito aos usuários do Firefox) e estou tentando descobrir se essas AppOptions estão expostas no Firefox de alguma forma.

Atualização: acredito que @timvandermeij se refere a "usuários da biblioteca pdf.js". Eu também acredito que as AppOptions são expostas no Firefox por meio de about: config , mas não automaticamente (ou seja, alguém provavelmente precisa modificar o código do firefox para habilitá-lo), já que a maioria, mas não todas as AppOptions existem lá. pdfjs.cursorToolOnLoad está em about: config , mas não defaultUrl nem disableHistory , presumivelmente porque não faz sentido no contexto do Firefox.

@raztus Sim, quis dizer usuários da biblioteca. As compilações do Firefox foram deixadas de fora desse escopo (https://github.com/mozilla/pdf.js/pull/10854#discussion_r287325125) porque não é fácil dizer o que acontece com, por exemplo, capacidade de resposta do navegador e uso de memória se você aumentar este valor . Se obtivermos mais feedback sobre isso, não sou contra a possibilidade de disponibilizar a preferência para compilações do Firefox (mozcentral) também.

@timvandermeij Obrigado e @ kleins05 por esta melhoria. Eu atualizei minha postagem sobre este recurso.

Estou correto ao presumir que, com esta atualização, a resolução de impressão pode ser definida usando o código abaixo?

document.addEventListener('webviewerloaded', function() { PDFViewerApplicationOptions.set('printResolution', 300); });

Sim, acho que você está correto. O evento webviewerloaded é de fato o evento certo para ouvir para definir as opções do aplicativo; Vejo:
https://github.com/mozilla/pdf.js/blob/c91f437eaaff79b660805e020f4fa9d4a2a7fe65/web/viewer.js#L208 -L210
Depois desse ponto, PDFViewerApplicationOptions deve estar sempre disponível. Não tentei este trecho específico, mas pela inspeção parece bom e você pode experimentá-lo verificando o código de branch master mais recente, adicionando esse trecho e verificando se a qualidade de impressão melhora.

@raztus Sim, quis dizer usuários da biblioteca. As compilações do Firefox foram deixadas de fora desse escopo ( # 10854 (comentário) ) porque não é fácil dizer o que acontece, por exemplo, com a capacidade de resposta do navegador e o uso de memória se você aumentar esse valor. Se obtivermos mais feedback sobre isso, não sou contra a possibilidade de disponibilizar a preferência para compilações do Firefox (mozcentral) também.

@timvandermeij Eu adoraria ajudar a fornecer alguns desses comentários. Afinal, about: config já é uma área de anulação de garantia;) Como posso contribuir? Eu precisaria construir o Firefox do zero para mudar o printResolution ?

Você pode experimentar isso abrindo o visualizador padrão (https://mozilla.github.io/pdf.js/web/viewer.html que sempre executa o código de branch master mais recente ou um checkout personalizado) , abrindo o console da web e inserindo PDFViewerApplicationOptions.set('printResolution', 300); . Isso definirá a resolução de impressão para 300 DPI em vez dos 150 DPI padrão. Se você clicar no botão de impressão, notará uma diferença na qualidade da impressão, mas também no tempo que leva para renderizar as páginas e no consumo de memória (tentei fazer isso sozinho para garantir que essas etapas funcionem). A questão principal é como a resolução de impressão em DPI se relaciona ao uso de memória / tempo de renderização para vários tipos de arquivos PDF, como tamanho pequeno / médio / grande, mas também documentos somente texto ou com muitas imagens. Se soubermos mais sobre como ele se comporta em vários cenários da vida real, podemos ser capazes de introduzir a configuração para as compilações do Firefox também e / ou atualizar o valor padrão.

Tentei o método acima, mas estou ficando indefinido.
Isso ocorre com o Chrome Canary versão 77.0.3818.0 (versão oficial) canário (64 bits)

Sim, executando isso resultará em undefined porque definir uma opção não tem valor de retorno, mas se você imprimir novamente, terá melhor qualidade de impressão.

Valeu.
Por que isso não está disponível como uma opção configurável pelo usuário, mas apenas como uma opção configurável programaticamente?

Isso é explicado nos comentários acima, em particular https://github.com/mozilla/pdf.js/issues/2750#issuecomment -496697032. Primeiro, queremos experimentá-lo antes de torná-lo mais facilmente acessível. Observe que há apenas um dia PR # 10879 foi mesclado com deve ajudar um pouco com o problema de uso de memória, e agora que isso é pelo menos programaticamente configurável, podemos experimentá-lo mais facilmente e incluir melhorias.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

hp011235 picture hp011235  ·  4Comentários

brandonros picture brandonros  ·  3Comentários

aaronshaf picture aaronshaf  ·  3Comentários

kleins05 picture kleins05  ·  3Comentários

AlexP3 picture AlexP3  ·  3Comentários