- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
三个星期以来(我想我就是这么慢!)我尝试使用 TCPDF 自己的示例以及在该站点上找到的一些建议来弄清楚如何使用数据库记录来执行此操作。当其他人询问如何使用第 3 方补丁(类)使事情顺利进行时,Asuni 先生回应了一些帮助请求,只是说它可以在没有此类类的情况下在 TCPDF 中完成。无论出于何种原因(也许是我自己的误解),我都无法使用 TCPDF 使用他的列方法打印标签。
我也不愿意放弃 TCPDF 以支持其他可能的解决方案(我不会讨论的原因)。 PHP TCPDF Export for Standard Address Labels是通过切换到 fpdf17 获得所需功能时提出/解决问题的示例。
所以我一直坚持到今天,甚至尝试了一些用法语编写的精彩代码,但我无法说服它创建我需要的结构。
因为像我上面提到的问题已经被“击中”了很多次(在这个网站和其他地方),但似乎没有解决办法,所以我决定尽我所能阅读,编写代码直到我睡眼惺忪,然后进行测试,重新测试并测试更多。
我终于找到了一种从数据库制作 PDF 的方法,该数据库可以制作包含 6 个标签页面(横向 2 个,纵向 3 个)的 PDF,采用 AVERY 5164 格式。而且我已经能够在不使用 TCPDF 的列方法或任何第 3 方补丁或类的情况下做到这一点。
只要密切关注我代码中变量的含义,任何人都应该能够根据自己的需要修改我的解决方案。
我确信必须有一种更优雅(和正确!)的方法来获得我所做的结果,所以我非常愿意接受有关如何改进我的代码的建议。
而且,在我被烧毁之前,是的,我知道数据库调用需要是 PDO。我受困于我的客户允许我访问的内容。
最后,想知道生成包含不同数量记录的各种 PDF 需要多长时间:12条记录(2页)--> 4秒下载激活200 条记录 --> 44 秒文件大小合理(不过我没有写下来......抱歉!)
// value from url calling this page - this client wants results by year every time
$colname_year = "-1";
if (isset($_GET['year'])) {
$colname_year = $_GET['year'];
}
//I DO include Mr. Asuni's credits in my file, but it's left out here for brevity's sake.
//----------------
require_once('../../tcpdf/tcpdf.php');
// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('whoever you are');
$pdf->SetTitle('what you want to call it');
$pdf->SetSubject('your subject');
$pdf->SetKeywords('TCPDF, PDF, HHMWC, QR, CODE');
// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
// set some language-dependent strings
require_once('../../tcpdf/results/lang/eng.php');
$pdf->setLanguageArray($l);
// --------------
// add a page
$pdf->AddPage();
// set the font
$pdf->SetFont('helvetica', '', 10);
// set style for barcode
$style = array(
'border' => 2,
'vpadding' => 'auto',
'hpadding' => 'auto',
'fgcolor' => array(0,0,0),
'bgcolor' => false, //array(255,255,255)
'module_width' => 1, // width of a single module in points
'module_height' => 1 // height of a single module in points
);
// connect to database
require_once('../../../Connections/con1.php');
mysql_select_db($database_con1, $con1); // Get needed records from database
$query_info = sprintf("select regkey, name1, name2, company, city, state, volunteer, meal, choice, golf from convregis where (name1<>'Anonymous Donation' and print='0' and completed='Yes' and hold='0' and year=%s) order by name2, name1 ASC", GetSQLValueString($colname_year, "text"));
$info = mysql_query($query_info, $con1) or die(mysql_error());
$num_fields = mysql_num_fields($info);
$j=0; // the field number
$x=1; // the record number
while($row = mysql_fetch_array($info)) {
for($j=0; $j<$num_fields; $j++) {
$name = mysql_field_name($info, $j);
$object[$x][$name] = $row[$name];
}
$x++; // get next record set
}
//set variables for placement of QR CODE and text lines
$size=40; // mm size of QRCODE / H = QR-CODE Best error correction
$qrlm=40; // left margin of code on left
$qrlm2=140; // left margin of code on right
$qrvm=40; // vertical placement (how far down the page) of BOTH codes on first row
$l=20; // left margin of text, left side
$l2=120; // left margin of text, right side
$y=15; // vertical placement (how far down the page) of BOTH texts on first row
// There will be two records per row - there will be three rows
$ii = count($object); // total number of record rows to do
for($i=1; $i<=$ii; $i++) { //$object[$i]['field_name'] / this sets $i = $x above
if ($i<=$ii) {
$codeurl = "https:clientwebsiteaddress/attend.php?regkey=".$object[$i]['regkey'];
///write the QR CODE
$pdf->write2DBarcode($codeurl, 'QRCODE,H', $qrlm, $qrvm, $size, $size, $style, 'N');
// the QR CODE, when scanned by a smartphone at the convention's
//registration packet pickup table, triggers an update to the
//database in the attend.php page, setting a registrant to "in attendance"
$regkey=$object[$i]['regkey']; //assign row data to a variable and manipulate as needed
$fullname=strtoupper($object[$i]['name2']).", ".strtoupper($object[$i]['name1']);
$vol=$object[$i]['volunteer'];
$company=strtoupper($object[$i]['company']);
$city=$object[$i]['city'];
$state=$object[$i]['state'];
$meal=$object[$i]['meal'];
$golf=$object[$i]['golf'];
if ($golf<>"1") {
$golf=" ";
} else {
$golf="GOLF";
}
if ($meal<>"1") {
$meal=" ";
} else {
$meal="MEAL: ".strtoupper($object[$i]['choice']);
}
if ($meal<>" ") {
$mealgolf=$meal." / ".$golf;
} else {
$mealgolf=$golf;
}
//write the lines of text
$pdf->Text($l, $y, $fullname.' '.$vol);
$pdf->Text($l, $y+5, $regkey.' '.$city.', '.$state);
$pdf->Text($l, $y+10, $company);
$pdf->Text($l, $y+15, $mealgolf);
$i++; // get next record
if ($i<=$ii) {
$codeurl2 = "https:clientwebsiteaddress/attend.php?regkey=".$object[$i]['regkey'];
$pdf->write2DBarcode($codeurl2, 'QRCODE,H', $qrlm2, $qrvm, $size, $size, $style, 'N');
$regkey2=$object[$i]['regkey'];
$fullname2=strtoupper($object[$i]['name2']).", ".strtoupper($object[$i]['name1']);
$vol2=$object[$i]['volunteer'];
$company2=strtoupper($object[$i]['company']);
$city2=$object[$i]['city'];
$state2=$object[$i]['state'];
$meal2=$object[$i]['meal'];
$golf2=$object[$i]['golf'];
if ($golf2<>"1") {
$golf2=" ";
} else {
$golf2="GOLF";
}
if ($meal2<>"1") {
$meal2=" ";
} else {
$meal2="MEAL: ".strtoupper($object[$i]['choice']);
}
if ($meal2<>" ") {
$mealgolf2=$meal2." / ".$golf2;
} else {
$mealgolf2=$golf2;
}
$pdf->Text($l2, $y, $fullname2.' '.$vol2);
$pdf->Text($l2, $y+5, $regkey2.' '.$city2.', '.$state2);
$pdf->Text($l2, $y+10, $company2);
$pdf->Text($l2, $y+15, $mealgolf2);
$qrvm=$qrvm+85; $y=$y+85; // add 85 mm drop to vertical alignment of qrcodes
if($i<=$ii and $qrvm>210) { //no more room on this page but more records to do
$qrvm=40; // reset qrcode vertical alignment
$y=15; // reset where texts write
$pdf->AddPage();
}
}
}
} // end of PDF (no more records to do)
$pdf->Output($year.'EnvelopeLabels.pdf', 'I'); //Close and output PDF document
?>
我希望通过稍微更改代码以删除敏感信息而不会破坏任何内容。感谢一个很棒的网站 - 我学到了很多东西,希望现在能帮助别人作为返回!
最佳答案
看看我的解决方案 - 它可以打印 24 个标签 - 3*8 到 A4 中。只需对 width 、 height 和 $qty 做一个简单的改变,你就可以得到 2*6 。
<?php
include("dbconfig.php");
require_once('../tcpdf/tcpdf.php');
// include 1D barcode class (search for installation path)
require_once('../tcpdf/tcpdf_barcodes_1d.php');
date_default_timezone_set('Asia/Kolkata');
// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, 'mm', 'A4', true, 'UTF-8', false);
// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Casual Creators');
$pdf->SetTitle('Bar Code Labels');
$pdf->SetSubject('');
$pdf->SetKeywords('');
//remove header and footer
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
// set margins
$pdf->setTopMargin(13.0);
$pdf->SetRightMargin(6.0);
$pdf->setHeaderMargin(13);
$pdf->SetFooterMargin(13.0); //13mm
// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, 13.0);
// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
// set a barcode on the page footer
//$pdf->setBarcode(date('Y-m-d H:i:s'));
// set font
$pdf->SetFont('helvetica', '', 11);
// add a page
$pdf->AddPage();
// print a message
//$txt = "";
//$pdf->MultiCell(70, 50, $txt, 0, 'J', false, 1, 125, 30, true, 0, false, true, 0, 'T', false);
//$pdf->SetY(30);
// -----------------------------------------------------------------------------
$pdf->SetFont('helvetica', '', 10);
// define barcode style
$style = array(
'position' => '',
'align' => 'L',
'stretch' => false,
'fitwidth' => false,
'cellfitalign' => '',
'border' => false,
'hpadding' => 'auto',
'vpadding' => 'auto',
'fgcolor' => array(0,0,0),
'bgcolor' => false, //array(255,255,255),
'text' => true,
'font' => 'helvetica',
'fontsize' => 8,
'stretchtext' => 0
);
//63.5 mm label width
//33.9mm label height
//2.5 mm gap between
// PRINT VARIOUS 1D BARCODES
// CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9.
$query1 = "SELECT * FROM PRODUCTS WHERE ID = '123456' ";
$result1 = $conn->query($query1);
$qty = 24;
$item ;
if ($result1-> num_rows > 0) {
$row = $result1 -> fetch_assoc();
$item = $row["id"];
}
else {
echo 'DbFailed';
}
$counter = 1;
$i = '0' ;
for( ; $i < $qty ; $i++)
{
$x = $pdf->GetX();
$y = $pdf->GetY();
$pdf->setCellMargins(0,0,2.5,0);
// The width is set to the the same as the cell containing the name.
// The Y position is also adjusted slightly.
$pdf->write1DBarcode($item , 'C39', $x-2.5, $y-6.5, 63.5, 18, 0.4, $style, 'L');
//Reset X,Y so wrapping cell wraps around the barcode's cell.
$pdf->SetXY($x,$y);
$pdf->Cell(63.5, 25, 'MyProduct', 0, 0, 'L', FALSE, '', 0, FALSE, 'C', 'B');
$pdf->SetXY($x,$y);
$pdf->Cell(63.5, 33, 'Price', 0, 0, 'L', FALSE, '', 0, FALSE, 'C', 'B');
if($counter == 3)
{
$pdf->Ln(33.9);
$counter = 1;
}else{
$counter++;
}
}
// ---------------------------------------------------------
ob_end_clean();
//Close and output PDF document
$pdf->Output('barcodes.pdf', 'I');
?>
关于php - 如何在不使用列或第 3 方类的情况下使用 TCPDF 制作包含二维条码的 2x6 张标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29712374/
我在 JavaScript 文件中运行 PHP,例如...... var = '';). 我需要使用 JavaScript 来扫描字符串中的 PHP 定界符(打开和关闭 PHP 的 )。 我已经知道使
我希望能够做这样的事情: php --determine-oldest-supported-php-version test.php 并得到这个输出: 7.2 也就是说,php 二进制检查 test.
我正在开发一个目前不使用任何框架的大型 php 站点。我的大问题是,随着时间的推移慢慢尝试将框架融入应用程序是否可取,例如在创建的新部件和更新的旧部件中? 比如所有的页面都是直接通过url服务的,有几
下面是我的源代码,我想在同一页面顶部的另一个 php 脚本中使用位于底部 php 脚本的变量 $r1。我需要一个简单的解决方案来解决这个问题。我想在代码中存在的更新查询中使用该变量。 $name)
我正在制作一个网站,根据不同的情况进行大量 PHP 重定向。就像这样...... header("Location: somesite.com/redirectedpage.php"); 为了安全起见
我有一个旧网站,我的 php 标签从 因为短标签已经显示出安全问题,并且在未来的版本中将不被支持。 关于php - 如何避免在 php 文件中写入
我有一个用 PHP 编写的配置文件,如下所示, 所以我想用PHP开发一个接口(interface),它可以编辑文件值,如$WEBPATH , $ACCOUNTPATH和 const值(value)观
我试图制作一个登录页面来学习基本的PHP,首先我希望我的独立PHP文件存储HTML文件的输入(带有表单),但是当我按下按钮时(触发POST到PHP脚本) )我一直收到令人不愉快的错误。 我已经搜索了S
我正在寻找一种让 PHP 以一种形式打印任意数组的方法,我可以将该数组作为赋值包含在我的(测试)代码中。 print_r 产生例如: Array ( [0] => qsr-part:1285 [1]
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: What is the max key size for an array in PHP? 正如标题所说,我想知道
我正在寻找一种让 PHP 以一种形式打印任意数组的方法,我可以将该数组作为赋值包含在我的(测试)代码中。 print_r 产生例如: Array ( [0] => qsr-part:1285 [1]
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我在 MySQL 数据库中有一个表,其中存储餐厅在每个工作日和时段提供的菜单。 表结构如下: i_type i_name i_cost i_day i_start i_
我有两页。 test1.php 和 test2.php。 我想做的就是在 test1.php 上点击提交,并将 test2.php 显示在 div 中。这实际上工作正常,但我需要向 test2.php
我得到了这个代码。我想通过textarea更新mysql。我在textarea中回显我的MySQL,但我不知道如何更新它,我应该把所有东西都放进去吗,因为_GET模式没有给我任何东西,我也尝试_GET
首先,我是 php 的新手,所以我仍在努力学习。我在 Wordpress 上创建了一个表单,我想将值插入一个表(data_test 表,我已经管理了),然后从 data_test 表中获取所有列(id
我有以下函数可以清理用户或网址的输入: function SanitizeString($var) { $var=stripslashes($var); $va
我有一个 html 页面,它使用 php 文件查询数据库,然后让用户登录,否则拒绝访问。我遇到的问题是它只是重定向到 php 文件的 url,并且从不对发生的事情提供反馈。这是我第一次使用 html、
我有一个页面充满了指向 pdf 的链接,我想跟踪哪些链接被单击。我以为我可以做如下的事情,但遇到了问题: query($sql); if($result){
我正在使用 从外部文本文件加载 HTML/PHP 代码 $f = fopen($filename, "r"); while ($line = fgets($f, 4096)) { print $l
我是一名优秀的程序员,十分优秀!