将PDF转换为图像格式

Aspose.PDF for PHP 允许您将PDF文档转换为图像格式,如BMP、JPEG、GIF、PNG、EMF、TIFF和SVG,使用两种方法。转换是通过DeviceSaveOption完成的。

库中有几个类允许您使用虚拟设备来转换图像。DocumentDevice 适用于整个文档的转换,而ImageDevice 适用于特定页面。

使用DocumentDevice类转换PDF

Aspose.PDF for PHP 使得将PDF页面转换为TIFF图像成为可能。

TiffDevice类 允许您将PDF页面转换为TIFF图像。 这个类提供一个名为 Process 的方法,允许您将 PDF 文件中的所有页面转换为单个 TIFF 图像。

将 PDF 页面转换为一个 TIFF 图像

Aspose.PDF for PHP 解释了如何将 PDF 文件中的所有页面转换为单个 TIFF 图像:

  1. 创建一个 Document 类的对象。
  2. 调用 Process 方法来转换文档。
  3. 要设置输出文件的属性,请使用 TiffSettings 类。

以下代码片段展示了如何将所有 PDF 页面转换为单个 TIFF 图像。

// 加载 PDF 文档
$document = new Document($inputFile);

// 创建一个新的 TiffSettings 对象
$tiffSettings = new devices_TiffSettings();

// 取消注释以下行以自定义 TIFF 设置
// $tiffSettings->setCompression(devices_CompressionType::$NoneNone);
// $tiffSettings->setDepth(devices_ColorDepth::$DefaultDefault);
// $tiffSettings->setShape(devices_ShapeType::$Portrait);
// $tiffSettings->setSkipBlankPages(false);

// 设置 TIFF 图像的分辨率
$resolution = new devices_Resolution(300);

// 使用指定的分辨率和设置创建一个新的 TiffDevice 对象
$tiffDevice = new devices_TiffDevice($resolution, $tiffSettings);

// 使用 TiffDevice 将 PDF 文档转换为 TIFF
$tiffDevice->process($document, $outputFile);

将单页转换为 TIFF 图像

Aspose.PDF for PHP 允许将 PDF 文件中的特定页面转换为 TIFF 图像,使用 Process(..) 方法的重载版本,该版本将页码作为参数进行转换。以下代码片段显示了如何将 PDF 的第一页转换为 TIFF 格式。

// 加载 PDF 文档
$document = new Document($inputFile);

// 创建一个新的 TiffSettings 对象
$tiffSettings = new devices_TiffSettings();

// 取消注释以下行以自定义 TIFF 设置
// $tiffSettings->setCompression(devices_CompressionType::$NoneNone);
// $tiffSettings->setDepth(devices_ColorDepth::$DefaultDefault);
// $tiffSettings->setShape(devices_ShapeType::$Portrait);
// $tiffSettings->setSkipBlankPages(false);

// 设置 TIFF 图像的分辨率
$resolution = new devices_Resolution(300);

// 使用指定的分辨率和设置创建一个新的 TiffDevice 对象
$tiffDevice = new devices_TiffDevice($resolution, $tiffSettings);

// 使用 TiffDevice 将 PDF 文档转换为 TIFF
$tiffDevice->process($document, 1, 1, $outputFile);

在转换过程中使用Bradley算法

Aspose.PDF for PHP 已经支持使用 LZW 压缩将 PDF 转换为 TIFF,然后通过使用 AForge 可以应用二值化。然而,有一位客户要求对于某些图像,他们需要使用 Otsu 获取阈值,因此他们也希望使用 Bradley。

// 创建一个新的 TiffSettings 对象
$tiffSettings = new devices_TiffSettings();

// 取消注释以下行以自定义 TIFF 设置
// $tiffSettings->setCompression(devices_CompressionType::$NoneNone);
// $tiffSettings->setDepth(devices_ColorDepth::$DefaultDefault);
// $tiffSettings->setShape(devices_ShapeType::$Portrait);
// $tiffSettings->setSkipBlankPages(false);

$outputImageFile = new java("java.io.FileOutputStream", $outputImageFileName);
$outputBinImageFile = new java("java.io.FileOutputStream", $outputBinImageFileName);

// 设置 TIFF 图像的分辨率
$resolution = new devices_Resolution(300);

// 使用指定的分辨率和设置创建一个新的 TiffDevice 对象
$tiffDevice = new devices_TiffDevice($resolution, $tiffSettings);

// 使用 TiffDevice 将 PDF 文档转换为 TIFF
$tiffDevice->process($document, 1, 1, $outputFile);

// 创建流对象以保存输出图像
$inStream = new java("java.io.FileInputStream",$outputImageFileName);
$tiffDevice->binarizeBradley($inStream, $outputBinImageFile, 0.1);

将 PDF 页面转换为像素化的 TIFF 图像

要将 PDF 文件中的所有页面转换为像素化的 TIFF 格式,请使用 IndexedConversionType 的 Pixelated 选项

// 创建一个新的 TiffSettings 对象
$tiffSettings = new devices_TiffSettings();

// 取消注释以下行以自定义 TIFF 设置
// $tiffSettings->setCompression(devices_CompressionType::$NoneNone);
// $tiffSettings->setDepth(devices_ColorDepth::$DefaultDefault);
// $tiffSettings->setShape(devices_ShapeType::$Portrait);
// $tiffSettings->setSkipBlankPages(false);
// 设置图像亮度
$tiffSettings->setBrightness(0.5f);
// 设置 IndexedConversion 类型,默认值为 simple
$tiffSettings->setIndexedConversionType(IndexedConversionType::Pixelated);

$outputImageFile = new java("java.io.FileOutputStream", $outputImageFileName);
$outputBinImageFile = new java("java.io.FileOutputStream", $outputBinImageFileName);

// 设置 TIFF 图像的分辨率
$resolution = new devices_Resolution(300);

// 使用指定的分辨率和设置创建一个新的 TiffDevice 对象
$tiffDevice = new devices_TiffDevice($resolution, $tiffSettings);

// 使用 TiffDevice 将 PDF 文档转换为 TIFF
$tiffDevice->process($document, 1, 1, $outputFile);

// 创建流对象以保存输出图像
$inStream = new java("java.io.FileInputStream",$outputImageFileName);
$tiffDevice->binarizeBradley($inStream, $outputBinImageFile, 0.1);

使用 ImageDevice 类转换 PDF

ImageDeviceBmpDeviceJpegDeviceGifDevicePngDeviceEmfDevice 的祖先。

  • BmpDevice 类允许您将 PDF 页面转换为 BMP 图像。

  • EmfDevice 类允许您将 PDF 页面转换为 EMF 图像。

  • JpegDevice 类允许您将 PDF 页面转换为 JPEG 图像。

  • PngDevice 类允许您将 PDF 页面转换为 PNG 图像。

  • GifDevice 类允许您将 PDF 页面转换为 GIF 图像。

让我们看看如何将 PDF 页面转换为图像。

BmpDevice 类提供了一个名为 Process 的方法,该方法允许您将 PDF 文件的特定页面转换为 BMP 图像格式。其他类也有相同的方法。因此,如果我们需要将 PDF 页面转换为图像,我们只需实例化所需的类。

以下代码片段展示了这种可能性:

// 加载 PDF 文档
$document = new Document($inputFile);

// 获取文档中的页面集合
$pages = $document->getPages();

// 获取文档中的总页数
$count = $pages->size();

// 设置 PNG 图像的分辨率
$resolution = new devices_Resolution(300);

// 创建具有指定分辨率的新 PNG 设备
$imageDevice = new devices_PngDevice($resolution);

// 遍历文档中的每一页
for ($pageCount = 1; $pageCount <= $document->getPages()->size(); $pageCount++) {
    // 为当前页面设置输出图像文件名
    $imageFileName = $imageFileNameTemplate . $pageCount . '.png';

    // 从集合中获取当前页面
    $page = $document->getPages()->get_Item($pageCount);

    // 处理当前页面并将其保存为 PNG 图像
    $imageDevice->process($page, $imageFileName);
}

使用 SaveOptions 类转换 PDF

本文的这一部分向您展示如何使用 Java 和 SaveOptions 类将 PDF 转换为 SVG

可伸缩矢量图形 (SVG) 是基于 XML 的二维矢量图形文件格式的规范家族,包括静态和动态(交互式或动画)图形。SVG 规范是一个开放标准,自 1999 年以来由万维网联盟 (W3C) 开发。

SVG 图像及其行为在 XML 文本文件中定义。这意味着它们可以被搜索、索引、脚本化,并且在需要时可以被压缩。作为 XML 文件,SVG 图像可以用任何文本编辑器创建和编辑,但用 Inkscape 等绘图程序创建它们通常更方便。

将 PDF 页面转换为 SVG 图像

Aspose.PDF for PHP 支持将 PDF 文件转换为 SVG 格式的功能。 为了实现此要求,已将 SvgSaveOptions 类引入到 com.aspose.pdf 包中。实例化一个 SvgSaveOptions 对象,并将其作为第二个参数传递给 Document.save(..) 方法。

以下代码片段展示了将 PDF 文件转换为 SVG 格式的步骤。

// 加载 PDF 文档
$document = new Document($inputFile);

// 创建 SvgSaveOptions 类的实例
$saveOption = new SvgSaveOptions();

// 将 PDF 文档保存为 SVG
$document->save($outputFile, $saveOption);