Java-截取PDF中的某一页作为缩略图_java pdf 只显示前几页原理(1)

本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。

最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。

最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。

需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)

学习路线图

其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。

相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。

网络安全工具箱

当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。

项目实战

最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~

面试题

归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

如果本篇博客对您有一定的帮助,大家记得留言+点赞+收藏哦。


Apache PDFBox是一个开源Java库,支持PDF文档的开发和转换。

有以下中有功能 -

  • Extract Text - 使用PDFBox,您可以从PDF文件中提取Unicode文本。
  • Split & Merge - 使用PDFBox,您可以将单个PDF文件分成多个文件,并将它们合并为一个文件。
  • Fill Forms - 使用PDFBox,您可以在文档中填写表单数据。
  • Print - 使用PDFBox,您可以使用标准Java打印API打印PDF文件。
  • Save as Image - 使用PDFBox,您可以将PDF保存为图像文件,如PNG或JPEG。
  • Create PDFs - 使用PDFBox,您可以通过创建Java程序创建新的PDF文件,还可以包含图像和字体。
  • Signing - 使用PDFBox,您可以将数字签名添加到PDF文件。

有一个教程对PDFBox的介绍很详细,这里不再多说。

PDFBox - 快速指南_学习PDFbox|WIKI教程此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。. 此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。. 此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。. 此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。. 此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传https://iowiki.com/pdfbox/pdfbox_quick_guide.html


引入依赖

<!--start:PDF获取第一页的图片-->
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.20</version>
</dependency>
<!--end:PDF获取第一页的图片-->

业务代码

/**
 * 截取PDF中的某一页作为缩略图,并上传(保存)
 * @param pdfFileName
 * @return
 */
public  String PDFFramer(String pdfFileName){

    //将网络中的PDF文件转换成file
    File file = URLToFile(pdfFileName);
    //new File() 只能访问本地文件
    //将本地文件转换成file
    //File file = new File("C:\\Users\\Administrator\\Downloads\\(重要必看).pdf");

    String pdfUrl="";
    try
    {
        // 打开来源 pdf
        log.info("开始截取PDF:");
        //PDDocument类的load()方法用于加载现有PDF文档
        PDDocument pdfDocument = PDDocument.load(file);
        //PDFRenderer的类将PDF文档呈现为AWT BufferedImage 
        PDFRenderer pdfRenderer = new PDFRenderer(pdfDocument);

        // 提取的页码
        int pageNumber = 0;
        // 以300 dpi 读取存入 BufferedImage 对象
        int dpi = 300;
       //Renderer类的renderImage()方法在特定页面中渲染图像
        BufferedImage buffImage = pdfRenderer.renderImageWithDPI(pageNumber, dpi, ImageType.RGB);
        // 文件类型转换
        MultipartFile multipartFile = fileCase(buffImage);
        log.info("PDF开始上传:");
        pdfUrl = fileLoad(multipartFile);
        log.info("PDF上传成功:{}",pdfUrl);

        // 关闭文档
        pdfDocument.close();
        //删除临时文件
        String s = threadLocal.get();
        log.info("临时文件的目录:"+s);

        File f=new File(s);
        boolean delete = f.delete();
        log.info("文件是否删除"+delete);

    }
    catch (InvalidPasswordException e)
    {
        e.printStackTrace();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
    return pdfUrl;
}

读取网络中的PDF文件与文件类型转换

/**
 * 读取网络中的PDF文件
 * @param url
 * @return
 */
public  File URLToFile(String url){
    log.info("读取FastDFS上的PDF");
    //保存临时文件--jar包的相对位置
    File file1 = new File("Temporary.pdf");
    try {

        URL url1 = new URL(url);
        FileUtils.copyURLToFile(url1,file1);

    } catch (IOException e) {
        e.printStackTrace();


## 学习路线:

这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成黑客大神,这个方向越往后,需要学习和掌握的东西就会越来越多以下是网络渗透需要学习的内容:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/7a04c5d629f1415a9e35662316578e07.png#pic_center)



**需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)**

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java,如果要截取页面显示的部分,可以使用一些第三方库来模拟浏览器操作,如Selenium WebDriver和Headless Chrome。 首先,确保已经配置好浏览器驱动(如ChromeDriver)并将其路径设置为系统属性。 然后,可以使用以下代码片段来实现页面截图,包括未显示的部分: ```java import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.remote.DesiredCapabilities; import ru.yandex.qatools.ashot.AShot; import ru.yandex.qatools.ashot.Screenshot; import ru.yandex.qatools.ashot.shooting.ShootingStrategies; import javax.imageio.ImageIO; import java.io.File; import java.io.IOException; public class FullPageScreenshot { public static void main(String[] args) { // 设置浏览器驱动路径 System.setProperty("webdriver.chrome.driver", "path/to/chromedriver"); // 创建 ChromeOptions 实例 ChromeOptions options = new ChromeOptions(); options.addArguments("--headless"); // 设置为无界面模式,即后台运行 // 创建 DesiredCapabilities 实例 DesiredCapabilities capabilities = DesiredCapabilities.chrome(); capabilities.setCapability(ChromeOptions.CAPABILITY, options); // 创建 ChromeDriver 实例 WebDriver driver = new ChromeDriver(capabilities); // 最大化浏览器窗口 driver.manage().window().maximize(); // 打开页面 driver.get("https://example.com"); // 使用 JavaScript 获取页面高度 long pageHeight = (Long) ((JavascriptExecutor) driver).executeScript("return document.body.scrollHeight"); // 创建 AShot 实例 AShot ashot = new AShot(); // 设置截图选项,包括滚动条截图 ashot.shootingStrategy(ShootingStrategies.viewportPasting(1000).takeFullPage()); // 截取整个页面的截图,包括未显示的部分 Screenshot screenshot = ashot.takeScreenshot(driver); try { // 保存截图为文件 ImageIO.write(screenshot.getImage(), "PNG", new File("path/to/screenshot.png")); } catch (IOException e) { e.printStackTrace(); } // 关闭浏览器 driver.quit(); } } ``` 上述代码,首先设置了浏览器驱动路径,并创建了一个ChromeOptions实例,将其设置为无界面模式。然后,创建一个DesiredCapabilities实例,并将ChromeOptions添加到capabilities。 接着,创建一个ChromeDriver实例,并最大化浏览器窗口。通过`driver.get("https://example.com")`打开指定的页面。 使用JavaScript执行`document.body.scrollHeight`获取页面的高度。 创建AShot实例后,通过`ashot.shootingStrategy()`方法设置截图选项,其`ShootingStrategies.viewportPasting(1000).takeFullPage()`表示截取整个页面,包括未显示的部分。 最后,使用`ashot.takeScreenshot(driver)`进行页面截图,并将截图保存为文件。 记得将代码的路径替换为实际的路径,运行代码即可获得包括未显示部分的页面截图。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值