Java 如何使用PDFBox将图标导入PDF中的按钮字段?
我正在寻找一种将PDF文件中按钮字段的正常外观设置为图像文件的方法,但找不到有关此过程的任何信息 我能找到的最接近的是相反的,即如何将图标从按钮字段提取到独立图像文件,如下所示: 我更愿意使用PDFBox完成此任务Java 如何使用PDFBox将图标导入PDF中的按钮字段?,java,pdf,pdfbox,Java,Pdf,Pdfbox,我正在寻找一种将PDF文件中按钮字段的正常外观设置为图像文件的方法,但找不到有关此过程的任何信息 我能找到的最接近的是相反的,即如何将图标从按钮字段提取到独立图像文件,如下所示: 我更愿意使用PDFBox完成此任务 非常感谢您的帮助。您可以使用PDFBox创建具有图像外观的按钮,如下所示: try ( InputStream resource = getClass().getResourceAsStream("2x2colored.png"); PDDocument docu
非常感谢您的帮助。您可以使用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"));
}
try(InputStream resource=getClass().getResourceAsStream(“2x2colored.png”);
PDDocument文档=新PDDocument()
{
BuffereImage BuffereImage=ImageIO.read(资源);
PDImageXObject PDImageXObject=LosslessFactory.createFromImage(文档,缓冲区图像);
float width=10*pdImageXObject.getWidth();
浮动高度=10*pdImageXObject.getHeight();
PDAppearanceStream PDAppearanceStream=新的PDAppearanceStream(文档);
setResources(新的PDResources());
try(PDPageContentStream PDPageContentStream=newpdpagecontentstream(document,pdAppearanceStream))
{
drawImage(pdImageXObject,0,0,宽度,高度);
}
pdAppearanceStream.setbox(新的PDRectangle(宽度、高度));
PDPage page=新的PDPage(PD矩形.A4);
文件。添加页(第页);
PDAcroForm acroForm=新的PDAcroForm(文件);
document.getDocumentCatalog().setAcroForm(acroForm);
PDButton PDButton=新的PDButton(acroForm);
PDButton.setPartialName(“ImageButton”);
List widgets=pdputton.getWidgets();
用于(PDAnnotationWidget PDAnnotationWidget:widgets)
{
setRectangle(新的PDRectangle(50750,宽度,高度));
pdAnnotationWidget.setPage(第页);
page.getAnnotations().add(pdAnnotationWidget);
PDAppearanceDictionary PDAppearanceDictionary=pdAnnotationWidget.getAppearance();
如果(pdAppearanceDictionary==null)
{
pdAppearanceDictionary=新的pdAppearanceDictionary();
设置外观(pdAppearanceDictionary);
}
pdAppearanceDictionary.setNormalAppearance(pdAppearanceStream);
}
acroForm.getFields().add(PDButton);
保存(新文件(RESULT_文件夹,“imageButton.pdf”);
}
(测试testcreatesimplemagebutton
)
由于您没有提到任何版本要求,我假设您指的是当前的PDFBOX2.0.x