SWT 浏览器小部件不再显示来自本地文件系统的 PDF
SWT Browser widget no longer displaying PDFs from local filesystem
我一直在我的 RCP 应用程序中使用 SWT 浏览器小部件来显示生成的文档(主要是 PDF)。
最近,小部件停止显示 PDF。仅显示深灰色背景。加载较大的文件时会有明显的延迟,但结果始终相同。
它仍然会显示其他文件类型,例如 TXT、XML、PNG、HTML,没有问题。所有文件都在用户的临时文件夹中 (Windows)。因此,这似乎不是访问问题。
我一直在将应用程序从 Kepler 迁移到 2020/3,所以我猜平台中发生了一些变化。另一方面,该公司一直在从 IE 转向 Chrome 作为其标准浏览器,但我认为这不应该成为问题。
我安装了 FF、IE 和 Chrome (Windows10),每个都可以显示 PDF。
我是否需要在浏览器或类似软件中明确注册 PDF 插件?
我使用这个视图进行交互式测试:
package testbrowserpdf;
import java.io.File;
import java.net.MalformedURLException;
import javax.inject.Inject;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.part.ViewPart;
public class View extends ViewPart {
public View() {
}
public static final String ID = "TestBrowserPdf.view";
@Inject
IWorkbench workbench;
private Browser browser;
@Override
public void createPartControl(final Composite parent) {
parent.setLayout(new GridLayout(1, false));
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
composite.setLayout(new GridLayout(2, false));
Label lblPath = new Label(composite, SWT.NONE);
lblPath.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
lblPath.setText("Choose file...");
Button btn = new Button(composite, SWT.PUSH);
btn.setText("...");
btn.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
FileDialog dialog = new FileDialog (parent.getShell(), SWT.OPEN);
String file = dialog.open();
if(file != null) {
File f = new File(file);
try {
lblPath.setText(f.getAbsolutePath());
browser.setUrl(f.toURI().toURL().toString());
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
}
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
});
browser = new Browser(parent, 0);
browser.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
}
@Override
public void setFocus() {
browser.setFocus();
}
}```
这似乎是一个临时问题(正如@korogui 所建议的)。现在是 7 月 21 日,嵌入式 PDF 查看器又开始工作了。
我一直在我的 RCP 应用程序中使用 SWT 浏览器小部件来显示生成的文档(主要是 PDF)。
最近,小部件停止显示 PDF。仅显示深灰色背景。加载较大的文件时会有明显的延迟,但结果始终相同。
它仍然会显示其他文件类型,例如 TXT、XML、PNG、HTML,没有问题。所有文件都在用户的临时文件夹中 (Windows)。因此,这似乎不是访问问题。
我一直在将应用程序从 Kepler 迁移到 2020/3,所以我猜平台中发生了一些变化。另一方面,该公司一直在从 IE 转向 Chrome 作为其标准浏览器,但我认为这不应该成为问题。
我安装了 FF、IE 和 Chrome (Windows10),每个都可以显示 PDF。
我是否需要在浏览器或类似软件中明确注册 PDF 插件?
我使用这个视图进行交互式测试:
package testbrowserpdf;
import java.io.File;
import java.net.MalformedURLException;
import javax.inject.Inject;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.part.ViewPart;
public class View extends ViewPart {
public View() {
}
public static final String ID = "TestBrowserPdf.view";
@Inject
IWorkbench workbench;
private Browser browser;
@Override
public void createPartControl(final Composite parent) {
parent.setLayout(new GridLayout(1, false));
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
composite.setLayout(new GridLayout(2, false));
Label lblPath = new Label(composite, SWT.NONE);
lblPath.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
lblPath.setText("Choose file...");
Button btn = new Button(composite, SWT.PUSH);
btn.setText("...");
btn.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
FileDialog dialog = new FileDialog (parent.getShell(), SWT.OPEN);
String file = dialog.open();
if(file != null) {
File f = new File(file);
try {
lblPath.setText(f.getAbsolutePath());
browser.setUrl(f.toURI().toURL().toString());
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
}
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
});
browser = new Browser(parent, 0);
browser.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
}
@Override
public void setFocus() {
browser.setFocus();
}
}```
这似乎是一个临时问题(正如@korogui 所建议的)。现在是 7 月 21 日,嵌入式 PDF 查看器又开始工作了。