Apache POI - Excel 中的水印 - Excel 和 LibreOffice 中的不同外观
Apache POI - watermark in Excel - different appearence in Excel and LibreOffice
我按照sample添加图片水印如下:
private void addWaterMark4AllSheets() {
final BufferedImage image = FontImage.createWatermarkImage();
// Export to byte stream B
final ByteArrayOutputStream os = new ByteArrayOutputStream();
try {
ImageIO.write(image, "png", os);
} catch (final IOException e) {
e.printStackTrace();
}
final XSSFWorkbook wb = (XSSFWorkbook) workBook;
final int pictureIdx = wb.addPicture(os.toByteArray(), Workbook.PICTURE_TYPE_PNG);
final POIXMLDocumentPart poixmlDocumentPart = wb.getAllPictures().get(pictureIdx);
// ((XSSFSheet )(schreiben.getSheet()).
for (int i = 0; i < workBook.getNumberOfSheets(); i++) {// Get each Sheet
final XSSFSheet sheet = wb.getSheetAt(i);
final PackagePartName ppn = poixmlDocumentPart.getPackagePart().getPartName();
final String relType = XSSFRelation.IMAGES.getRelation();
// add relation from sheet to the picture data
final PackageRelationship pr = sheet.getPackagePart().addRelationship(ppn, TargetMode.INTERNAL, relType,
null);
// set background picture to sheet
sheet.getCTWorksheet().addNewPicture().setId(pr.getId());
}
}
总的来说,这种方法效果很好。 Excel 中添加了一张图片。但外观不同
- 在Excel中:图像在编辑(sheets)期间显示在背景中。但是当我打印 sheet.
时它没有显示
- 在 LibreOffice (7.1) 中:图像在编辑(sheet)期间不显示 - 但打印出来。
是否有机会修复它以在两个 Spreadsheet 中工作?
没有什么 apache poi
可以改变,因为这种行为是在不同的 spreadsheet 软件中设计的。
您的链接代码示例不会创建水印。水印功能在 Microsoft Excel 中不可用。相反,它将背景图片添加到 sheets.
Microsoft 自己声明:You cannot print a background graphic for a Excel worksheet。因此,使用 Microsoft Excel,sheet 的背景图形仅在 Excel GUI 中可见,但在印刷品中不可见。
在 LibreOffice 中,这些背景图形称为水印,但 Libreoffice 在 Defining Graphics or Colors in the Background of Pages (Watermark) 中声明:
In spreadsheets this background appears only in the print behind the
cells not formatted elsewhere.
因此,使用 Libreoffice,sheet 的背景图形仅在印刷品中可见。
所以您所观察到的是设计使然。
在Add or remove a sheet background Microsoft describes methods to mimic a watermark in Excel. The usage of a picture in a header or footer to mimic a watermark using apache poi
is described in 。但这也意味着打印水印。因此水印仅在打印预览和打印中可见。它在 sheet 的 GUI 中不可见。在页眉或页脚中添加图片以模仿水印的选项仅 Excel。 LibreOffice 不提供该功能。
结论:
不可能有类似于在 Excel 和 LibreOffice 中以相同方式工作的水印的功能。
我按照sample添加图片水印如下:
private void addWaterMark4AllSheets() {
final BufferedImage image = FontImage.createWatermarkImage();
// Export to byte stream B
final ByteArrayOutputStream os = new ByteArrayOutputStream();
try {
ImageIO.write(image, "png", os);
} catch (final IOException e) {
e.printStackTrace();
}
final XSSFWorkbook wb = (XSSFWorkbook) workBook;
final int pictureIdx = wb.addPicture(os.toByteArray(), Workbook.PICTURE_TYPE_PNG);
final POIXMLDocumentPart poixmlDocumentPart = wb.getAllPictures().get(pictureIdx);
// ((XSSFSheet )(schreiben.getSheet()).
for (int i = 0; i < workBook.getNumberOfSheets(); i++) {// Get each Sheet
final XSSFSheet sheet = wb.getSheetAt(i);
final PackagePartName ppn = poixmlDocumentPart.getPackagePart().getPartName();
final String relType = XSSFRelation.IMAGES.getRelation();
// add relation from sheet to the picture data
final PackageRelationship pr = sheet.getPackagePart().addRelationship(ppn, TargetMode.INTERNAL, relType,
null);
// set background picture to sheet
sheet.getCTWorksheet().addNewPicture().setId(pr.getId());
}
}
总的来说,这种方法效果很好。 Excel 中添加了一张图片。但外观不同
- 在Excel中:图像在编辑(sheets)期间显示在背景中。但是当我打印 sheet. 时它没有显示
- 在 LibreOffice (7.1) 中:图像在编辑(sheet)期间不显示 - 但打印出来。
是否有机会修复它以在两个 Spreadsheet 中工作?
没有什么 apache poi
可以改变,因为这种行为是在不同的 spreadsheet 软件中设计的。
您的链接代码示例不会创建水印。水印功能在 Microsoft Excel 中不可用。相反,它将背景图片添加到 sheets.
Microsoft 自己声明:You cannot print a background graphic for a Excel worksheet。因此,使用 Microsoft Excel,sheet 的背景图形仅在 Excel GUI 中可见,但在印刷品中不可见。
在 LibreOffice 中,这些背景图形称为水印,但 Libreoffice 在 Defining Graphics or Colors in the Background of Pages (Watermark) 中声明:
In spreadsheets this background appears only in the print behind the cells not formatted elsewhere.
因此,使用 Libreoffice,sheet 的背景图形仅在印刷品中可见。
所以您所观察到的是设计使然。
在Add or remove a sheet background Microsoft describes methods to mimic a watermark in Excel. The usage of a picture in a header or footer to mimic a watermark using apache poi
is described in
结论:
不可能有类似于在 Excel 和 LibreOffice 中以相同方式工作的水印的功能。