8

我正在使用 TCPDF 生成 PDF 文档,并且正在尝试将徽标添加到标题中,但是图像质量有问题,后来我发现,缩放也有问题。

使用 TCPDF 插入 PDF 文档的图像会出现质量损失和大小问题。我不太在乎尺寸,因为我可以改变它,但我无法恢复图像的质量。

我试过的:

  • TCPDF 缩放和质量问题
  • tcpdf:图像质量差
  • 我还将标头转换为 HTML 代码,同样质量下降。
  • 删除了所有其他选项$pdf->Image()并将所有内容保留为默认值 - 图像尺寸增加到(可能)原始尺寸,具有相同的质量问题。

这是我用来插入图像的代码:

$this->Image("../images/logo.jpg", 8, 10, 35, '', 'JPG', '', 'T', false, 0, '', false, false, 0, false, false, false);

这是createPDF()函数的开始:

$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetCreator('PHP TC-PDF Generator');
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetMargins(8, 50, 8); // page margins
$pdf->SetAutoPageBreak(TRUE, 30);
$pdf->setImageScale(1);
$pdf->setFontSubsetting(true);
$pdf->SetFont('helvetica', '', 12, '', true);
$pdf->AddPage();
$pdf->setTextShadow(array('enabled'=>false));

还有其他建议吗?

备选方案:我愿意用任何其他 PDF 生成器更改 TCPDF,如果它支持 HTML 表格并且可以插入质量更好的图像。

对你的帮助表示感谢。

4

3 回答 3

9

要使图像更大,请增加定义的宽度。您似乎使用的是默认单位 mm,因此您指定的宽度为 35 mm。如果您想要更大的图像,请将该数字更改为所需的宽度。

要获得更好质量的图像,请从更大的图像开始。您可能需要进行试验,但尝试 1.53 1倍大。如果你把它做得太大,那么缩放时它可能看起来很不稳定。

我会使用PNG。PNG 格式更适合您使用的带有文本和纯色的图像。但是,如果您想使用 JPG,请尝试使用SetJPEGQuality()方法提高图像质量。我相信默认值为 75。

缩放

如果指定尺寸,则不使用图像比例值。如果您不想明确指定大小,请使用setImageScale()方法相应地设置比例因子。因此,如果您使图像比所需尺寸大 1.53 倍,请将比例设置为 1.53。

注意:文档中对 setImageScale() 的描述具有误导性,IMO。它与将像素转换为用户单位没有任何关系。该转换由脚本在内部处理。

缩放级别

请注意,无论您做什么,图像在所有缩放级别都不会看起来很好。您可以使用SetDisplayMode()方法设置初始缩放级别。TCPDF 默认为页面宽度,在大多数现代台式机和笔记本电脑上将超过 100%。

图片尺寸

传递给Image()方法的尺寸使用定义的用户单位(默认为 mm)。虽然 dpi 和 ppi 之间存在一些技术差异,但它们仅适用于打印。

所以为了我们的目的:

72 pixels = 72 points = 1 inch = 2.54 cm = 25.4 mm

因此,如果您想要一个 40 毫米宽的图像,请尝试创建一个 173 像素宽的图像。

40 mm * 72 px / 25.4 mm * 1.53 scale factor

矢量图像

如果图像质量真的很重要,您应该考虑使用其中一种矢量格式。查看 TCPDF 手册中的ImageSvg()ImageEps()方法。


脚注

  1. 我发现在 100% 缩放时,当原始图像比所需尺寸大 1.53 倍时,质量会有显着提高。当我第一次开始摆弄 TCPDF 和图像质量时,我多次遇到数字 1.53。但是,对于这个数字的来源,从来没有任何解释。我相信我终于想通了。Adobe Reader 默认使用 110 ppi 的分辨率,TCPDF 创建一个 72 dpi 的文档。110 / 72 = 1.53
于 2013-11-29T01:34:04.033 回答
1

我有同样的问题,以前的建议也没有对我有用。我的救赎就是这个。秘诀是使用您的 pdf 徽标作为模板,使用 Google 徽标查看结果:

在此处输入图像描述

1)您需要一个PDF logo 1.4版(不支持当前的PDF版本)。为此,请选择高质量的 png、jpeg等徽标并使用此站点转换为 PDF 1.4 。

2) 下载 FPDI 库

3)按照第一个链接中的说明进行操作,我在这里复制:

<?php
// just require TCPDF instead of FPDF
require_once('tcpdf.php');
require_once('fpdi.php');

class PDF extends FPDI
{
/**
 * "Remembers" the template id of the imported page
 */
var $_tplIdx;

/**
 * Draw an imported PDF logo on every page
 */
function Header()
{
    if (is_null($this->_tplIdx)) {
        $this->setSourceFile("logo.pdf");
        $this->_tplIdx = $this->importPage(1);
    }
    $size = $this->useTemplate($this->_tplIdx, 130, 5, 60);

    $this->SetFont('freesans', 'B', 20);
    $this->SetTextColor(0);
    $this->SetXY(PDF_MARGIN_LEFT, 5);
    $this->Cell(0, $size['h'], 'TCPDF and FPDI');
}

function Footer()
{
    // emtpy method body
}
}

// initiate PDF
$pdf = new PDF();
$pdf->SetMargins(PDF_MARGIN_LEFT, 40, PDF_MARGIN_RIGHT);
$pdf->SetAutoPageBreak(true, 40);
$pdf->setFontSubsetting(false);

// add a page
$pdf->AddPage();

// get external file content
$utf8text = file_get_contents('examples/data/utf8test.txt', true);

$pdf->SetFont('freeserif', '', 12);
// now write some text above the imported page
$pdf->Write(5, $utf8text);

$pdf->Output();
于 2014-10-15T14:38:11.940 回答
0

好吧,我知道这是一个老问题,但如果有人像我一样偶然发现这些问题,我建议使用 150 dpi 的 PNG 图像。我可以根据我对 TCPDF 的个人经验来这么说。我通常被要求制作带有背景图像的文档,并且 PNG-150dpi 非常适合。你得到一个更大的文件,但在我的情况下,打印质量更重要,所以文件大小不是问题。

于 2015-06-25T05:15:35.010 回答