Primero, gracias a todos los que publicaron aquí.
Tengo este pequeño script llamado pdfScale que absorbió partes de las respuestas publicadas aquí. Así que decidí publicar mis 2 centavos. Estoy usando un poco de una mezcla de las respuestas de Kurt y Tim. Sin embargo, más parecido a Tim.He jugado con esto durante unos días y aquí es mi conclusión parcial sobre los métodos publicados aquí:
establecer tamaño de papel por Nombre con -sPAPERSIZE
- fácil simplemente pasar el nombre de papel (Ej. a4)
- puede no producir el 100% del tamaño exacto puntos
- invertirlo paisaje <> Retrato
establecer tamaño de papel en el PS-puntos -dDEVICEWIDTHPOINTS
, -dDEVICEHEIGHTPOINTS
- asegura que tenga el tamaño que desee en puntos
- se puede voltear ANCHO <> ALTURA mismo
- You need to know the sizes in Points
- No es tan fácil para guiar a su alrededor, ya que necesitará el nuevo tamaño de página en puntos y también necesitaría los tamaños de página de la fuente si desea detectar paisaje/retrato.
- También puede establecer papeles definidos personalizados (de cualquier tamaño que realmente desee).
- Estaba usando
-dDEVICEWIDTH
, -dDEVICEHEIGHT
en lugar de la versión de puntos más larga, pero ambos parecen hacer lo mismo (ambos obtienen puntos).
Como mi script bash ya es capaz de obtener tamaños de página de origen y me gustó la idea de poder establecer tamaños de página personalizados, decidí centrarme en establecer el tamaño de página en puntos. También había incluido el GS Paper Sizes en mi script (con nombres y tamaños). Entonces, obtener esa información también fue fácil.
El uso de -dFIXEDMEDIA
parece ser una necesidad en ambos casos, como se señaló anteriormente.
Así que esta es la forma en que mi enfoque fue (de una manera con guión) tamaños
- Obtener página Fuente PDF (para la detección FLIP)
- Obtener el tamaño de página del objetivo en puntos (Ej. A4> 595x842)
- Comprobar que tienen la misma orientación o voltear destino si es necesario
- Run GS con puntos o volteado puntos
Cuando estaba tratando de solucionar el problema de auto rotación, I found this other Kurt response. Esto se trata de usar -dAutoRotatePages
. Solo copiando una parte de su respuesta aquí:
-dAutoRotatePages=/None
- conserva la orientación de cada página;
-dAutoRotatePages=/All
- rota todas las páginas (o ninguna) dependiendo de un tipo de "decisión de la mayoría";
-dAutoRotatePages=/PageByPage
- gira automáticamente las páginas de forma individual.
Mi secuencia de comandos tiene como valor predeterminado PageByPage
pero es ajustable. Funcionó bien en mis pruebas. El uso de -dAutoRotatePages
también parece reducir la necesidad de voltear previamente el tamaño de página, aunque no es lo mismo. Mantuve ambas opciones.
Mi pequeña aplicación fue creada originalmente para escalar archivos PDF (sin cambiar el tamaño de la página). Luego agregué ahora la funcionalidad para hacer una, la otra o ambas. Sin embargo, todavía no podía hacerlo todo en una sola llamada GS.
Esto es lo que estoy pidiendo para cambiar el tamaño, cambiando las variables a valores reales. Esto es para tamaño A4 retrato con PageByPage
auto-rotación:
gs \
-q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dSAFER \
-dCompatibilityLevel="1.5" -dPDFSETTINGS="/printer" \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dSubsetFonts=true -dEmbedAllFonts=true \
-dDEVICEWIDTHPOINTS=595 -dDEVICEHEIGHTPOINTS=842 \
-dAutoRotatePages='/PageByPage' \
-dFIXEDMEDIA -dPDFFitPage \
-sOutputFile='../myOutputFile.pdf' \
-f '../input.pdf'
Tenga en cuenta que yo también estoy usando -dFIXEDMEDIA
Y -dPDFFitPage
. Debido a que esto se ajusta a la página, la otra parte de mi script puede ser útil para escalar los contenidos dentro del PDF después del cambio de tamaño (especialmente si la proporción del PDF cambió mucho). Y esa es una de las razones por las que siempre ejecuto la escala después de cambiar el tamaño en mi script (en modo mixto).
Acerca de los problemas de fracciones al usar el Nombre del papel, tuve que pasarme eso antes de redondear las conversiones de mm/pulgadas a puntos. Después de que comencé a redondearlos, parecen ser siempre los necesarios. Parece extraño que GS arrinconase esos valores.
Por lo tanto, mi conclusión es que lo difícil es encontrar una solución que funcione en todos los ámbitos en diferentes documentos con diferentes tamaños y orientaciones. Todavía no estoy seguro de estar usando la solución adecuada. Pero al permitir que el usuario cambie Flip Detection y GS Auto-Rotation, espero tener una solución para al menos la mayoría de los casos.
También he reconstruido la mayor parte del código en el proceso y es bastante fácil de leer ahora. Puede ser útil verificarlo si quiere automatizar dicha tarea usted mismo. También es útil para la escala solo/cambiar el tamaño de archivos PDF así, por supuesto:
https://github.com/tavinus/pdfScale
PS: pdfScale tiene sus orígenes on this StackOverflow thread.
Gracias por la respuesta, ya he usado el argumento -dPDFFITPAGE y esto no funciona. – Matt
Hay formas (feas) para escalar la entrada de PDF, pero por lo general no es necesario. ¿Puedes compartir un archivo de ejemplo para mirar? – KenS
@Matt: Creo que funcionará si agrega el modificador '-dFIXEDMEDIA' ... –