如前所述,我需要在jframe中显示PDF文档的所有页面,为此我使用org.apache.pdfbox.PDFReader如下:
import java.awt.*;
import java.lang.reflect.*;
import java.util.List;
import javax.swing.*;
import org.apache.pdfbox.PDFReader;
import org.apache.pdfbox.pdfviewer.PageWrapper;
import org.apache.pdfbox.pdmodel.PDPage;
public class CustomPDFReader extends PDFReader {
/**
*
*/
private static final long serialVersionUID = 678451510308887925L;
public CustomPDFReader() {
super();
}
public void setCurrentFile(String file) {
try {
Method m = getClass().getSuperclass().getDeclaredMethod("openPDFFile",
new Class<?>[]{String.class, String.class});
m.setAccessible(true);
m.invoke(this, file, null);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String []args) {
CustomPDFReader reader = new CustomPDFReader();
// remove menubar
JMenuBar menu = reader.getJMenuBar();
menu.setVisible(false);
JPanel header = new JPanel(new BorderLayout());
JPanel firstLine = new JPanel();
JLabel label = new JLabel("Label");
firstLine.add(label);
JPanel secondLine = new JPanel();
JTextField text = new JTextField();
text.setPreferredSize(new Dimension(100, 30));
secondLine.add(text);
JButton button = new JButton("Button");
button.setPreferredSize(new Dimension(100, 30));
secondLine.add(button);
header.add(firstLine, java.awt.BorderLayout.NORTH);
header.add(secondLine, java.awt.BorderLayout.SOUTH);
reader.getContentPane().add(header, java.awt.BorderLayout.NORTH);
// set default opened file
reader.setCurrentFile("test.pdf");
reader.showAllPages();
reader.setVisible(true);
}
private void showAllPages() {
try {
Field pages = getClass().getSuperclass().getDeclaredField("pages");
pages.setAccessible(true);
List<PDPage> pagesList = (List<PDPage>) pages.get(this);
Field documentPanel = getClass().getSuperclass().getDeclaredField("documentPanel");
documentPanel.setAccessible(true);
JPanel panel = (JPanel) documentPanel.get(this);
panel.remove(0);
GridLayout layout = new GridLayout(0, 1);
panel.setLayout(layout);
for(PDPage page : pagesList) {
PageWrapper wrapper = new PageWrapper(this);
wrapper.displayPage(page);
panel.add(wrapper.getPanel());
}
pack();
} catch(Exception e) {
e.printStackTrace();
}
}
}
PDFBox版本是1.8.10。你可以在那里找到样本项目
我正在使用pdfbox和easytablehttps://github.com/vandeseer/easytable用于创建动态页面,效果非常好。但我确实希望在所有页面中添加标题。我尝试过下面的事情。 1) Tablebuilder是在写入行之前创建的,因此我们可以创建一个完美的Tablebuilder,因为行是动态的。 2) 在创建tablebuilder时,试图在中间插入标题,但这也不是完美
问题内容: 我正在尝试通过AJAX调用显示PDF(在服务器端创建并作为网络流传递给客户端)。我的代码如下: “ inputxml”包含用于服务器创建PDF的输入参数。和成功函数中包含PDF流的“数据”。是否可以在AJAX调用成功功能内的浏览器中打开PDF文件,而无需进行任何页面提交?在服务器端,PDF也不是物理生成的。非常感谢您的帮助。 问题答案: 为什么要通过AJAX加载它?为什么不将其加载到需
我有一个带有ASP.NetWeb API的angular2项目。我有代码从我的数据库中检索到服务器上文档的文件路径。然后我想在浏览器的新选项卡中显示这个文档。有人有什么建议吗? 我很高兴在Angular2(Typescript)或我的API中检索文件并将其流式传输。 这是我尝试在我的API中检索它,但我不知道如何在Angular2中接收它并正确显示它: 任何帮助将不胜感激。 非常感谢!!!
请查一下我的代码。
我正在使用DynamicJasper API开发pdf报告。 根据要求,我必须在页眉和页脚显示一个徽标。我可以使用DynamicReportBuilder在标题处显示徽标。addImageBanner方法。但我没有找到在页脚添加图像的方法。 我在动态jasper论坛上看到了一些关于这个问题的帖子,其中提到的一个解决方法是使用pageFooter band创建一个jrxml模板。 我尝试了这个,但没
问题内容: 我的单元测试失败了,我不确定为什么。我希望能够看到在被测系统中发生的所有模拟调用。这并不是我始终希望所有测试都具有的行为,只是为了快速调整我的测试以找出问题所在。 但是,似乎有点像hack。 是否可以在Mockito中进行本机操作而无需使用? 这不是首选方法,因为堆栈跟踪包括Mockito内部使用的所有其他调用。 问题答案: 此功能自Mockito 1.9.5起内置。只需使用