`
sillycat
  • 浏览: 2542413 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

PDF to HTML 2020(1)pdftohtml Linux tool or PDFBox

    博客分类:
  • JAVA
 
阅读更多
PDF to HTML 2020(1)pdftohtml Linux tool or PDFBox

On Ubuntu
> sudo apt-get install pdftohtml

Or

> sudo apt-get install poppler-utils

Try the command
> pdftohtml homedepot.pdf homedepot.html -c -noframes

> pdftohtml -enc UTF-8 -noframes homedepot.pdf homedepot.html

> pdftohtml -enc UTF-8 -noframes -c homedepot.pdf homedepot.html

It looks ok, but I will try other packages.

Try this library
https://pdfbox.apache.org/2.0/getting-started.html
Command line
https://pdfbox.apache.org/2.0/commandline.html

Directly convert to image and html src the image.
package com.cloudsnap.connector.netsuite;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;

import javax.imageio.ImageIO;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;

public class PDFImageApp {

    public static void main(String[] args) {
        PdfToImage("/Users/hluo/data/homedepot.pdf");
    }

    public static void PdfToImage(String pdfurl) {
        StringBuffer buffer = new StringBuffer();
        FileOutputStream fos;
        PDDocument document;
        File pdfFile;
        int size;
        BufferedImage image;
        FileOutputStream out;
        Long randStr = 0l;
        // PDF转换成HTML保存的文件夹
        String path = "/Users/hluo/data/";
        File htmlsDir = new File(path);
        if (!htmlsDir.exists()) {
            htmlsDir.mkdirs();
        }
        File htmlDir = new File(path + "/");
        if (!htmlDir.exists()) {
            htmlDir.mkdirs();
        }
        try {
            // 遍历处理pdf附件
            randStr = System.currentTimeMillis();
            buffer.append("<!doctype html>\r\n");
            buffer.append("<head>\r\n");
            buffer.append("<meta charset=\"UTF-8\">\r\n");
            buffer.append("</head>\r\n");
            buffer.append("<body style=\"background-color:gray;\">\r\n");
            buffer.append("<style>\r\n");
            buffer.append(
                    "img {background-color:#fff; text-align:center; width:100%; max-width:100%;margin-top:6px;}\r\n");
            buffer.append("</style>\r\n");
            document = new PDDocument();
            // pdf附件
            pdfFile = new File(pdfurl);
            document = PDDocument.load(pdfFile, (String) null);
            size = document.getNumberOfPages();
            Long start = System.currentTimeMillis(), end = null;
            System.out.println("===>pdf : " + pdfFile.getName() + " , size : " + size);
            PDFRenderer reader = new PDFRenderer(document);
            for (int i = 0; i < size; i++) {
                // image = new PDFRenderer(document).renderImageWithDPI(i,130,ImageType.RGB);
                image = reader.renderImage(i, 1.5f);
                // 生成图片,保存位置
                out = new FileOutputStream(path + "/" + "image" + "_" + i + ".jpg");
                ImageIO.write(image, "png", out); // 使用png的清晰度
                // 将图片路径追加到网页文件里
                buffer.append("<img src=\"" + path + "/" + "image" + "_" + i + ".jpg\"/>\r\n");
                image = null;
                out.flush();
                out.close();
            }
            reader = null;
            document.close();
            buffer.append("</body>\r\n");
            buffer.append("</html>");
            end = System.currentTimeMillis() - start;
            System.out.println("===> Reading pdf times: " + (end / 1000));
            start = end = null;
            // 生成网页文件
            fos = new FileOutputStream(path + randStr + ".html");
            System.out.println(path + randStr + ".html");
            fos.write(buffer.toString().getBytes());
            fos.flush();
            fos.close();
            buffer.setLength(0);

        } catch (Exception e) {
            System.out.println("===>Reader parse pdf to jpg error : " + e.getMessage());
            e.printStackTrace();
        }
    }

}

Get the Images and Text Separately
package com.cloudsnap.connector.netsuite;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.imageio.ImageIO;

import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
import org.apache.pdfbox.pdmodel.PDDocumentInformation;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageTree;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.graphics.PDXObject;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDDocumentOutline;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem;
import org.apache.pdfbox.text.PDFTextStripper;

public class PDFApp {

    /**
     * 获取格式化后的时间信息
     *
     * @param calendar 时间信息
     * @return
     */
    public static String dateFormat(Calendar calendar) {
        if (null == calendar)
            return null;
        String date = null;
        String pattern = "yyyy-MM-dd HH:mm:ss";
        SimpleDateFormat format = new SimpleDateFormat(pattern);
        date = format.format(calendar.getTime());
        return date == null ? "" : date;
    }

    /** 打印纲要 **/
    public static void getPDFOutline(String file) {
        try {
            // 打开pdf文件流
            FileInputStream fis = new FileInputStream(file);
            // 加载 pdf 文档,获取PDDocument文档对象
            PDDocument document = PDDocument.load(fis);
            // 获取PDDocumentCatalog文档目录对象
            PDDocumentCatalog catalog = document.getDocumentCatalog();
            // 获取PDDocumentOutline文档纲要对象
            PDDocumentOutline outline = catalog.getDocumentOutline();
            // 获取第一个纲要条目(标题1)
            PDOutlineItem item = outline.getFirstChild();
            if (outline != null) {
                // 遍历每一个标题1
                while (item != null) {
                    // 打印标题1的文本
                    System.out.println("Item:" + item.getTitle());
                    // 获取标题1下的第一个子标题(标题2)
                    PDOutlineItem child = item.getFirstChild();
                    // 遍历每一个标题2
                    while (child != null) {
                        // 打印标题2的文本
                        System.out.println("    Child:" + child.getTitle());
                        // 指向下一个标题2
                        child = child.getNextSibling();
                    }
                    // 指向下一个标题1
                    item = item.getNextSibling();
                }
            }
            // 关闭输入流
            document.close();
            fis.close();
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    /** 打印一级目录 **/
    public static void getPDFCatalog(String file) {
        try {
            // 打开pdf文件流
            FileInputStream fis = new FileInputStream(file);
            // 加载 pdf 文档,获取PDDocument文档对象
            PDDocument document = PDDocument.load(fis);
            // 获取PDDocumentCatalog文档目录对象
            PDDocumentCatalog catalog = document.getDocumentCatalog();
            // 获取PDDocumentOutline文档纲要对象
            PDDocumentOutline outline = catalog.getDocumentOutline();
            // 获取第一个纲要条目(标题1)
            if (outline != null) {
                PDOutlineItem item = outline.getFirstChild();
                // 遍历每一个标题1
                while (item != null) {
                    // 打印标题1的文本
                    System.out.println("Item:" + item.getTitle());
                    // 指向下一个标题1
                    item = item.getNextSibling();
                }
            }
            // 关闭输入流
            document.close();
            fis.close();
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    /** 获取PDF文档元数据 **/
    public static void getPDFInformation(String file) {
        try {
            // 打开pdf文件流
            FileInputStream fis = new FileInputStream(file);
            // 加载 pdf 文档,获取PDDocument文档对象
            PDDocument document = PDDocument.load(fis);
            /** 文档属性信息 **/
            PDDocumentInformation info = document.getDocumentInformation();

            System.out.println("页数:" + document.getNumberOfPages());

            System.out.println("标题:" + info.getTitle());
            System.out.println("主题:" + info.getSubject());
            System.out.println("作者:" + info.getAuthor());
            System.out.println("关键字:" + info.getKeywords());

            System.out.println("应用程序:" + info.getCreator());
            System.out.println("pdf 制作程序:" + info.getProducer());

            System.out.println("Trapped:" + info.getTrapped());

            System.out.println("创建时间:" + dateFormat(info.getCreationDate()));
            System.out.println("修改时间:" + dateFormat(info.getModificationDate()));

            // 关闭输入流
            document.close();
            fis.close();
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    /**
     * 提取部分PDF文本转HTML
     *
     * @param file      pdf文档路径
     * @param startPage 开始页数
     * @param endPage   结束页数
     * @param htmlFile  保存文件路径
     */
    public void getText(String pdfFile, int startPage, int endPage, String htmlFile) throws Exception {

        // 是否排序
        boolean sort = true;
        // hpd文件路径
        // String pdfFile = "D:\\PDF\\" + file;
        // 编码方式
        String encoding = "UTF-8";
        // 开始提取页数
        // int startPage = 1;
        // 结束提取页数,最大
        // int endPage = Integer.MAX_VALUE;

        // 文件输入流,生成文本文件
        Writer output = null;
        // 内存中存储的PDF Document
        PDDocument document = null;

        String result = null;
        try {
            PDDocument doc = PDDocument.load(new File(pdfFile));
            result = new PDFTextStripper().getText(doc);
            // 文件输入流,写入HTML文件
            output = new OutputStreamWriter(new FileOutputStream(htmlFile), encoding);

            output.write(
                    "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\"> \r\n");
            output.write("<html> \r\n");
            output.write("<head> \r\n");
            output.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"> \r\n");
            output.write("</head> \r\n");
            output.write("<body> \r\n");
            output.write("<center>");
            output.write(result);
            // 调用PDFTextStripper的writeText提取并输出文本
            // stripper.writeText(document, output);
            output.write("</center>");
            output.write("</body> \r\n");
            output.write("</html> \r\n");
        } finally {
            if (output != null) {
                // 关闭输出流
                output.close();
            }
            if (document != null) {
                // 关闭PDF Document
                document.close();
            }
        }
    }

    /**
     * 提取PDF图片并保存
     *
     * @param file        PDF文档路径
     * @param imgSavePath 图片保存路径
     * @throws IOException
     */
    public void getImage(String pdfFile, String imgSavePath) throws IOException {
        PDDocument document = PDDocument.load(new File(pdfFile));
        PDPageTree list = document.getPages();
        for (PDPage page : list) {
            PDResources pdResources = page.getResources();
            for (COSName c : pdResources.getXObjectNames()) {
                PDXObject o = pdResources.getXObject(c);
                if (o instanceof org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject) {
                    File file = new File(imgSavePath + System.nanoTime() + ".png");
                    ImageIO.write(((org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject) o).getImage(), "png",
                            file);
                }
            }
        }
    }

    public static void main(String[] args) {
        PDFApp pth = new PDFApp();
        String pdfFile = "/Users/hluo/data/homedepot.pdf";
        long startTime = System.currentTimeMillis();
        try {
            pth.getText(pdfFile, 1, Integer.MAX_VALUE, "/Users/hluo/data/homedepot.html");
            pth.getImage(pdfFile, "/Users/hluo/data/");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        long endTime = System.currentTimeMillis();
        System.out.println("读写所用时间为:" + (endTime - startTime) + "ms    " + pdfFile + "转换完成");
    }

}




References:
https://stackoverflow.com/questions/8370014/how-to-convert-pdf-to-html
https://blog.csdn.net/qq_34719291/article/details/75589024
https://blog.csdn.net/Warren_one/article/details/78625546
https://stackoverflow.com/questions/23813727/how-to-extract-text-from-a-pdf-file-with-apache-pdfbox

分享到:
评论

相关推荐

    PDF转HTML文件用到的pdfbox文件的jar包

    PDFBox是Apache软件基金会的一个开源项目,专门用于处理PDF文档的Java库。它提供了一系列API,使得开发人员能够创建、编辑、读取和转换PDF文件。在这个特定的场景中,我们关注的是PDFBox如何被用来将PDF转换为HTML...

    解决linux下pdfbox转中文pdf为图片的问题

    java用pdfbox转pdf为图片文件时,如果pdf有中文,则会出现乱码(windows下正常,linux下乱码),改用icepdf后问题解决,而且能够轻松设置欲转换成图片的格式和大小.icepdf对中文支付非常强大,以下是实例代码,可以...

    PDFBox pdf 转换为word文档

    1. **初始化PDFBox**: 加载PDF文档,这可以通过`PDDocument.load()`方法实现,传入PDF文件的路径。 2. **提取文本**: 使用`PDFTextStripper`类,调用`processDocument()`方法来提取PDF中的所有文本。 3. **保存文本*...

    pdfbox 提取 pdf 中 文字和图片 并 可转 html

    pdfbox 提取 pdf 中 文字和图片 并 可转 html 分2个文件,一个专门提取文本,内容可转为html,另一个文件专门用来提取图片,大家可自行整合为一个文件。使用pdfbox最新提取图片的方法。

    pdfbox 提取 pdf文件中的图片

    1.将一个PDF文档转换输出为一个文本文件。 2.可以从文本文件创建一个PDF文档。 3.加密/解密PDF文档。 4.向已有PDF文档中追加内容。 5.可以从PDF文档生成一张图片。 6.可以与Jakarta Lucene搜索引擎的整合。 这个小...

    pdfbox1.8.9实例图片转pdf和pdf转图片

    PDFBox是Apache软件基金会的一个开源项目,用于处理PDF文档。在这个实例中,我们关注的是PDFBox 1.8.9版本,它提供了处理PDF与图片相互转换的功能。PDFBox库在Java开发环境中非常实用,可以帮助开发者进行PDF文档的...

    Java 解析 PDF, pdfbox读取PDF内容

    Java作为一款跨平台的编程语言,提供了多种库来处理PDF文档,其中之一就是PDFBox。本文将深入探讨如何使用PDFBox库在Java中解析PDF并读取其内容。 PDFBox是Apache软件基金会的一个开源项目,它为Java开发者提供了一...

    java使用pdfbox打印PDF

    PDDocument document = PDDocument.load(new File("path_to_your_pdf.pdf")); ``` 3. 获取打印机名称:根据用户的选择或系统默认,获取打印机的名称。 ```java String printerName = "Your_Printer_Name"; ``...

    PDFBox PDF处理类库 v3.0.0 alpha2.zip

    PDFBox是Apache软件基金会的一个开源项目,专门用于处理PDF(Portable Document Format)文档的Java类库。这个压缩包“PDFBox PDF处理类库 v3.0.0 alpha2.zip”包含的是PDFBox的最新预发布版本,即v3.0.0的alpha2...

    C#使用PDFBox读取PDF

    1. 引入IKVM.NET和PDFBox的Java库。 2. 初始化Java虚拟机。 3. 加载PDF文件并创建`PDDocument`对象。 4. 使用`PDFTextStripper`提取PDF文本。 5. 将提取的文本保存为TXT文件。 6. 关闭`PDDocument`和Java虚拟机。 ...

    pdfbox和pdfrenderer所需包

    在这个压缩包中,包含了两个主要的Java库,用于将PDF文件转换为图像:PDFBox和PDFRenderer。 **PDFBox** 是Apache软件基金会的一个开源项目,它提供了对PDF文件的强大支持,包括读取、创建、编辑和转换PDF文档。...

    pdfbox 解析pdf里的图片和文字

    PDFBox是Apache软件基金会的一个开源项目,专门用于处理PDF文档的Java库。它提供了一系列强大的API,使得开发者能够轻松地读取、创建、修改和显示PDF文档中的内容。在这个场景中,我们将关注如何使用PDFBox解析PDF...

    PDFbox IcePdf pdf转图片

    在提供的jar包中,`PdfToImage`可能是一个示例程序,演示了如何使用PDFbox或IcePdf将PDF转换为图片。通过运行这个程序并根据需要调整代码,你可以轻松地将多页PDF转换为一系列的图片文件。 总结来说,PDFbox和...

    【Java】基于Pdfbox解析PDF文档中指定位置的文字和图片

    Apache PDFBox是一个开源Java库,支持PDF文档的开发和转换。 我们可以使用PDFBox开发可以创建,转换和操作PDF文档的Java程序。PDFBox的主要功能: Extract Text – 使用PDFBox,您可以从PDF文件中提取Unicode文本。 ...

    利用ITEXT、PDFBOX将PDF转为图片

    PDF转换为图片是一种常见的需求,特别是在处理PDF文档的可视化展示或者需要进行网页嵌入时。在Java编程环境中,我们可以利用ITEXT和PDFBOX这两个库来实现这个功能。这两个库都是处理PDF的强大工具,各有其特点和优势...

    pdfbox-2.0.8.jar,fontbox-2.0.8.jar,pdfbox-tools-2.0.8.jar

    PDFBox是Apache软件基金会开发的一个开源Java库,用于处理PDF(Portable Document Format)文档。这个库提供了丰富的API,使得开发者可以方便地创建、修改、读取和操作PDF文档。在这个压缩包中,我们找到了三个核心...

    轻松使用apache pdfbox将pdf文件生成图片.pdf

    Apache PDFBox是一个强大的Java库,专门用于处理PDF文档。它提供了丰富的API,允许开发者读取、创建、修改和渲染PDF文档。在这个特定的场景中,PDFBox被用来将PDF文件转换为图片,这对于报表开发或者需要将PDF内容...

    C# 使用PdfBox进行合并pdf

    merger.AddSource("path_to_pdf1.pdf"); merger.AddSource("path_to_pdf2.pdf"); // 以此类推,添加所有需要合并的PDF文件 ``` 3. **设置目标文件**:指定合并后PDF文件的输出路径。 ```csharp // 设置输出文件 ...

    pdfbox,生成pdf文件的缩略图

    PDFBox是Apache软件基金会开发的一个开源Java库,主要用于处理PDF文档。这个库提供了广泛的API,可以用来创建、编辑和读取PDF文档。在本场景中,我们关注的是PDFBox的一个特定功能:生成PDF文件的缩略图。这有助于在...

    PDFBox-2.0.19 for .Net | c#用PDFBox解析PDF

    pdfbox for .Net目前的最新版PDFBox-2.0.19 用法: 将压缩包内所有dll拷贝到项目编译目录, 在项目中引用 IKVM.OpenJDK.Core.dll IKVM.OpenJDK.SwingAWT.dll pdfbox-app-2.0.19.dll 在代码中引入命名空间using org....

Global site tag (gtag.js) - Google Analytics