java - 如何使用 PDFBox 将图标导入 PDF 中的按钮字段?

标签 java pdf pdfbox

我正在寻找一种方法将 PDF 文件中按钮字段的正常外观设置为图像文件,但没有找到有关此过程的任何信息。

我能找到的最接近的是相反的,即如何将图标从按钮字段提取到独立的图像文件,此处:How can i extract image from button icon in PDF using Apache PDFBox?

我更愿意使用 PDFBox 来完成此任务。

非常感谢任何帮助。

最佳答案

您可以使用 PDFBox 创建具有图像外观的按钮,如下所示:

try (   InputStream resource = getClass().getResourceAsStream("2x2colored.png");
        PDDocument document = new PDDocument()  )
{
    BufferedImage bufferedImage = ImageIO.read(resource);
    PDImageXObject pdImageXObject = LosslessFactory.createFromImage(document, bufferedImage);
    float width = 10 * pdImageXObject.getWidth();
    float height = 10 * pdImageXObject.getHeight();

    PDAppearanceStream pdAppearanceStream = new PDAppearanceStream(document);
    pdAppearanceStream.setResources(new PDResources());
    try (PDPageContentStream pdPageContentStream = new PDPageContentStream(document, pdAppearanceStream))
    {
        pdPageContentStream.drawImage(pdImageXObject, 0, 0, width, height);
    }
    pdAppearanceStream.setBBox(new PDRectangle(width, height));

    PDPage page = new PDPage(PDRectangle.A4);
    document.addPage(page);

    PDAcroForm acroForm = new PDAcroForm(document);
    document.getDocumentCatalog().setAcroForm(acroForm);

    PDPushButton pdPushButton = new PDPushButton(acroForm);
    pdPushButton.setPartialName("ImageButton");
    List<PDAnnotationWidget> widgets = pdPushButton.getWidgets();
    for (PDAnnotationWidget pdAnnotationWidget : widgets)
    {
        pdAnnotationWidget.setRectangle(new PDRectangle(50, 750, width, height));
        pdAnnotationWidget.setPage(page);
        page.getAnnotations().add(pdAnnotationWidget);

        PDAppearanceDictionary pdAppearanceDictionary = pdAnnotationWidget.getAppearance();
        if (pdAppearanceDictionary == null)
        {
            pdAppearanceDictionary = new PDAppearanceDictionary();
            pdAnnotationWidget.setAppearance(pdAppearanceDictionary);
        }

        pdAppearanceDictionary.setNormalAppearance(pdAppearanceStream);
    }

    acroForm.getFields().add(pdPushButton);

    document.save(new File(RESULT_FOLDER, "imageButton.pdf"));
}

( CreateImageButton.java 测试 testCreateSimpleImageButton)

由于您没有提到任何版本要求,我假设您指的是当前的 PDFBox 2.0.x。

关于java - 如何使用 PDFBox 将图标导入 PDF 中的按钮字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39958843/

相关文章:

pdf - PDF 的 BitsPerComponent 如何转换为图像的每像素位数?

ios - 在特定日期显示特定文件的建议逻辑

java - 如何使用 pdfbox 或其他 java 库减小合并后的 PDF/A-1b 文件的大小

java - PdfBox 编码符号货币欧元

java - 如何在Java中将两个PDF文件合并为一个?

java - 静态ArrayList不会在另一个类中修改

java - Android Eddystone广播数据太大

java - 是否有类似 DefaultMqttPahoClientFactory 的东西用于创建异步客户端?

java - Amazon 是否提供低成本云存储后门,用于通过 Google App Engine 等 Servlet 提供文件?

pdf - 无法从 pdf 复制确切的印地语内容