这里获取 pageWidth.getUfe().getUnit() 为负数,为了兼容,我做了一个处理,如果为负数默认了一个图纸的大小 ,但是实际页面不一致导致有拉伸 ,这个怎么处理呢
private static final PageSize DEFAULT_PAGE_SIZE_1 = new PageSize(1);
private static final PageSize DEFAULT_PAGE_SIZE_9 = new PageSize(9);
Diagram dgrm = null;
try
{
dgrm = new Diagram(oriFilePath);
dgrm.removeHiddenInformation((int)(RemoveHiddenInfoItem.SHAPES | RemoveHiddenInfoItem.MASTERS));
String[] pageNames = new String[dgrm.getPages().getCount()];
for (int i = 0; i < dgrm.getPages().getCount(); i++)
{
pageNames[i] = dgrm.getPages().get(i).getName();
}
try
{
File[] sourcepngs = new File[dgrm.getPages().getCount()];
for (int i = 0; i < dgrm.getPages().getCount(); i++)
{
String pagename = filePrefix + File.separator + dgrm.getPages().get(i).getName()
.replace("/", "-")
.replace(" ", "")
+ ".png";
ImageSaveOptions options = new ImageSaveOptions(SaveFileFormat.PNG);
options.setResolution(300);
options.setImageColorMode(ImageColorMode.NONE);
options.setPageIndex(i);
final Page page = dgrm.getPages().get(i);
final DoubleValue pageWidth = page.getPageSheet().getPageProps().getPageWidth();
final DoubleValue pageHeight = page.getPageSheet().getPageProps().getPageHeight();
final double pageWidthD = pageWidth.getUfe().getUnit() * pageWidth.getValue();
final double pageHeightD = pageHeight.getUfe().getUnit() * pageHeight.getValue();
final float pageWidthF = (float)(pageWidthD);
final float pageHeightF = (float)((pageWidthF * pageHeightD) / pageWidthD);
PageSize pageSize = null;
if (pageWidthF <= 0 || pageHeightF <= 0)
{
pageSize = DEFAULT_PAGE_SIZE_1;
}
else if (pageWidthF * pageHeightF > Integer.MAX_VALUE)
{
// java.awt.image.SampleModel.SampleModel
pageSize = DEFAULT_PAGE_SIZE_1;
}
else
{
pageSize = new PageSize(pageWidthF, pageHeightF);
}
log.info("page={} {} {}", pagename, pageSize.getWidth(), pageSize.getHeight());
// 这里为啥要增加默认,由于上面的计算double转float 存在精度缺失,所以这里增加的默认的page大小
if (DEFAULT_PAGE_SIZE_1.getHeight() >= pageSize.getHeight() && DEFAULT_PAGE_SIZE_1.getWidth() >= pageSize.getWidth())
{
//log.info("use default 1");
pageSize = DEFAULT_PAGE_SIZE_1;
}
else if (DEFAULT_PAGE_SIZE_9.getHeight() >= pageSize.getHeight() && DEFAULT_PAGE_SIZE_9.getWidth() >= pageSize.getWidth())
{
//log.info("use default 9");
pageSize = DEFAULT_PAGE_SIZE_9;
}
//log.info("width {} {} f:{} d: {} just={}", pageWidth.getUfe().getUnit(), pageWidth.getValue(), (float) (1.0f * pageWidth.getUfe().getUnit() * pageWidth.getValue()), pageWidth.getUfe().getUnit() * pageWidth.getValue(), pageWidthF);
//log.info("height {} {} f:{} d:{} just={}", pageHeight.getUfe().getUnit(), pageHeight.getValue(), (float) (1.0f * pageHeight.getUfe().getUnit() * pageHeight.getValue()), pageHeight.getUfe().getUnit() * pageHeight.getValue(), pageHeightF);
options.setPageSize(pageSize);
dgrm.save(pagename, options);
}
}
catch (Exception e)
{
log.error("ConvertVisio convert error", e);
}