Php TCPDF中的CropMarks
我试图在我的PDF中创建cropMark,我看到了示例文档: 我已经下载了这段代码,并设法让那些cropMarks正常工作,但是我似乎无法将裁剪标记添加到我的其他PDF代码中。为了使cropMark方法发挥作用,PDF的先前要求是什么 我制作的cropMark是这样的(右侧50毫米,从0,0向下50毫米): 我尝试在添加内容之前和之后添加此代码。内容是单元格、WriteHTML单元格和SVG内容的组合 我添加如下页面:Php TCPDF中的CropMarks,php,tcpdf,Php,Tcpdf,我试图在我的PDF中创建cropMark,我看到了示例文档: 我已经下载了这段代码,并设法让那些cropMarks正常工作,但是我似乎无法将裁剪标记添加到我的其他PDF代码中。为了使cropMark方法发挥作用,PDF的先前要求是什么 我制作的cropMark是这样的(右侧50毫米,从0,0向下50毫米): 我尝试在添加内容之前和之后添加此代码。内容是单元格、WriteHTML单元格和SVG内容的组合 我添加如下页面: $pdf->AddPage('L', $page_format, t
$pdf->AddPage('L', $page_format, true, false);
我设置了页面的边距
$pdf->SetMargins(0,0,0);
我不设置任何页眉或页脚边距。我做错了什么
更新:我应该提到,我没有得到任何错误,我只是没有看到任何cropmarks,我的背景是蓝色的,并且(我相信)裁剪标记应该是红色的。此外,我还尝试添加一个新页面(AddPage()),并尝试在新页面上绘制裁剪标记,但仍然没有成功。到目前为止,我发现文档有用且一致,所以我一定是做错了什么。不幸的是,我无法找出裁剪标记不起作用的原因,但我通过使用
Line
方法自己绘制它们来解决这个问题。代码如下:
// set the crop marks to be same color as the text, so that they always show up
$pdf->SetLineStyle(array('width' => 0.25, 'color' => $myRGBColor));
// set quarter of an inch and 3/16 of an inch to mm
$qmm = 6.35;
$smQmm = 4.7625;
$cw = $pdf->getPageWidth();
$ch = $pdf->getPageHeight();
// Top left
$pdf->Line($qmm, 0, $qmm, $smQmm);
$pdf->Line(0, $qmm, $smQmm, $qmm);
// Top right
$pdf->Line($cw - $qmm, 0, $cw - $qmm, $smQmm);
$pdf->Line($cw, $qmm, $cw - $smQmm, $qmm);
// Bottom right
$pdf->Line($cw, $ch - $qmm, $cw - $smQmm, $ch - $qmm);
$pdf->Line($cw - $qmm, $ch, $cw - $qmm, $ch - $smQmm);
// Bottom left
$pdf->Line(0, $ch - $qmm, $smQmm, $ch - $qmm);
$pdf->Line($qmm, $ch, $qmm, $ch - $smQmm);
不幸的是,我无法找到裁剪标记不起作用的原因,但我通过使用
Line
方法自己绘制它们来解决这个问题。代码如下:
// set the crop marks to be same color as the text, so that they always show up
$pdf->SetLineStyle(array('width' => 0.25, 'color' => $myRGBColor));
// set quarter of an inch and 3/16 of an inch to mm
$qmm = 6.35;
$smQmm = 4.7625;
$cw = $pdf->getPageWidth();
$ch = $pdf->getPageHeight();
// Top left
$pdf->Line($qmm, 0, $qmm, $smQmm);
$pdf->Line(0, $qmm, $smQmm, $qmm);
// Top right
$pdf->Line($cw - $qmm, 0, $cw - $qmm, $smQmm);
$pdf->Line($cw, $qmm, $cw - $smQmm, $qmm);
// Bottom right
$pdf->Line($cw, $ch - $qmm, $cw - $smQmm, $ch - $qmm);
$pdf->Line($cw - $qmm, $ch, $cw - $qmm, $ch - $smQmm);
// Bottom left
$pdf->Line(0, $ch - $qmm, $smQmm, $ch - $qmm);
$pdf->Line($qmm, $ch, $qmm, $ch - $smQmm);
如果使用linux,此shell脚本会将裁剪标记(也称为注册标记)添加到pdf中
#!/bin/bash
# takes two arguments, both pdf filenames.
# add cropmarks to pdf file given as first argument, and writes result to pdf file, given as second argument.
# uses: pdfinfo, ps2pdf, pdftk
# koen 2013
# get bounding box
BOX=`pdfinfo -box $1 | grep 'MediaBox' | head -1`
LEFT=`echo $BOX | awk '{print $2}'`
BOTTOM=`echo $BOX | awk '{print $3}'`
RIGHT=`echo $BOX | awk '{print $4}'`
TOP=`echo $BOX | awk '{print $5}'`
WIDTH=`echo $BOX | awk '{print $4-$2}'`
HEIGHT=`echo $BOX | awk '{print $5-$3}'`
# add postscript code for crop marks
cat >> cropmarks.ps <<EOD
% length of crop mark, in inches
/Crop .5 def
% length of crop mark, in points
/CropLen Crop 72 mul def
0 setlinewidth
$LEFT $BOTTOM moveto CropLen 0 rmoveto 0 CropLen rlineto stroke
$LEFT $BOTTOM moveto 0 CropLen rmoveto CropLen 0 rlineto stroke
$LEFT $TOP moveto CropLen 0 rmoveto 0 CropLen neg rlineto stroke
$LEFT $TOP moveto 0 CropLen neg rmoveto CropLen 0 rlineto stroke
$RIGHT $BOTTOM moveto CropLen neg 0 rmoveto 0 CropLen rlineto stroke
$RIGHT $BOTTOM moveto 0 CropLen rmoveto CropLen neg 0 rlineto stroke
$RIGHT $TOP moveto CropLen neg 0 rmoveto 0 CropLen neg rlineto stroke
$RIGHT $TOP moveto 0 CropLen neg rmoveto CropLen neg 0 rlineto stroke
showpage
EOD
ps2pdf -dDEVICEWIDTHPOINTS=$WIDTH -dDEVICEHEIGHTPOINTS=$HEIGHT cropmarks.ps cropmarks.pdf
pdftk $1 stamp cropmarks.pdf output $2
rm -f cropmarks.ps cropmarks.pdf
#not truncated
#/bin/bash
#接受两个参数,都是pdf文件名。
#将cropmarks添加到作为第一个参数给出的pdf文件中,并将结果写入作为第二个参数给出的pdf文件中。
#用途:pdfinfo、ps2pdf、pdftk
#科恩2013
#获取边界框
BOX=`pdfinfo-BOX$1 | grep'MediaBox'| head-1`
左=`echo$BOX | awk'{print$2}'`
底部=`echo$BOX | awk'{print$3}'`
右=`echo$BOX | awk'{print$4}'`
TOP=`echo$BOX | awk'{print$5}'`
宽度=`echo$BOX | awk'{print$4-$2}'`
高度=`echo$BOX | awk'{print$5-$3}'`
#为裁剪标记添加postscript代码
cat>>cropmarks.ps如果使用linux,此shell脚本会将裁剪标记(也称为注册标记)添加到pdf中
#!/bin/bash
# takes two arguments, both pdf filenames.
# add cropmarks to pdf file given as first argument, and writes result to pdf file, given as second argument.
# uses: pdfinfo, ps2pdf, pdftk
# koen 2013
# get bounding box
BOX=`pdfinfo -box $1 | grep 'MediaBox' | head -1`
LEFT=`echo $BOX | awk '{print $2}'`
BOTTOM=`echo $BOX | awk '{print $3}'`
RIGHT=`echo $BOX | awk '{print $4}'`
TOP=`echo $BOX | awk '{print $5}'`
WIDTH=`echo $BOX | awk '{print $4-$2}'`
HEIGHT=`echo $BOX | awk '{print $5-$3}'`
# add postscript code for crop marks
cat >> cropmarks.ps <<EOD
% length of crop mark, in inches
/Crop .5 def
% length of crop mark, in points
/CropLen Crop 72 mul def
0 setlinewidth
$LEFT $BOTTOM moveto CropLen 0 rmoveto 0 CropLen rlineto stroke
$LEFT $BOTTOM moveto 0 CropLen rmoveto CropLen 0 rlineto stroke
$LEFT $TOP moveto CropLen 0 rmoveto 0 CropLen neg rlineto stroke
$LEFT $TOP moveto 0 CropLen neg rmoveto CropLen 0 rlineto stroke
$RIGHT $BOTTOM moveto CropLen neg 0 rmoveto 0 CropLen rlineto stroke
$RIGHT $BOTTOM moveto 0 CropLen rmoveto CropLen neg 0 rlineto stroke
$RIGHT $TOP moveto CropLen neg 0 rmoveto 0 CropLen neg rlineto stroke
$RIGHT $TOP moveto 0 CropLen neg rmoveto CropLen neg 0 rlineto stroke
showpage
EOD
ps2pdf -dDEVICEWIDTHPOINTS=$WIDTH -dDEVICEHEIGHTPOINTS=$HEIGHT cropmarks.ps cropmarks.pdf
pdftk $1 stamp cropmarks.pdf output $2
rm -f cropmarks.ps cropmarks.pdf
#not truncated
#/bin/bash
#接受两个参数,都是pdf文件名。
#将cropmarks添加到作为第一个参数给出的pdf文件中,并将结果写入作为第二个参数给出的pdf文件中。
#用途:pdfinfo、ps2pdf、pdftk
#科恩2013
#获取边界框
BOX=`pdfinfo-BOX$1 | grep'MediaBox'| head-1`
左=`echo$BOX | awk'{print$2}'`
底部=`echo$BOX | awk'{print$3}'`
右=`echo$BOX | awk'{print$4}'`
TOP=`echo$BOX | awk'{print$5}'`
宽度=`echo$BOX | awk'{print$4-$2}'`
高度=`echo$BOX | awk'{print$5-$3}'`
#为裁剪标记添加postscript代码
cat>>cropmarks.ps我花了很长时间才弄清楚坐标是如何工作的。以下方法最终为我解决了问题,并为任何tcpdf文档绘制了标记和出血点:
/**
* Enlarges the MediaBox by the slug of the document in all directions and draws cropmarks,
* registrations marks and color bars
*
* @param $tcpdf the internal tcpdf object
*
* @access public
*/
public function drawCropbox($tcpdf, $slug = 6)
{
for ($i = 1; $i <= $tcpdf->getNumPages(); $i++) {
$tcpdf->setPage($i);
$width = $tcpdf->getPageWidth();
$height = $tcpdf->getPageHeight();
$outerWidth = $width + 2 * $slug;
$outerHeight = $height + 2 * $slug;
$barHeight = min($slug - 1, 6);
$barWidth = min(9 * $barHeight, ($width - $barHeight * 4)/ 2);
$barHeight = max(1, $barWidth / 9);
$registrationHeight = $barHeight / 2;
$tcpdf->setPageFormat(
array(
$outerWidth,
$outerHeight,
'Rotate' => 0,
'MediaBox' => array(
'llx' => -$slug, 'lly' => $height + $slug, 'urx' => $width + $slug, 'ury' => -$slug
),
)
);
//Crop left top
$tcpdf->cropMark(
$x = 0,
$y = $outerWidth - $height,
$w = $slug,
$h = $slug,
$type = 'A',
$color = array(0, 0, 0)
);
//Crop right top
$tcpdf->cropMark(
$x = $width,
$y = $outerWidth - $height,
$w = $slug,
$h = $slug,
$type = 'B',
$color = array(0, 0, 0)
);
//Crop left bottom
$tcpdf->cropMark(
$x = 0,
$y = $outerWidth,
$w = $slug,
$h = $slug,
$type = 'C',
$color = array(0, 0, 0)
);
//Crop right bottom
$tcpdf->cropMark(
$x = $width,
$y = $outerWidth,
$w = $slug,
$h = $slug,
$type = 'D',
$color = array(0, 0, 0)
);
//Registration left
$tcpdf->registrationMark(
$x = -$slug / 2,
$y = $width - $height / 2 + 2 * $slug,
$registrationHeight,
FALSE,
array(0, 0, 0),
array(255, 255, 255)
);
//Registration top
$tcpdf->registrationMark(
$x = $width / 2,
$y = $outerWidth - $height - $slug / 2,
$registrationHeight,
FALSE,
array(0, 0, 0),
array(255, 255, 255)
);
//Registration right
$tcpdf->registrationMark(
$x = $width + $slug / 2,
$y = $width - $height / 2 + 2 * $slug,
$registrationHeight,
FALSE,
array(0, 0, 0),
array(255, 255, 255)
);
//Registration bottom
$tcpdf->registrationMark(
$x = $width / 2,
$y = $outerWidth + $slug / 2,
$registrationHeight,
FALSE,
array(0, 0, 0),
array(255, 255, 255)
);
//Color Registration Bar
$tcpdf->colorRegistrationBar(
$x = $width - $barWidth - $barHeight,
$y = $outerWidth - $outerHeight + $slug,
$w = $barWidth,
$h = $barHeight,
FALSE,
TRUE,
'A,W,R,G,B,C,M,Y,K'
);
//Gray Registration Bar
$tcpdf->colorRegistrationBar(
$x = $barHeight,
$y = $outerWidth - $outerHeight + $slug,
$w = $barWidth,
$h = $barHeight,
TRUE,
FALSE,
'A'
);
}
}
/**
*通过文件的段塞向各个方向放大MediaBox并绘制CropMark,
*注册标志和颜色栏
*
*@param$tcpdf内部tcpdf对象
*
*@access-public
*/
公共函数drawCropbox($tcpdf,$slug=6)
{
对于($i=1;$i getNumPages();$i++){
$tcpdf->setPage($i);
$width=$tcpdf->getPageWidth();
$height=$tcpdf->getPageHeight();
$outerWidth=$width+2*$slug;
$outerHeight=$height+2*$slug;
$barHeight=min($slug-1,6);
$barWidth=min(9*$barHeight,($width-$barHeight*4)/2);
$barHeight=最大值(1$barWidth/9);
$registrationHeight=$barHeight/2;
$tcpdf->setPageFormat(
排列(
$outerWidth,
$outerHeight,
“旋转”=>0,
“MediaBox”=>阵列(
'llx'=>-$slug,'lly'=>$height+$slug,'urx'=>$width+$slug,'ury'=>-$slug
),
)
);
//裁剪左上角
$tcpdf->cropMark(
$x=0,
$y=$outerWidth-$height,
$w=$slug,
$h=$slug,
$type='A',
$color=数组(0,0,0)
);
//裁剪右上角
$tcpdf->cropMark(
$x=$width,
$y=$outerWidth-$height,
$w=$slug,
$h=$slug,
$type='B',
$color=数组(0,0,0)
);
//裁剪左下角
$tcpdf->cropMark(
$x=0,
$y=$outerWidth,
$w=$slug,
$h=$slug,
$type='C',
$color=数组(0,0,0)
);
//裁剪右下角
$tcpdf->cropMark(
$x=$width,
$y=$outerWidth,
$w=$slug,
$h=$slug,
$type='D',
$color=数组(0,0,0)
);
//左登记
$tcpdf->registrationMark(
$x=-$slug/2,
$y=$width-$height/2+2*$slug,
$registrationHeight,
错误的
数组(0,0,0),
数组(255、255、255)
);
//注册顶部
$tcpdf->registrationMark(
$x=$width/2,
$y=$outerWidth-$height-$slug/2,
$registrationHeight,
错误的
数组(0,0,0),
数组(255、255、255)
);
//登记权
$tcpdf->registrationMark(
$x=$width+$slug/2,
$y=$width-$height/2+2*$slug,
$registrationHeight,
错误的
数组(0,0,0),
数组(255、255、255)
);
//注册底部
$tcpdf->registrationMark(
$x=$width/2,
$y=$outerWidth+$slug/2,
$registrationHeight,
错误的
数组(0,0,0),
数组(255、255、255)
);
//颜色注册栏
$tcpdf->colorRegistrationBar(
$x=$width-$barWidth-$barHeight,
$y=$outerWidth-$outerHeight+$slug,
$w=$barWidth,
$h=$barHeight,
错误的
符合事实的
“A,W,R,G,B,C,M,Y,K”
);
//灰色登记栏
$tcpdf->colorRegistrationBar(
$x=$barHeight,
$y=$outerWidth-$outerHeight+$slug,
$w=$barWidth,
$h=$barHeight,
符合事实的
错误的
“A”
);
}
}
我花了很长时间才发现坐标是如何工作的