如何使用GhostScript避免tiff上的标头截断。将ps转换为tiff

时间:2017-12-29 13:43:21

标签: linux shell header tiff postscript

在本节中,我将头文件添加到tiff文件的顶部。

echo "/CourierLatin1 findfont 8 scalefont setfont" >>${PS}
echo "40 2 moveto (${DATE}) show" >>${PS}
echo "200 2 moveto (${NAME}) show" >>${PS}
echo "400 2 moveto (${FROM}) show" >>${PS}
echo "510 2 moveto (${PAGEINFO}) show showpage" >>${PS}

${BIN}/gs -dQUIET -dNOPAUSE -dBATCH -dSAFER -sDEVICE=tiffg4 -sOutputFile=${HDR_FILE} \
    -dDEVICEWITHPOINTS=612 -dDEVICEHEIGHTPOINTS=11 ${PS} >>${LOG_FILE}
if [ $? -ne 0 ] ; then
    cleanup
    echo "${BIN}/gs failed" >>${LOG_FILE}
    exit 1
fi

# Overlay the header onto the tiff page
SIZE=`${BIN}/tiffinfo ${f} | grep "Image Width:" | sed -e "s/Image Width//" | sed -e "s/Image Length//" | sed -e "s/ //g"`
WIDTH=`echo ${SIZE} | cut -d: -f2`
LENGTH=`echo ${SIZE} | cut -d: -f3`
OFFSET=`expr ${LENGTH} - 2156`
# no shifting of header line up or down is needed
OFFSET=0
if [ ${OFFSET} -lt 0 ] ; then
    OFFSET=0
fi
echo "Adding ${HDR_FILE} to ${f} ${WIDTH}x${LENGTH} at 0,${OFFSET}" >>${LOG_FILE}
${CONVERT} tiff:${f} -draw "image over 0,${OFFSET} 0,0 'tiff:${HDR_FILE}'" -compress Group4 -flatten +matte tiff:${f} >>${LOG_FILE}
if [ $? -ne 0 ] ; then
    cleanup
    echo "${CONVERT} failed" >>${LOG_FILE}
    exit 1
fi

可以在任何尺寸的页面找到我。所以我首先将tiff post脚本翻译成大小。

我再次转换tiff。可以看到如下代码:

# Nasty compromise - Have to convert the tiff file to ps file so that I can turn around
# and create a 'faxable' tiff file (one that Radisys will accept)
${BIN}/tiff2ps -a -h11.0 -w8.5 ${LOCAL_FILE} >${PS_FILE}
if [ $? -ne 0 ] ; then
    cleanup
    echo "${BIN}/tiff2ps failed" >>${LOG_FILE}
    exit 1
fi

# Part 2 of compromise
${BIN}/gs -dQUIET -dNOPAUSE -dBATCH -dSAFER -sDEVICE=tiffg4 -sPAPERSIZE=letter -r204x196 -sOutputFile=${LOCAL_FILE} ${PS_FILE} >>${LOG_FILE} 2>&1
if [ $? -ne 0 ] ; then
    cp ${BKUP_FILE} ${ORIG_FILE}
    cleanup
    echo "${BIN}/gs ps2tiff failed" >>${LOG_FILE}
    exit 1
fi

输出tiff给Radisys。我不明白为什么标题为此输出剪切.pdf。

您可以看到输出传真图像,如下所示。为什么Header会被削减?

enter image description here

1 个答案:

答案 0 :(得分:0)

在我看来,您首先打印'标题',然后将TIFF文件中的图像(在本例中为文本'传真')放在其上。

TIFF文件不是蒙版,因此空白区域不透明。将TIFF文件转换为PostScript时,它会将TIFF位图图像封装为PostScript图像。如果图像中的空白区域位于“标题”的顶部,则会在其上方打印,遮挡部分“标题”。

有点难以确定发生了什么,我不是shell脚本专家,但看起来你首先使用Ghostscript将一段PostScript呈现给TIFF。这是你的'标题'。

然后你调用$(CONVERT),我猜是ImageMagick的转换实用程序,用于组合标题和一些原始的TIFF文件。

我怀疑此时你的问题出现了,我猜你需要以相反的顺序放置两个tiff文件,以便将标题放在原始文件的“顶部”,而不是“在...之下”它(以Z顺序表示。在你的$(CONVERT)调用中尝试交换$(f)和$(HDR_FILE)。

当然,您可以检查TIFF文件,看看是否一切都很好。

然后你获取该TIFF文件,使用tiff2ps(我认为是libtiff的一部分)将图像包装为PostScript,然后使用Ghostscript以不同的(传真)分辨率重新渲染图像。

我会说你最后一步使用了错误的工具。你已经有了一个位图,你最好使用图像处理应用程序将其下采样到所需的分辨率。虽然你的解决方案无疑是有效的,但我怀疑ImageMagick会做得更好。

至少,在通过tiff2ps发送之前检查TIFF文件应该告诉你当时结果是否正确。