学习Qoppa jPDFProcess的科学实践(十二)

Qoppa
placeholder image
admin 发布于:2025-06-12 16:14:46
阅读:loading

Qoppa Software是一家专注于PDF处理和数字文档解决方案的公司,提供丰富的Java、.NET和Web平台的组件。其产品广泛应用于企业、ZF*、金融、医疗等行业,旨在简化PDF和数字文档的处理、管理和集成。特别说明:只为单纯的学习摸索与自我突破,商业软件请勿直接使用于生产环境(购买商业授权)

1.基本介绍

jPDFProcess – 用于创建、操作 PDF 的 Java PDF 库,jPDFProcess 是一个用于创建和操作 PDF 文档的 Java 库,可用于向用户提供自定义 PDF 内容或处理传入的 PDF 内容。该库具有简单的 PDF 文档处理界面,旨在轻松无缝地集成到您的 PDF 文档工作流程中。

jPDFProcess 提供了我们许多其他库中的功能,包括打印、设置权限和安全性、创建和组装文档、数字签名、处理表单字段、转换为图像、提取文本等。

该库可以处理来自文件、URL 和输入流的 PDF 文档,并可以将文档保存到文件和输出流中,因此它可以将文档从 J2EE 应用程序直接提供给客户端浏览器,而无需任何临时文件。

jPDFProcess 建立在 Qoppa 专有的 PDF 技术之上,因此无需任何外部 PDF 软件(例如 Adobe® PDF 库、Adobe Acrobat® Professional 或 Ghostscript)。由于它采用 Java 编写,因此您的应用程序能够独立于平台,在 Windows、Linux、Unix(Solaris、HP UX、IBM AIX)、Mac OS X 以及任何其他支持 Java 运行时环境的平台上运行。

2.组件介绍

  • 创建 PDF 文档

  • 组装文件(拆分、合并、组合、删除页面)

  • 使用 RC4 或 AES 加密对文档进行加密,设置密码和权限

  • 应用并验证数字签名

  • 导入、导出和填写交互式表单数据

  • 将文档转换为 TIFF、JPEG、PNG 图像

  • 提取文本内容

  • 打印 PDF 文档

  • 将 PDF 转换为图像

  • 永久编辑 PDF

  • 可选OCR模块

  • 添加文件附件、页眉和页脚、水印、书签

  • 编辑文档属性,例如标题、关键字、主题

  • 将 PDF 文档线性化以便在网络上快速查看

  • 创建 PDF 图层并在其上绘图

  • 适用于 Windows、Linux、Unix、Mac OS X(100% Java)

  • 可部署在各种环境中(J2EE、ESB服务器)

3.代码示例

public class SampleExtractText {

    public static void main(String[] args) throws Exception {
        QoppaRegister.registerJPDFProcess();

        PDFDocument document = null;
        try {
            document = new PDFDocument("resources/input/hello.pdf" , null);
            final String text = document.getText(1);
            System.out.println(text);
        } finally {
            if (document != null) {
                document.close();
            }
        }

    }

}

image.png

(输出某一页的文本内容)

public class SampleCreatePdf {

    public static void main(String[] args) throws Exception {
        QoppaRegister.registerJPDFProcess();

        PDFDocument document = null;
        try {
            document = new PDFDocument();
            final DocumentInfo documentInfo = document.getDocumentInfo();
            documentInfo.setProducer("cn.unrivaled");
            PDFPage page = document.appendNewPage(8.5 * 72 , 11 * 72);
            final PDFGraphics graphics = (PDFGraphics) page.createGraphics();
            graphics.setFont(PDFGraphics.HELVETICA.deriveFont(24f));
            graphics.setColor(Color.BLUE);
            graphics.drawString("Hello 文本" , 100 , 100);

            BufferedImage image = ImageIO.read(new File("resources/input/hello.jpg"));
            graphics.drawImage(image , 0 , 200 , null);

            document.saveDocument("resources/output/jPDFProcess_HelloWorld.pdf");
            document.saveDocumentAsTIFF(Files.newOutputStream(Paths.get("resources/output/jPDFProcess_HelloWorld.tiff")),
                    new TIFFOptions(150 , TIFFOptions.TIFF_FAX_GROUP4));

            graphics.dispose();
        } finally {
            if (document != null) {
                document.close();
            }
        }

    }

image.png


(创建PDF,含文本和图片)

public class SampleWatermark {

    public static void main(String[] args) throws Exception {
        QoppaRegister.registerJPDFProcess();

        PDFDocument document = null;
        try {
            document = new PDFDocument("resources/input/hello.pdf" , null);
            for (int i = 0; i < document.getPageCount(); i++) {
                PDFPage page = document.getPage(i);
                if (i > 2) {
                    break;
                }
                final Graphics2D graphics = page.createGraphics();
                graphics.setColor(Color.BLUE);
                graphics.setFont(new Font("宋体" , Font.BOLD , 22));
                graphics.translate(72 , 72 + graphics.getFontMetrics().getAscent());
                graphics.rotate(Math.toRadians(45));
                graphics.drawString("Hello 水印" , 100 , 100);
            }
            document.saveDocument("resources/output/jPDFProcess_Watermark.pdf");
            document.saveDocumentAsTIFF(Files.newOutputStream(Paths.get("resources/output/jPDFProcess_Watermark.tiff")),
                    new TIFFOptions(150 , TIFFOptions.TIFF_FAX_GROUP4));
        } finally {
            if (document != null) {
                document.close();
            }
        }

    }

}

jPDFProcess-含水印.gif

(科学前输出图片:TIF)

4.示例说明

(1)示例使用了jPDFProcess操作PDF文档的示例,提取PDF内容、创建PDF文档、增加页面水印;

(2)示例中演示了未科学使用时输出PDF转换为图片就有文档水印;

(3)示例中演示了科学使用后设输出PDF转换为图片没有文档水印;

(4)示例执行后生成的TIF图片和对应PDF两种格式文档;

(5)代码片段1的示例执行后提取PDF文档中第2页文本内容;

(6)代码片段2的示例执行后生成PDF文档包含文本和图片;

(7)代码片段3的示例执行后生成PDF文档只在前3页中增加了水印,后续页面未增加水印;

5.其它说明

(1)Qoppa Software推出了15款Java集成开发组件库,,除此之外的其它组件在生成/转换为PDF文档时,应该需要处理文档属性中的“制作工具”

(2)更多的组件需要使用License注册,使用试用版本将会有对应的试用提示信息,比如插入文字水印、图片中被插入水印、内容中被插入DEMO字样的文本,所以科学使用的目的在于单纯使用对应的工具库,不需额外关注License,又不改动Jar文件中的class,同时又恰好没有水印和文本混乱的限制。特别说明:只为单纯的学习摸索与自我突破,商业软件请勿直接使用于生产环境(购买商业授权)

(3)官网提供了对应各个组件的示例代码和组件库的Jar文件下载,未找到有试用Maven库管理组件的形式,需要自行下载相关的组件;

(4)官网的某些页面资料中也有说明还包含上述产品组件范围之外的其它组件,如:OCR等,没有找到详细的示例使用介绍,不作为本次学习摸索的重点;

(5)官网提供的试用组件的Jar文件中的class有经过加密混淆,从class部分入门则难道比较高,本次对于系列组件的摸索在于科学使用方面,对于组件提供的功能广度与深度应用不作过多的摸索;

(6)对各个组件学习摸索的时间并不算太多,发现这么多组件应该不能同时作用于同一个项目中,因为它们不同的组件Jar中提供的class类文件路径存在同名或同类的,存在互相冲突的场景,不知道是否有说明白,以jPDFWriter与jPDFWeb两个组件Jar的截图如下: 

image

(7)相关示例输出文件下载:《jPDFProcess.zip》;

(8)尽可能的通过API来设置文档属性中的创建者、制作工具等信息(第1个代码给出了对应的API,但是附件上传时生成的附件并未设置对应的制作工具,可以查看默认生成的文档制作工具为“Qoppa PDF SDK jPDFProcess v2022R1.30”);


 点赞


 发表评论

当前回复:作者

 评论列表


留言区