我正在尝试使用 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);
}
}
如果您想使用 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 库添加到您的项目中才能使用此代码。