在 PDPushButton 中插入的图像在 pdf.js(Mozilla 浏览器)中不可见

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

使用 PDFBox 插入 PDPushButton 的图像在使用 Mozilla 浏览器 (pdf.js) 打开时不可见。虽然它在其他一些常见的渲染器中可见

PDPushButton pdPushButton = (PDPushButton) field;

List<PDAnnotationWidget> widgets = pdPushButton.getWidgets();
if (widgets != null && widgets.size() > 0) {
  PDAnnotationWidget annotationWidget = widgets.get(0); // just need one widget

String filePath = item.getValue();
  File imageFile = new File(filePath);

  if (imageFile.exists()) {
    PDImageXObject pdImageXObject = PDImageXObject.createFromFile(filePath, document);
    float imageScaleRatio = (float) pdImageXObject.getHeight() / (float) pdImageXObject.getWidth();

PDRectangle buttonPosition = getFieldArea(pdPushButton);
float height = buttonPosition.getHeight();
float width = height / imageScaleRatio;
float x = buttonPosition.getLowerLeftX();
float y = buttonPosition.getLowerLeftY();

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

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

pdAppearanceDictionary.setNormalAppearance(pdAppearanceStream);
System.out.println("Image '" + filePath + "' inserted");
field.setReadOnly(true);
  }
}

完整代码示例

插入前的PDF

插入后的PDF

插入后的 PDF(图像插入 PDTextField 而不是 PDPushButton)

提前致谢

java pdf pdfbox pdf.js
© www.soinside.com 2019 - 2024. All rights reserved.