通过命令行在PostScript文件中添加行

时间:2018-06-10 14:13:38

标签: bash postscript

我有一个ps文件是一个A4页面,我想绘制4条虚线,将页面分成9个等大小。

我需要通过命令行或bash脚本来实现。

2 个答案:

答案 0 :(得分:2)

您可以使用/ BeginPage或/ EndPage过程绘制线条,您可以将其添加到PostScript程序中。

您可以使用Ghostscript的ps2write设备并添加每页内容。

无论如何,只需在调用setpagedevice之前添加一个PostScript片段,并让字典包含一个BeginPage过程,该过程绘制所需的四行。完成工作

x y moveto x y lineto stroke将在当前颜色中绘制一条线,其中x和y是PostScript单位中的位置(1/72英寸)要设置黑色,请在执行笔划之前执行“0 setgray”。要以编程方式计算页面大小,请使用“currentpagedevice / PageSize get”或“clippath pathbbox”。 PostScript语言参考手册可在线获取。

答案 1 :(得分:0)

按照KenS的答案,我已经做到了:

#!/bin/bash

if [[ $# -eq 0 ]] ; then
    echo 'Tienes que pasar un fichero como argumento'
    exit 0
fi

if [[ ! -f "$1" ]]; then
    echo "$1 no es un fichero"
    exit 0
fi

SOURCE=$(realpath -- "$1")

DIR="$PWD"

cd $(mktemp -d)

echo "Directorio de trabajo: $PWD"

filename=$(basename -- "$1")
extension="${filename##*.}"
filename="${filename%.*}"

WORKCOPY="in.pdf"
OUTPUT="$DIR/${filename}"

if [[ "$extension" != "pdf" ]]; then
    unoconv -f pdf -o "$WORKCOPY" "$SOURCE"
    if [ $? -ne 0 ]; then
        exit $?
    fi
else
    cp "$SOURCE" "$WORKCOPY"
    OUTPUT="${OUTPUT}_3x3"
fi

pages=$(pdfinfo "$WORKCOPY" | grep Pages | awk '{print $2}')

if [ $pages -ne 2 ]; then
    echo "El número de páginas ha de ser 2"
    exit 0
fi

function build_page {
    pdftk "$WORKCOPY" cat $1 $1 $1 $1 $1 $1 $1 $1 $1 output "$1.pdf"
    rot=$(pdfinfo "$1.pdf" | grep "Page rot" | awk '{print $3}')
    if [ $rot -ne 0 ]; then
        pdftk "$1.pdf" cat 1-endnorth output "$1_north.pdf"
        mv "$1_north.pdf" "$1.pdf"
    fi

    size=$(pdfinfo "$1.pdf" | grep "Page size" | awk '{print $3, $5}')
    width=$(echo $size | cut -d' ' -f1)
    height=$(echo $size | cut -d' ' -f2)
    pdf2ps "$1.pdf" "$1.ps"
    psnup -W${width} -H${height} -pa4 -9 "$1.ps" "$1_oct.ps"

    if [ $1 -eq 1 ]; then
        # Guias para cortar
        # Ancho: 842
        #  Alto: 595
        cp "$1_oct.ps" "$1_oct.bak.ps"
        cat > "$1_oct.ps" <<EOF
<< /BeginPage
{
    0.7 setgray

    0 280.66 moveto 595 280.66 lineto stroke
    0 561.33 moveto 595 561.33 lineto stroke

    198.33 0 moveto 198.33 842 lineto stroke
    396.66 0 moveto 396.66 842 lineto stroke
}
>> setpagedevice
EOF
        cat "$1_oct.bak.ps" >> "$1_oct.ps"
    fi
    rm "$1.pdf"
    ps2pdf "$1_oct.ps" "$1.pdf"

}  

build_page 1
build_page 2

pdftk 1.pdf 2.pdf cat output "${OUTPUT}.pdf"

主要部分是我cat > "$1_oct.ps" <<EOF

因此,正如KenS所建议的,解决方案是前置:

<< /BeginPage
{
    0.7 setgray

    0 280.66 moveto 595 280.66 lineto stroke
    0 561.33 moveto 595 561.33 lineto stroke

    198.33 0 moveto 198.33 842 lineto stroke
    396.66 0 moveto 396.66 842 lineto stroke
}
>> setpagedevice

由于