我正在编写一个程序,使用iText生成带有表格的pdf或rtf文件.我使用iText类表和单元格,而不是更具体的RtfTable或pdfTable,以便最后生成任一文件.我需要将单元格填充设置为值-1,否则打印页面上每行数据之间的空间太大.但是,我现在正在尝试添加边框(特别是pdf文件),并且单元格没有与文本对齐.每个单元格的底部边框直接切割文本.当单元格填充设置为2或更高时,它实际上仅包围文本.以下是我正在做的事情的示例:
Document document = new Document();
Paragraph paragraph = new Paragraph();
Font iTextFont = new Font(Font.TIMES_ROMAN, 9, Font.NORMAL);
try{
PdfWriter.getInstance(document, new FileOutputStream("C:/datafiles/TestiText.pdf"));
document.open();
Table table = new Table(3);
table.setPadding(-1);
table.setWidth(90);
Cell cell1 = new Cell();
cell1.setBorder(Rectangle.BOX);
cell1.setVerticalAlignment(ElementTags.ALIGN_TOP);
table.setDefaultCell(cell1);
paragraph = new Paragraph("header", iTextFont);
Cell cell = new Cell(paragraph);
cell.setHeader(true);
cell.setColspan(3);
table.addCell(cell);
paragraph = new Paragraph("example cell", iTextFont);
table.addCell(paragraph);
paragraph = new Paragraph("one", iTextFont);
table.addCell(cell);
paragraph = new Paragraph("two", iTextFont);
cell = new Cell(paragraph);
table.addCell(paragraph);
paragraph = new Paragraph("Does this start …Run Code Online (Sandbox Code Playgroud) 我需要查看所有订单的家庭.我根本不关心订单的数据,只是它存在.(使用SQL Server)
说这样的话更有效率:
SELECT HouseholdID, LastName, FirstName, Phone
FROM Households
INNER JOIN Orders ON Orders.HouseholdID = Households.HouseholdID
Run Code Online (Sandbox Code Playgroud)
或这个:
SELECT HouseholdID, LastName, FirstName, Phone
FROM Households
WHERE EXISTS
(SELECT HouseholdID
FROM Orders
WHERE Orders.HouseholdID = Households.HouseholdID)
Run Code Online (Sandbox Code Playgroud) 我正在使用iText将图像输出到PDF文件.图像总是看起来比它们应该的大.根据这本书(iText in Action),这是因为iText总是以72 dpi的分辨率显示图像,而不管图像的实际dpi属性是什么.本书建议使用image.getDpiX()来查找图像的dpi,然后使用image.scalePercent(72/actualDpi*100)正确显示图像.到目前为止,我所有图像的getDpiX()属性都返回0(我已经尝试了2个GIF和1个jpg).有没有其他方法可以找出实际的DPI,以便我的图像正确缩放?
com.lowagie.text.Image graphic = com.lowagie.text.Image.getInstance(imgPath);
float actualDpi = graphic.getDpiX();
if (actualDpi > 0)
//Never gets here
graphic.scalePercent(72f / actualDpi * 100);
Run Code Online (Sandbox Code Playgroud) 我正在编写生成PDF和RTF文档的代码,具体取决于用户的选择.两份文件中的信息是相同的.
到目前为止,我们使用的是Table,Cell,HeaderFooter等类,它们由文档编写者(PdfWriter或RtfWriter2)呈现为正确的形式.
然而,我进一步尝试进行更改(主要是因为升级到iText 2.1使间距有点古怪),我被告知"使用PdfpTable"或"使用pageEvents设置标题"越多.似乎很多泛型类都被弃用了.
我正在考虑修改代码以分离PDF和RTF的表创建.但是,所有iText教程似乎都建议在需要PDF和RTF文档的实例中使用Table.
另外,看起来虽然有一个PdfpTable类,但RTF没有类似的东西,所以我还是会使用Table,这会让我容易受到现在不支持的Table类所带来的所有怪癖的影响.
基本上,将代码分成两个部分的好处/缺点是什么 - 一个用于创建PDF文档,另一个用于以RTF格式创建相同的文档(如果已选择)?SimpleTable在哪里可以实现这一切?它会给我我需要的灵活性吗?
谢谢!
我是VB的新手(实际上是使用VBA),我想强迫事件发生.具体来说,我正在更新文本框中的值,我想调用该文本框的AfterUpdate()事件.
Private Sub cmdCreateInvoice_Click()
Me.txtInvDate = '11/01/10'
Me.txtInvDate.AfterUpdate
End Sub
Run Code Online (Sandbox Code Playgroud)
在运行时,我收到一条错误,上面写着"编译错误:无效使用属性".如果我尝试类似的东西,但使用click事件(例如:cmdCreateInvoice.Click),它没有共享名称的属性,我收到一条错误,上面写着"编译错误:找不到方法或数据成员".
我知道必须有办法从另一个事件中解雇一个事件.但是正确的语法是什么?谢谢!
这两段代码之间是否存在性能差异?我的直觉是第二个选项比较慢,因为每次必须构建Cell对象,但我喜欢返回Cell的想法.
方案一:
//Call to method
initiTextDefaultCell(borders);
iTextTable.setDefaultCell(iTextDefaultCell);
//Other code...
private void initiTextDefaultCell(boolean borders) {
if (!borders)
iTextDefaultCell.setBorder(Rectangle.NO_BORDER);
else
iTextDefaultCell.setBorder(Rectangle.BOX);
}
Run Code Online (Sandbox Code Playgroud)
方案二:
//Call to method
iTextTable.setDefaultCell(initiTextDefaultCell(borders));
//Other code...
private Cell initiTextDefaultCell(boolean borders) {
Cell iTextDefaultCell = new Cell();
if (!borders)
iTextDefaultCell.setBorder(Rectangle.NO_BORDER);
else
iTextDefaultCell.setBorder(Rectangle.BOX);
return iTextDefaultCell;
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
itext ×3
java ×3
border ×1
image ×1
join ×1
performance ×1
spacing ×1
sql ×1
sql-server ×1
vba ×1