如何在没有转换异常的情况下使用 IText 添加表?
How to add tables using IText without casting exception?
我正在尝试将 table 添加到由 IText 生成的 pdf 文档,但是当我 运行 文件。我该如何解决?
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.*;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.IBlockElement;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.property.TextAlignment;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Font;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
...
PdfWriter writer = new PdfWriter(dest);
// Creating a PdfDocument
PdfDocument pdf = new PdfDocument(writer);
...
Document document = new Document(pdf);
PdfPTable p = new PdfPTable(5);
p.setWidthPercentage(100);
Font neg = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.BOLD, BaseColor.BLACK);
PdfPCell cell1 = new PdfPCell(new Phrase("Item", neg));
PdfPCell cell2 = new PdfPCell(new Phrase("Part No", neg));
PdfPCell cell3 = new PdfPCell(new Phrase("Unit Cost", neg));
PdfPCell cell4 = new PdfPCell(new Phrase("Qunatity", neg));
PdfPCell cell5 = new PdfPCell(new Phrase("Cost", neg));
p.addCell(cell1);
p.addCell(cell2);
p.addCell(cell3);
p.addCell(cell4);
p.addCell(cell5);
for(SparePart s :sp ){
p.addCell(s.getPartName());
p.addCell(s.getCode());
p.addCell(s.getPrice().toString());
p.addCell(Integer.toString(s.getQnty_Used()));
p.addCell(s.getTotalPrice().toString());
}
document.add((IBlockElement) p);
document.close();
但是当我 运行 文件时,我得到这个错误:
请注意,当我删除 'IBlockElement' 时出现编译时错误。(未找到 add(PdfPTable) 的 suitable 方法
方法 RootElement.add(IBlockElement) 不适用
(参数不匹配;PdfPTable 无法转换为 IBlockElement)
方法RootElement.add(图片)不适用...)
也供参考,这些是存储在我的 .pom 文件中的相应依赖项,不确定是否有 missing/conflicting 导致问题的原因
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>kernel</artifactId>
<version>7.0.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>io</artifactId>
<version>7.0.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>layout</artifactId>
<version>7.0.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>forms</artifactId>
<version>7.0.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>pdfa</artifactId>
<version>7.0.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>sign</artifactId>
<version>7.0.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>barcodes</artifactId>
<version>7.0.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>font-asian</artifactId>
<version>7.0.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>hyph</artifactId>
<version>7.0.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
您同时使用 iText5 和 iText7 类,请避免使用。
这就是在 iText7 中向文档添加 table 的方法:
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(outFileName));
Document doc = new Document(pdfDoc);
Table table = new Table(new float[]{50, 50})
.addCell(new Cell().add(new Paragraph("cell 1, 1")))
.addCell(new Cell().add(new Paragraph("cell 1, 2")));
doc.add(table);
doc.close();
这些是正确的 iText7 导入:
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
作为一项规则,在 iText7 中可以避免使用以 com.itextpdf.text.
开头的 类,因此应删除最后一个依赖项。
我正在尝试将 table 添加到由 IText 生成的 pdf 文档,但是当我 运行 文件。我该如何解决?
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.*;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.IBlockElement;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.property.TextAlignment;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Font;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
...
PdfWriter writer = new PdfWriter(dest);
// Creating a PdfDocument
PdfDocument pdf = new PdfDocument(writer);
...
Document document = new Document(pdf);
PdfPTable p = new PdfPTable(5);
p.setWidthPercentage(100);
Font neg = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.BOLD, BaseColor.BLACK);
PdfPCell cell1 = new PdfPCell(new Phrase("Item", neg));
PdfPCell cell2 = new PdfPCell(new Phrase("Part No", neg));
PdfPCell cell3 = new PdfPCell(new Phrase("Unit Cost", neg));
PdfPCell cell4 = new PdfPCell(new Phrase("Qunatity", neg));
PdfPCell cell5 = new PdfPCell(new Phrase("Cost", neg));
p.addCell(cell1);
p.addCell(cell2);
p.addCell(cell3);
p.addCell(cell4);
p.addCell(cell5);
for(SparePart s :sp ){
p.addCell(s.getPartName());
p.addCell(s.getCode());
p.addCell(s.getPrice().toString());
p.addCell(Integer.toString(s.getQnty_Used()));
p.addCell(s.getTotalPrice().toString());
}
document.add((IBlockElement) p);
document.close();
但是当我 运行 文件时,我得到这个错误:
请注意,当我删除 'IBlockElement' 时出现编译时错误。(未找到 add(PdfPTable) 的 suitable 方法 方法 RootElement.add(IBlockElement) 不适用 (参数不匹配;PdfPTable 无法转换为 IBlockElement) 方法RootElement.add(图片)不适用...)
也供参考,这些是存储在我的 .pom 文件中的相应依赖项,不确定是否有 missing/conflicting 导致问题的原因
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>kernel</artifactId>
<version>7.0.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>io</artifactId>
<version>7.0.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>layout</artifactId>
<version>7.0.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>forms</artifactId>
<version>7.0.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>pdfa</artifactId>
<version>7.0.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>sign</artifactId>
<version>7.0.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>barcodes</artifactId>
<version>7.0.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>font-asian</artifactId>
<version>7.0.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>hyph</artifactId>
<version>7.0.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
您同时使用 iText5 和 iText7 类,请避免使用。
这就是在 iText7 中向文档添加 table 的方法:
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(outFileName));
Document doc = new Document(pdfDoc);
Table table = new Table(new float[]{50, 50})
.addCell(new Cell().add(new Paragraph("cell 1, 1")))
.addCell(new Cell().add(new Paragraph("cell 1, 2")));
doc.add(table);
doc.close();
这些是正确的 iText7 导入:
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
作为一项规则,在 iText7 中可以避免使用以 com.itextpdf.text.
开头的 类,因此应删除最后一个依赖项。