5

境界線 (または余白) のない PDF を印刷すると、プリンターは用紙の端で約 1 mm の画像データを切り落とします。したがって、ページ上でpdfページをわずかにスケーリング/サイズ変更して、プリンターによって生成された端の空白に対応する端に白い境界線を追加するソリューションを探しています。

これまで使用してみgsました。たとえば、A4 サイズの pdf があるとします1.pdf

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

ここでは、完全な a4 用紙が与えられ、-g2480x3508スケーリングするために 0.9 を掛けようとしましたが、この効果は見られません..

4

4 に答える 4

4

これは、前のバージョンに基づいて構築された 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

この方法の詳細と要旨の説明は、次のブログ投稿で入手できます。

tavinus/pdfScaleを参照してください。これは、他の機能が追加されたフォークです。

于 2014-12-27T19:06:34.537 に答える
1

興味のある特定のツールを指定しなかったので、iText を使用してそのようなタスクを実行します。Java または .NET (iTextSharp) で簡単なコードを記述して、このタスクを簡単に実行できます。これをインスピレーションとして使用してください ( n-up ツール)。実際には、ドキュメントの複数のページを 1 つのページに配置していますが、このコードを採用して、同じ方法で個々のページをわずかに拡大縮小することもできます。

于 2013-08-20T22:32:39.940 に答える