加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 01:15:22 所属栏目:Linux 来源:网络整理
导读:打印没有边框(或边距)的pdf时,打印机会在纸张边缘切掉1mm左右的图像数据.因此,我正在寻找解决方案 在页面上稍微缩放/调整pdf页面的大小,以在边缘处添加白色边框,该边框将与打印机生成的边缘处的空白区域相对应. 我到目前为止尝试过使用gs.例如,假设我有一个A
打印没有边框(或边距)的pdf时,打印机会在纸张边缘切掉1mm左右的图像数据.因此,我正在寻找解决方案
在页面上稍微缩放/调整pdf页面的大小,以在边缘处添加白色边框,该边框将与打印机生成的边缘处的空白区域相对应.

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

gs -sDEVICE=pdfwrite 
    -q -dBATCH -dNOPAUSE 
     -dPDFFitPage 
     -r300x300 
     -g2232x3157 
    -sOutputFile=1A.pdf 
     1.pdf

这里有一个完整的a4论文由-g2480x3508给出,我试图乘以0.9来缩放,但我没有看到这个有什么影响..

解决方法

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

#!/bin/bash

# pdfScale.sh
#
# Scale PDF to specified percentage of original size.
# Ref: http://ma.juii.net/blog/scale-page-content-of-pdf-files.

echo "This script doesn't handle files with spaces in them."

SCALE=0.95 # scaling factor (0.95 = 95%,e.g.)

# Validate args.
[ $# -eq 1 ] || { echo "***ERROR: Usage pdfScale.sh <inFile>.pdf"; exit 99; }
INFILEPDF="$1"
[[ "$INFILEPDF" =~ ^..*.pdf$]] || { echo "***ERROR: Usage pdfScale.sh <inFile>.pdf"; exit 99; }
OUTFILEPDF=$(echo "$INFILEPDF" | sed -e s/.pdf$// -).SCALED.pdf

# Dependencies
command -v identify >/dev/null 2>&1 || { echo >&2 "Please install 'imagemagick' (sudo apt-get install imagemagick).  Aborting."; exit 1; }
command -v gs >/dev/null 2>&1 || { echo >&2 "Please install 'ghostscript' (sudo apt-get install ghostscript ?).  Aborting."; exit 1; }
command -v bc >/dev/null 2>&1 || { echo >&2 "Please install 'bc' arbitrary precision calculator language.  Aborting."; exit 1; }

# Get width/height in postscript points (1/72-inch),via ImageMagick identify command.
# (Alternatively,could use Poppler pdfinfo command; or grep/sed the PDF by hand.)
IDENTIFY=($(identify $INFILEPDF 2>/dev/null)) # bash array
[ $? -ne 0 ] &GEOMETRY=($(echo ${IDENTIFY[2]} | tr "x" " ")) # bash array — $IDENTIFY[2] is of the form PGWIDTHxPGHEIGHT
PGWIDTH=${GEOMETRY[0]}; PGHEIGHT=${GEOMETRY[1]}

# Compute translation factors (to center page.
XTRANS=$(echo "scale=6; 0.5*(1.0-$SCALE)/$SCALE*$PGWIDTH" | bc)
YTRANS=$(echo "scale=6; 0.5*(1.0-$SCALE)/$SCALE*$PGHEIGHT" | bc)

echo $PGWIDTH,$PGHEIGHT,$OUTFILEPDF,$SCALE,$XTRANS,$YTRANS,$INFILEPDF,$OUTFILEPDF

# Do it.
gs 
-q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dSAFER 
-dCompatibilityLevel="1.5" -dPDFSETTINGS="/printer" 
-dColorConversionStrategy=/LeaveColorUnchanged 
-dSubsetFonts=true -dEmbedAllFonts=true 
-dDEVICEWIDTH=$PGWIDTH -dDEVICEHEIGHT=$PGHEIGHT 
-sOutputFile="$OUTFILEPDF" 
-c "<</BeginPage{$SCALE $SCALE scale $XTRANS $YTRANS translate}>> setpagedevice" 
-f "$INFILEPDF"

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

有关此方法的更多信息以及对此要点的讨论,请参阅此博客文章:

> How to scale the page content of PDF files?(2008年8月;马特)

见tavinus/pdfScale,它是一个带有一些其他功能的分支.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读