pdfBox 在读取 pdf 文件时忽略颜色

问题描述 投票:0回答:1

我正在尝试使用 pdfbox 读取模板文件并对其进行编辑。但 pdfbox 会忽略带有背景颜色的文本

这是我尝试过的简单代码。

public static void main(String[] args) {
        try {
            File file = ResourceUtils.getFile("classpath:templates/documents/employee_certificate_template.pdf");
            PDDocument doc =  new PDDocument().load(file);
            doc.save(new File("/home/salim/Documents/jekt-front/public/templates", "form-two-templates.pdf"));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

orginal-file resulted-file

java pdfbox
1个回答
0
投票

如果您想使用 Apache PDFBox 编辑 PDF 文档并保留其视觉外观,则需要使用页面的内容流。以下是如何向现有 PDF 添加一些文本,同时保留其内容(包括背景颜色)的基本示例:

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.font.PDType1Font;

import java.io.File;
import java.io.IOException;

public class EditPDFWithPDFBox {
    public static void main(String[] args) {
        try {
            // Load the existing PDF document
            File inputFile = new File("input.pdf");
            PDDocument document = PDDocument.load(inputFile);

            // Access the first page (you may need to loop through pages)
            PDPage firstPage = document.getPage(0);

            // Create a content stream for adding new content
            PDPageContentStream contentStream = new PDPageContentStream(document, firstPage, PDPageContentStream.AppendMode.APPEND, true);

            // Set the font and font size
            contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);

            // Set the position for the new text
            float x = 100; // X-coordinate
            float y = 600; // Y-coordinate (PDF coordinates start from the bottom-left corner)

            // Add the new text with a background color
            contentStream.setNonStrokingColor(255, 255, 0); // Yellow background
            contentStream.fillRect(x, y - 12, 200, 16); // Rectangle for background
            contentStream.setNonStrokingColor(0, 0, 0); // Black text
            contentStream.beginText();
            contentStream.newLineAtOffset(x + 5, y); // Adjust the offset
            contentStream.showText("New Text with Background");
            contentStream.endText();

            // Close the content stream
            contentStream.close();

            // Save the modified PDF to a new file
            File outputFile = new File("output.pdf");
            document.save(outputFile);

            // Close the PDF document
            document.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在此示例中,我们加载现有的 PDF 文档,访问其第一页,创建用于添加新内容的内容流,然后添加黄色背景的文本。最后,我们将修改后的 PDF 保存到一个新文件中。

请确保您已将 Apache PDFBox 库添加到您的项目中才能使用此代码。

© www.soinside.com 2019 - 2024. All rights reserved.