缩放pdf以添加打印全尺寸页面的边框

Håk*_*and 5 linux pdf ghostscript

打印没有边框(或边距)的pdf时,打印机会在纸张边缘切掉1mm左右的图像数据.因此,我正在寻找一种解决方案,在页面上稍微缩放/调整pdf页面的大小,以在边缘处添加白色边框,该边框将与打印机生成的边缘处的空白区域相对应.

我到目前为止尝试使用gs..例如,假设我有一个A4尺寸的pdf 1.pdf,然后我使用:

gs -sDEVICE=pdfwrite \
    -q -dBATCH -dNOPAUSE \
     -dPDFFitPage \
     -r300x300 \
     -g2232x3157 \
    -sOutputFile=1A.pdf \
     1.pdf 
Run Code Online (Sandbox Code Playgroud)

在这里,-g2480x3508我给出了完整的a4论文,并且我试图将其乘以0.9来进行缩放,但是我没有看到任何影响.

Mic*_*ole 5

这是建立在上一个脚本基础上的 bash 脚本的要点。修复了颜色兼容性问题(可能特定于我的 pdf),并进行了一些依赖性检查:

\n\n
#!/bin/bash\n\n# pdfScale.sh\n#\n# Scale PDF to specified percentage of original size.\n# Ref: http://ma.juii.net/blog/scale-page-content-of-pdf-files.\n\necho "This script doesn\'t handle files with spaces in them."\n\nSCALE=0.95 # scaling factor (0.95 = 95%, e.g.)\n\n# Validate args.\n[ $# -eq 1 ] || { echo "***ERROR: Usage pdfScale.sh <inFile>.pdf"; exit 99; }\nINFILEPDF="$1"\n[[ "$INFILEPDF" =~ ^..*\\.pdf$ ]] || { echo "***ERROR: Usage pdfScale.sh <inFile>.pdf"; exit 99; }\nOUTFILEPDF=$(echo "$INFILEPDF" | sed -e s/\\.pdf$// -).SCALED.pdf\n\n# Dependencies\ncommand -v identify >/dev/null 2>&1 || { echo >&2 "Please install \'imagemagick\' (sudo apt-get install imagemagick).  Aborting."; exit 1; }\ncommand -v gs >/dev/null 2>&1 || { echo >&2 "Please install \'ghostscript\' (sudo apt-get install ghostscript ?).  Aborting."; exit 1; }\ncommand -v bc >/dev/null 2>&1 || { echo >&2 "Please install \'bc\' arbitrary precision calculator language.  Aborting."; exit 1; }\n\n# Get width/height in postscript points (1/72-inch), via ImageMagick identify command.\n# (Alternatively, could use Poppler pdfinfo command; or grep/sed the PDF by hand.)\nIDENTIFY=($(identify $INFILEPDF 2>/dev/null)) # bash array\n[ $? -ne 0 ] &GEOMETRY=($(echo ${IDENTIFY[2]} | tr "x" " ")) # bash array \xe2\x80\x94 $IDENTIFY[2] is of the form PGWIDTHxPGHEIGHT\nPGWIDTH=${GEOMETRY[0]}; PGHEIGHT=${GEOMETRY[1]}\n\n# Compute translation factors (to center page.\nXTRANS=$(echo "scale=6; 0.5*(1.0-$SCALE)/$SCALE*$PGWIDTH" | bc)\nYTRANS=$(echo "scale=6; 0.5*(1.0-$SCALE)/$SCALE*$PGHEIGHT" | bc)\n\necho $PGWIDTH , $PGHEIGHT , $OUTFILEPDF , $SCALE , $XTRANS , $YTRANS , $INFILEPDF , $OUTFILEPDF\n\n# Do it.\ngs \\\n-q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dSAFER \\\n-dCompatibilityLevel="1.5" -dPDFSETTINGS="/printer" \\\n-dColorConversionStrategy=/LeaveColorUnchanged \\\n-dSubsetFonts=true -dEmbedAllFonts=true \\\n-dDEVICEWIDTH=$PGWIDTH -dDEVICEHEIGHT=$PGHEIGHT \\\n-sOutputFile="$OUTFILEPDF" \\\n-c "<</BeginPage{$SCALE $SCALE scale $XTRANS $YTRANS translate}>> setpagedevice" \\\n-f "$INFILEPDF"\n
Run Code Online (Sandbox Code Playgroud)\n\n

https://gist.github.com/MichaelJCole/86e4968dbfc13256228a

\n\n

有关此方法的更多信息以及对此要点的讨论可在此博客文章中找到:

\n\n\n\n

请参阅tavinus/pdfScale,它是一个添加了一些其他功能的分支。

\n

  • @MichaelCole 的代码最近在 [tavinus/pdfScale](https://github.com/tavinus/pdfScale) Github 存储库中进行了分叉和扩展。 (2认同)
  • 嗨,大家好!我再次重构了 [pdfScale](https://github.com/tavinus/pdfScale) 并添加了很多额外的东西。不过,GS 对扩展的要求基本上仍然相同(这就是为什么我可能永远不会在这里真正发布答案)。V2 现在具有调整纸张大小、pdf 信息打印、纸张表格打印以及许多与页面调整大小相关的其他选项(翻转、自动旋转等)。[tavinus/pdfScale](https://github.com/tavinus/pdfScale) (2认同)

Kev*_*own 1

由于您没有指定您感兴趣的特定工具,因此我将使用 iText 来完成这样的任务。您可以使用 Java 或 .NET (iTextSharp) 编写简单的代码来轻松完成此任务。以此作为灵感(n-up 工具)。虽然它实际上是将文档的多个页面放入单个页面中,但您可以采用此代码以相同的方式稍微缩放各个页面。