网安测试-pdf预览

77 阅读1分钟

blog.csdn.net/pjlcl/artic…

blog.csdn.net/lhl10254626… 解决办法: 1.禁止pdf预览 2.把pdf转成图片然后预览

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.27</version> <!-- 请根据需要选择最新版本 -->
</dependency>
package com.zzyt.web.util;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.rendering.PDFRenderer;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class PdfXssChecker {

    public static byte[] convertPdfToImagesAndBack(byte[] inputPdfBytes) {
        ByteArrayOutputStream outputPdfStream = new ByteArrayOutputStream();


        try (PDDocument document = PDDocument.load(new ByteArrayInputStream(inputPdfBytes))) {
            PDFRenderer pdfRenderer = new PDFRenderer(document);

            Document doc = new Document();
        
            PdfWriter.getInstance(doc, outputPdfStream);

            doc.open();

            int dpi = 300; // 设置DPI为300以获得高质量的图像

            for (int page = 0; page < document.getNumberOfPages(); ++page) {
                PDPage pdPage = document.getPage(page);
                PDRectangle pageSize = pdPage.getCropBox().createRetranslatedRectangle();

                BufferedImage bim = pdfRenderer.renderImageWithDPI(page, dpi); // 渲染每一页到BufferedImage对象

                // 创建一个新的Document页面,使其与原始PDF页面相同
                doc.setPageSize(new com.itextpdf.text.Rectangle(pageSize.getWidth(), pageSize.getHeight()));
                doc.newPage();

                Image img = Image.getInstance(bim, null);
                img.scaleAbsolute(pageSize.getWidth(), pageSize.getHeight());
                img.setAbsolutePosition(0, 0);
                doc.add(img);
            }

            doc.close();
        } catch (IOException | DocumentException e) {
            e.printStackTrace();
        }

        return outputPdfStream.toByteArray();
    }
}