彩票走势图

用C#、Java和PowerShell代码提取PDF中嵌入的图像

翻译|使用教程|编辑:何跃|2022-01-24 14:36:15.267|阅读 181 次

概述:PDF文件可以被用来存储文件、图像和其他数据。在过去,人们问是否有一个简单的方法从PDF文件中提取图形,如图表或照片。如果你想从一个PDF文件中获取所有的图像,或者有数百个或更多的PDF文件需要处理,那么答案就是使用LEADTOOLS。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

使用LEADTOOLS提取嵌入在PDF文件中的图像很容易。下面是使用LEADTOOLS从PDF文件中提取图像的C#、Java和PowerShell代码样本。

用C#代码提取嵌入PDF中的图像

/// <summary>
/// 提取PDF文档为TIFF
/// </summary>
/// <param name="pdfPath"></param>
private static void ExtractImagesFromPdf(string pdfPath)
{
    var destinationPath = Path.Combine(Path.GetDirectoryName(pdfPath), @"images\");
    var documentName = Path.GetFileNameWithoutExtension(pdfPath);

    using var pdfDocument = new PDFDocument(pdfPath);
    pdfDocument.ParsePages(PDFParsePagesOptions.Objects, 1, -1);

    foreach (var page in pdfDocument.Pages)
    {
        var embeddedImages = page.Objects.Where(o => o.ObjectType == PDFObjectType.Image).ToArray();
        using var codecs = new RasterCodecs();
        foreach (var imgObj in embeddedImages)
        {
            var  destinationFilePath = destinationPath + documentName + "~page-" + page.PageNumber + "~" + imgObj.ImageObjectNumber + ".tif";
            using var image = pdfDocument.DecodeImage(imgObj.ImageObjectNumber);
            codecs.Save(image, destinationFilePath, RasterImageFormat.TifLzw, image.BitsPerPixel, 1, 1, -1, CodecsSavePageMode.Append);
        }
    }
}

用Java代码提取嵌入PDF中的图像

/**
* 提取PDF文件并另存为到子目录
* e.g. getFileName("c:\\temp\\") will return "c:\\temp\\images\\"
*
*
* @param pdfPath
*/
private static void extractImagesFromPdf(String pdfPath) {
    final String destinationFolder = getOutputFolder(pdfPath);
    final String documentName = getBaseName(getFileName(pdfPath));
    final PDFDocument pdfDocument = new PDFDocument(pdfPath);
    pdfDocument.parsePages(PDFParsePagesOptions.OBJECTS.getValue(), 1, -1);
    final RasterCodecs codecs = new RasterCodecs();
    try {
        final List<PDFDocumentPage> pages = pdfDocument.getPages();
        for (PDFDocumentPage page : pages) {
            final int pageNumber = page.getPageNumber();
            for (final PDFObject object : page.getObjects()) {
                if (object.getObjectType() == PDFObjectType.IMAGE) {
                    final String imageObjectNumber = object.getImageObjectNumber();
                    final String destinationFilePath = destinationFolder + documentName + "~page-" + pageNumber + "~"
                            + imageObjectNumber + ".tif";
                    final RasterImage image = pdfDocument.decodeImage(imageObjectNumber);
                    try {
                        codecs.save(image, destinationFilePath, RasterImageFormat.TIFLZW, image.getBitsPerPixel(),
                                1, 1, -1, CodecsSavePageMode.OVERWRITE);
                    } finally {
                        image.dispose();
                    }
                }
            }
        }
    } finally {
        codecs.dispose();
    }
}

用PowerShell代码提取嵌入PDF中的图像

function Export-LtImagesFromPdf {
    <#
    .SYNOPSIS
        Exports images embedded in a PDF file

    .DESCRIPTION
        Exports images embedded in a PDF file

    .PARAMETER PdfPath
        File path to the PDF file that has embedded images to be exported

    .PARAMETER Path
        Folder path to export the embedded images

    .EXAMPLE
        Export-LtImagesFromPdf -PdfPath "c:\temp\a.pdf" -Path "c:\temp\images\"

    .INPUTS
        String

    .OUTPUTS
        void

    .NOTES
        Author:  LEAD Technologies, Inc.
        Website: //www.leadtools.com
        Twitter: @leadtools
    #>
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$PdfPath,

        [Parameter(Mandatory)]
        [string]$Path
    )

    if( -not(Test-Path -Path $PdfPath -PathType Leaf) ) {
        Write-Error "File does not exist."
        return $false
    }

    if( -not(Test-Path -Path $Path -PathType Container) ) {
        New-Item -Path $Path -ItemType Directory
    }

    $baseFileName = (Get-Item $PdfPath).Basename

    $pdfDocument = New-Object -TypeName Leadtools.Pdf.PDFDocument -ArgumentList $PdfPath
    $pdfDocument.ParsePages(1, 1, -1)

    ForEach ($page in $pdfDocument.Pages){
        ForEach($object in $page.Objects){
            if( $object.ObjectType -eq [Leadtools.Pdf.PDFObjectType]::Image ){
                $imageObjectNumber = $object.ImageObjectNumber
                $pageNumber = $page.PageNumber
                $image = $pdfDocument.DecodeImage($imageObjectNumber)
                $outputFilePath = (Join-Path -Path $Path -ChildPath ($baseFileName + "~page#-" + $pageNumber + "~" + $imageObjectNumber + ".tif"))
                Export-LTImage -RasterImage $image -Path $outputFilePath -Format ([Leadtools.RasterImageFormat]::Tif)
            }
        }
    }
}

有了LEADTOOLS的工具包,就没有什么是你不能做的PDF文件了。点击这里可以下载Leadtools全套SDK


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP