2011-01-18 9 views
10

Estoy generando un PDF (usando fpdf) y me pregunto si hay una forma de establecer las propiedades del documento para que se imprima sin escalar.Establecer PDF para imprimir sin escalar

Por lo tanto, cuando selecciona imprimir desde el menú de diálogo de impresión, la escala está configurada en ninguna. Estoy tratando de determinar si esta es una configuración de usuario o algo que puedo controlar en la creación del PDF.

Gracias de antemano.

Respuesta

2

La escalabilidad está controlada por la aplicación PDF, no está establecida en el archivo.

+0

Gracias por la respuesta. ¿Es esto algo que podría lograrse escribiendo un complemento y haciendo que el usuario instale el complemento? – JCam

+0

Podrías enviar tu propio visualizador o plugin pero sería mucho trabajo y deberías garantizar que el usuario tuvo que usarlo –

+7

Esta respuesta es engañosa. Hay una forma de insertar una preferencia en el archivo para no solicitar escalado. La mayoría de las aplicaciones PDF respetarán la preferencia y no escalarán el documento como resultado. – lukecyca

0

así que no estoy seguro si se refiere a somethink así: http://www.fpdf.org/en/doc/setdisplaymode.htm

o ninguna "ampliación" de las imágenes?

$im2 = pdf_open_image_file($dokument, 'jpeg', 'example.jpg'); 
pdf_place_image($dokument, $im2, 395, 655, 1.0); /* 1.0 = qualiti/scaling - 1.0 is original .../* 
pdf_close_image($dokument, $im2); 
+0

Esto es útil, pero estoy buscando algo diferente. Actualicé la publicación para ser un poco más claro. Gracias por la sugerencia. – JCam

0

Me encontré con el mismo problema.

Tengo varios PDF donde el contenido del PDF, es decir, texto e imágenes, se acerca al borde de los PDF, pero el cuadro de diálogo Vista previa/Acrobat sugiere imprimirlo al 100% de escala, cortando así los contenidos que no están 'imprimible debido a los márgenes naturales de las impresoras.

La creación de cualquier PDF en las páginas, por ejemplo, da como resultado un PDF que se imprime en escala del 100% por defecto.

Sin embargo, si creo un PDF utilizando TCPDF que está relacionado con FPDF, el cuadro de diálogo de la impresora sugiere que se escale para ajustarlo a la página.

Mi sospecha es que la forma en que se crea el PDF es diferente. Sospecho que Pages y otras herramientas crean capas separadas y luego se manejan de manera diferente, posiblemente mediante una bandera o algo así.

Comparé las partes legibles de mis dos archivos PDF y encontré algunas diferencias, especialmente sobre cómo comienzan los documentos. Mi conocimiento de los PDF-Sources es, sin embargo, muy limitado, así que solo puedo adivinar qué debe cambiar. ¿Hay una referencia en PDF donde se indica cómo controlar los objetos/áreas imprimibles?

Aquí el contenido de un mínimo de PDF que se imprimirá sin escala:

%PDF-1.4 
1 0 obj 
<< /Type /Catalog 
/Outlines 2 0 R 
/Pages 3 0 R 
>> 
endobj 
2 0 obj 
<< /Type /Outlines 
/Count 0 
>> 
endobj 
3 0 obj 
<< /Type /Pages 
/Kids [4 0 R] 
/Count 1 
>> 
endobj 
4 0 obj 
<< /Type /Page 
/Parent 3 0 R 
/MediaBox [0 0 595 842] 
/Contents 5 0 R 
/Resources << /ProcSet 6 0 R 
/Font << /F1 7 0 R >> 
>> 
>> 
endobj 
5 0 obj 
<< /Length 73 >> 
stream 
BT 
/F1 24 Tf 
100 100 Td 
(Hello World) Tj 
ET 
endstream 
endobj 
6 0 obj 
[ /PDF /Text ] 
endobj 
7 0 obj 
<< /Type /Font 
/Subtype /Type1 
/Name /F1 
/BaseFont /Helvetica 
/Encoding /MacRomanEncoding 
>> 
endobj 
xref 
0 8 
0000000000 65535 f 
0000000009 00000 n 
0000000074 00000 n 
0000000120 00000 n 
0000000179 00000 n 
0000000364 00000 n 
0000000466 00000 n 
0000000496 00000 n 
trailer 
<< /Size 8 
/Root 1 0 R 
>> 
startxref 
625 
%%EOF 
0

Ok, creo que lo tengo. Pruebe esto: abra su PDF creado por TCPDF y elimine todos los errores de las preferencias de los visualizadores y cualquier declaración de cuadro que no sea el MediaBox ... al hacerlo finalmente se obtuvo un PDF sin formato de impresión :) como esas informaciones adicionales -destinado a la impresión profesional- solo confunde el visor de pdf común en lugar de ayudar con nada :)

Goto tcpdf.php y el cambio en el método de línea 8529 de la siguiente manera _putpages

cambio

$boxes = array('MediaBox', 'CropBox', 'BleedBox', 'TrimBox', 'ArtBox'); 

en

$boxes = array('MediaBox'); 

En mi PDF-producción de este elimina instantáneamente el problema de escala :)

6

Print-escalamiento puede desactivarse para archivos PDF individuales utilizando Adobe Acrobat, yendo a Archivo -> Preferencias -> Avanzado -> Escalado de página. (. Usted puede probar esto usando la versión de prueba de Acrobat)

En cuanto a la consecución de este en el código, he tratado infructuosamente de hacer que funcione, pero la diferencia fundamental en los archivos parece ser:

10 0 obj 
<</Metadata 2 0 R/Outlines 6 0 R/Pages 7 0 R/Type/Catalog/ViewerPreferences<</PrintScaling/None>>>> 
endobj 

de archivos PDF sin escalas, en comparación con

10 0 obj 
<</Metadata 2 0 R/Outlines 6 0 R/Pages 7 0 R/Type/Catalog>> 
endobj 

para aquellos que utilizan el valor por defecto de contracción para el montaje opción.

+0

Hola, esto es un poco exagerado, pero cómo usar esto con Exiftool - http://www.sno.phy.queensu.ca/~phil/exiftool/ – BelgoCanadian

8

lo he hecho y agregó que el método _putcatalog() lo siguiente:

$this->_out('/ViewerPreferences [/PrintScaling/None]'); 

Después de la línea:

$this->_out('/Type /Catalog'); 

La implementación de un método es sólo rápido y fácil ...

+1

Una variación de esto funcionó para mí. Subclassed FPDF y anulé _putcatalog() para producir "/ ViewerPreferences <>" después de su salida existente. – lukecyca

+0

Cuando utilicé ReportView '' setViewerPreferences ('PrintScaling', 'None') '' generó la línea ''/ViewerPreferences 12 0 R'' y agregó '' 12 0 obj <> '' más abajo en la página. El otro valor posible parece ser ''/PrintScaling/AppDefault''. –

2

Para mí cambiar el método de catálogo FPDF _putcatalog() y agregar

$this->_out('/ViewerPreferences [/PrintScaling/None]'); 

no estaba logrando el objetivo, así que miré el código producido por un PDF de Acrobate XI y encontré más verbage. Añadiendo el siguiente código

$this->_out('/ViewerPreferences<</Duplex/Simplex/Enforce[/PrintScaling]/PrintScaling/None>>'); 

creado un PDF que ya no por defecto en la ampliación y en su lugar sólo dio la opción de imprimir tamaño real, que era lo que se deseaba.

+0

¿En qué parte de la función pusiste esto? ¿Al final o como lo sugiere la respuesta de onosenday, después de la salida "/ Tipo/Catálogo"? –

Cuestiones relacionadas