web-dev-qa-db-pt.com

Mostrar um PDF arquivos no navegador do usuário via PHP / Perl

Quero mostrar meus usuários PDF arquivos. A razão pela qual eu uso o cgi para mostrar o pdf é que eu quero rastrear os cliques para o pdf, e encobrir a localização real do pdf salvo.

Eu tenho procurado na internet e só encontrei como mostrar salvar o diálogo para os usuários e criar um pdf, não mostrar os arquivos para os usuários.

O que eu queria é mostrar os usuários meus arquivos pdf, não criar ou baixar o pdf. Aqui está o que eu tenho da documentação oficial do php:

<?php
header('Content-type: application/pdf');
readfile('the.pdf');
?>

Também meu código Perl do google-search-result:

open(PDF, "the.pdf") or die "could not open PDF [$!]";
binmode PDF;
my $output = do { local $/; <PDF> };
close (PDF);

print "Content-Type: application/pdf\n";
print "Content-Length: " .length($output) . "\n\n";
print $output

se você fizer isso em Ruby, por favor, diga para mim. Mas não tenho certeza se meu servidor suporta o Rails.

Desculpe se meu código está muito longe do método para mostrar o pdf, já que eu não sei nada sobre o processamento de pdf e como implementar este problema.

Vamos supor que os usuários tenham o plug-in do Adobe Reader. Então, como consertar meu problema?

edit: Eu quero mostrar o arquivo PDF simples. Meu objetivo principal: acompanhar meus arquivos pdf e usar alguns URLs sofisticados.

edit: Aqui está o meu código php principal:

<?php
$file='/files/the.pdf';
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="the.pdf"');
@readfile($file);
?>

edit: Agora o código está funcionando. Mas a barra de progresso de carregamento (no plug-in do Adobe Reader X) não aparece. Por quê? Alguém pode me ajudar? Aqui está meu código principal:

<?php
$file='./files/the.pdf';
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="the.pdf"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
@readfile($file);
?>

edit: Todos os meus problemas foram resolvidos. Aqui está o código final:

<?php
$file = './path/to/the.pdf';
$filename = 'Custom file name for the.pdf'; /* Note: Always use .pdf at the end. */

header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Accept-Ranges: bytes');

@readfile($file);
?>

Obrigado! :)

116
dimassony

Eu suponho que você deseja que o PDF seja exibido no navegador, em vez de forçar um download. Se esse for o caso, tente definir o cabeçalho Content-Disposition com um valor inline.

Lembre-se também que isso também será afetado pelas configurações do navegador - alguns navegadores podem ser configurados para sempre baixar PDF arquivos ou abri-los em um aplicativo diferente (por exemplo, Adobe Reader)

48
Stephen
    $url ="https://yourFile.pdf";
    $content = file_get_contents($url);

    header('Content-Type: application/pdf');
    header('Content-Length: ' . strlen($content));
    header('Content-Disposition: inline; filename="YourFileName.pdf"');
    header('Cache-Control: private, max-age=0, must-revalidate');
    header('Pragma: public');
    ini_set('zlib.output_compression','0');

    die($content);

Testado e funciona bem. Se você quiser que o arquivo seja baixado, substitua

    Content-Disposition: inline

com

    Content-Disposition: attachment
14
Kareem

Você pode modificar um PDF renderer como xpdf ou evidince para renderizar em uma imagem gráfica em seu servidor, e então entregar a imagem para o usuário. É assim que os arquivos quick view de PDFdo Google funcionam, eles são processados ​​localmente e depois entregam imagens para o usuário. Nenhum arquivo baixado PDF, e a fonte é muito bem obscura. :)

4
sarnold

A maneira mais segura de ter uma exibição PDF em vez de download parece ser a incorporação usando um elemento object ou iframe. Há também soluções de terceiros, como o visualizador do GooglePDF.

Veja Melhor maneira de incorporar PDF em HTML para uma visão geral.

Há também DoPDF , um Java baseado no navegador PDF visualizador. Eu não posso falar com a sua qualidade, mas parece interessante.

1
Pekka 웃

Você também pode usar a classe fpdf disponível em: http://www.fpdf.org . Ele fornece opções para a saída para um arquivo e exibição no navegador.

0
tapananand