java - jPDFWriter 库,将表格写入 pdf 文件
问题描述
有谁知道如何使用 jPDFWriter 库(在 java 中)将包含行和列的表写入 pdf 文件。我不想使用常用的 IText 库,因为它不是免费的。
如果您可以举一个例子或参考这种用法,那将会很有帮助。我在网上找不到任何东西。
解决方案
import com.qoppa.pdfWriter.PDFPrinterJob;
import javax.swing.*;
import java.awt.*;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.util.Vector;
public class PrintPanelToPDF implements Printable
{
public static void main (String [] args)
{
try
{
// create a PDF Printer Job
PDFPrinterJob printer = (PDFPrinterJob)PDFPrinterJob.getPrinterJob();
// set the printable object
printer.setPrintable (new PrintPanelToPDF());
// set number of copies to 1
printer.setCopies (1);
// print and save the document
printer.print("out.pdf");
// output done message
System.out.println("Done!");
}
catch (Throwable t)
{
t.printStackTrace();
}
}
public JTable createJTable(){
Vector<String> rowOne = new Vector<String>();
rowOne.addElement("Row1-Column1");
rowOne.addElement("Row1-Column2");
rowOne.addElement("Row1-Column3");
Vector<String> rowTwo = new Vector<String>();
rowTwo.addElement("Row2-Column1");
rowTwo.addElement("Row2-Column2");
rowTwo.addElement("Row2-Column3");
Vector<String> columnNames = new Vector<String>();
columnNames.addElement("Column One");
columnNames.addElement("Column Two");
columnNames.addElement("Column Three");
Vector<Vector> rowData = new Vector<Vector>();
rowData.addElement(rowOne);
rowData.addElement(rowTwo);
JTable table = new JTable(rowData, columnNames);
table.setVisible(true);
table.setSize(600, 500);
//table.setLocation(0,200);
table.setBounds(30,40,600,600);
return table;
}
public int print (Graphics g, PageFormat pf, int pageIndex)
{
if (pageIndex == 0)
{
// translate the graphics for margins
g.translate(0, 0);
// create a panel with a label and a textfield
JPanel myPanel = new javax.swing.JPanel();
myPanel.setName("myPanel");
myPanel.setBorder(new javax.swing.border.EtchedBorder());
myPanel.setBounds(new java.awt.Rectangle(0, 0, 612, 792));
// create a label
JLabel myLabel = new JLabel("MyLabel");
myLabel.setText("Label");
myLabel.setLocation(10, 10);
myLabel.setSize(50, 20);
myLabel.setVisible(true);
// add label to panel
myPanel.add(myLabel);
// create a text field
JTextField myTextField = new JTextField();
myTextField.setText("My Text");
myTextField.setLocation(65, 10);
myTextField.setSize(50, 20);
myTextField.setVisible(true);
// add text field to panel
myPanel.add(myTextField);
myPanel.add(createJTable());
// you can add any swing component here
// .....
// revalidate and repaint the panel
myPanel.revalidate();
myPanel.repaint();
// print the panel to the graphics on page 0
myPanel.print (g);
return Printable.PAGE_EXISTS;
}
else
{
return Printable.NO_SUCH_PAGE;
}
}
推荐阅读
- c# - 不能将 int 类型隐式转换为“字符串”
- apache - 在服务器上部署 Nuxtjs
- java - while循环有问题
- javascript - 如何从多个复选框列表中获取选定的复选框项目
- python - Pandas - 删除列索引的标签
- c# - 在 Ado.net C# 中动态构建 Where 子句
- mysql - SQL - 总和每行中的前 N 个值
- javascript - 在 WooCommerce MyAccount 中显示自定义成功消息
- microsoft-graph-api - MS Graph 示例应用程序集成测试不起作用
- django - 在 Django 中向序列化程序添加另一个类