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

问题描述:

我正在寻找一种方法来将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.