我使用文件路径生成PDF文档,以创建名为test.PDF
的PDF文件。但是,我希望这样做,以便用户可以选择一个名称,并在PDF生成时使用此名称。我正在使用iText创建这样的PDF文件。
private String FILE = "e://test.PDF";
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(FILE));
document.open();
// add content
document.close();
如何更改此项以便使用最终用户选择的文件名保存文件?
答案 0 :(得分:1)
我已经写了这个概念证明,它正如预期的那样完全。运行时,会打开JFrame
:
JFrame
由JButton
组成,文字按下ATUL,推!当您点击此按钮时,会打开一个对话框:
我选择了一个文件夹(test
)并选择了一个文件名(test.pdf
)。然后,我点击保存。这是我的文件夹中显示的内容:
当我打开此文件时,我看到:
这是示例的完整代码:
/*
* Example written in answer to:
* http://stackoverflow.com/questions/35669782/
*/
package sandbox.objects;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
/**
* @author Bruno Lowagie (iText Software)
*/
public class PdfOnButtonClick {
public class PdfActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
JFileChooser dialog = new JFileChooser();
int dialogResult = dialog.showSaveDialog(null);
if (dialogResult==JFileChooser.APPROVE_OPTION){
String filePath = dialog.getSelectedFile().getPath();
try {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(filePath));
document.open();
document.add(new Paragraph("File with path " + filePath));
document.close();
}
catch(DocumentException de) {
de.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(300, 300);
frame.setTitle("ATUL doesn't know how to code");
frame.setResizable(true);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JButton button = new JButton("Push ATUL, push!");
button.addActionListener(new PdfOnButtonClick().new PdfActionListener());
frame.getContentPane().add(button);
frame.setVisible(true);
}
}