您好,非常感谢您的查看。
已有PDF文件插入表格,如何将表格定位到当前PDF的右上角。
以下是我的代码,感谢您的回复。
// 加载源PDF文档
Aspose.Pdf.Document doc = new Aspose.Pdf.Document(dataDir);
// 初始化表的新实例
Aspose.Pdf.Table table = new Aspose.Pdf.Table();
// 将表格边框颜色设置为浅灰色
table.Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Red));
// 设置表格单元格的边框
table.DefaultCellBorder = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Red));
// 使用表的列宽设置
table.ColumnWidths = "50 50 50";
// 创建MarginInfo对象并设置其左、下、右和上边距
Aspose.Pdf.MarginInfo margin = new Aspose.Pdf.MarginInfo();
margin.Top = 1f;
margin.Left = 1f;
margin.Right = 1f;
margin.Bottom = 1f;
//将默认单元格填充设置为MarginInfo对象
table.DefaultCellPadding = margin;
// 创建循环以添加10行
for (int row_count = 0; row_count < 2; row_count++)
{
// 将行添加到表
Aspose.Pdf.Row row = table.Rows.Add();
for (int i = 0; i < 3; i++)
{
row.Cells.Add($"Column{row_count}, {i})");
}
}
// 将表对象添加到输入文档的第一页
doc.Pages[1].Paragraphs.Add(table);
dataDir = dataDir + "document_with_table_out.pdf";
// 保存包含表对象的更新文档
doc.Save(dataDir);
@fhn123456
您能否在此处附上您的输入、输出和预期输出 PDF 文件以进行测试? 我们将调查该问题并向您提供相关信息。
输入文件:input.pdf (44.5 KB)
输出文件:savefile.pdf (52.3 KB)
您好,这是我提供的输入文件和输出文件。
1,想把表格水印放在PDF第一页的右上角。
2,表格里面的文字都是红色的,表格也是红色的。
非常感谢您支持。谢谢。
@fhn123456
请使用以下代码片段来获得所需的输出。
table.Alignment = HorizontalAlignment.Right;
table.Top = 15f;
table.Left = 825f;
非常感谢您的回复。
但是我向表格里写入数据,中文乱码,如何指定字体如:宋体,如何解决。
输入路径:input.pdf (44.5 KB)
输出路径:document_with_table_out.pdf (152.3 KB)
错误截图:360截图165307089284134.jpg (23.7 KB)
实现代码:
string[] sqlData = {
$"46;2020年;1",
$"运输;10年;页码"
};
string dataDir = @"E:\桌面\PDF表格添加\file.pdf";
// 加载源PDF文档
Aspose.Pdf.Document doc = new Aspose.Pdf.Document(filePath);
// 初始化表的新实例
Aspose.Pdf.Table table = new Aspose.Pdf.Table();
// 将表格边框颜色设置为浅灰色
table.Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Red));
// 设置表格单元格的边框
table.DefaultCellBorder = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Red));
// 使用表的列宽设置
table.ColumnWidths = "60 60 60";
// 创建MarginInfo对象并设置其左、下、右和上边距
Aspose.Pdf.MarginInfo margin = new Aspose.Pdf.MarginInfo();
margin.Top = 5f;
margin.Left = 5f;
margin.Right = 5f;
margin.Bottom = 5f;
////将默认单元格填充设置为MarginInfo对象
table.DefaultCellPadding = margin;
// 创建循环以添加10行
for (int row_count = 0; row_count < 2; row_count++)
{
// 将行添加到表
Aspose.Pdf.Row row = table.Rows.Add();
string[] rowData = sqlData[row_count].Split(';');
for (int i = 0; i < rowData.Length; i++)
{
row.Cells.Add($"{rowData[i]}", new TextState(System.Drawing.Color.Red));
}
}
double pageWhile = doc.Pages[1].GetPageRect(false).Width;
//右上角
table.Alignment = HorizontalAlignment.Right;
table.Top = 15f;
table.Left = (float)pageWhile / 2;
// 将表对象添加到输入文档的第一页
doc.Pages[1].Paragraphs.Add(table);
string datasave = fSSettingsData.fSFileSave + "\\document_with_table_out.pdf";
// 保存包含表对象的更新文档
doc.Save(datasave);
@fhn123456
请设置如下所示的文本字体。 还请确保在您生成 PDF 的系统上必须安装相同的字体。
for (int i = 0; i < rowData.Length; i++)
{
TextState ts = new TextState(System.Drawing.Color.Red);
ts.Font = FontRepository.FindFont("SimSun");
row.Cells.Add($"{rowData[i]}", ts);
}
非常感谢您的帮助,这正是我想实现的效果。
我还有几个问题需要向您请教。
1,我的windows 11 安装了了宋体库,当我ts.Font = FontRepository.FindFont(“宋体”);
却告诉我Font 宋体 was not found。
360截图176807306510889.jpg (62.8 KB)
TextState ts = new TextState(System.Drawing.Color.Red);
ts.Font = FontRepository.FindFont(“宋体”);
row.Cells.Add($"{rowData[i]}", ts);
2,以下代码通过计算,可以实现table定位到想要的位置,有没有API直接调用,不用计算位置,让table直接定位到右上角。
//右上角
table.Alignment = HorizontalAlignment.Right;
table.Top = 30f;
table.Left = (float)pageWhile / 2;
3, table.ColumnWidths = “60 60 60”; 这段代码形参60 60 60 分别代表什么意思,可以传递几个参数。
4,如何获得PDF页面的宽度,如何获得table的宽度(我想PDF页面的总宽度-table的宽度)
5,如何让table里面的文字水平居中,垂直居中。
6,如何设置行高,和列宽。
非常感谢您的帮助,谢谢!
@fhn123456
请确保您的 PDF 中使用的字体已安装在您的系统上。
您可以使用表的以下属性来满足您的要求。
table.HorizontalAlignment = HorizontalAlignment.Right;
table.VerticalAlignment = VerticalAlignment.Top;
ColumnWidths 用于列宽。 如果有四列,您可以使用此属性,其中四个值用空格分隔。
请阅读以下文章以获取页面大小。
获取 PDF 页面大小
请使用 Table.GetWidth 方法获取表格的宽度。
请使用以下代码片段来满足您的要求。
for (int i = 0; i < rowData.Length; i++)
{
Cell cell = new Cell();
row.Cells.Add(cell);
cell.Paragraphs.Add(new TextFragment($"{rowData[i]}"));
cell.VerticalAlignment = VerticalAlignment.Center;
cell.Alignment = HorizontalAlignment.Center;
}
您可以使用 Table.ColumnWidths 属性来设置行单元格的宽度。
要设置行高,可以使用 Row.FixedRowHeight 属性。 请注意,此属性将行高设置为固定。 行高根据单元格内容自动增加。 但是,此属性固定了高度。
for (int i = 0; i < rowData.Length; i++)
{
Cell cell = new Cell();
row.FixedRowHeight = 100.0;
row.Cells.Add(cell);
cell.Paragraphs.Add(new TextFragment($"{rowData[i]}"));
cell.VerticalAlignment = VerticalAlignment.Center;
cell.Alignment = HorizontalAlignment.Center;
}
不好意思,因为最近很忙,回复您慢了一些。
非常感谢您耐心的一一为我解答,您的帮助对我受益匪浅。
1,这段代码确实可以让表格里面的文字居中,但是我又遇到了一个问题,下面这段代码如何设置字体和文字颜色。
for (int i = 0; i < rowData.Length; i++)
{
Cell cell = new Cell();
row.Cells.Add(cell);
cell.Paragraphs.Add(new TextFragment($"{rowData[i]}"));
cell.VerticalAlignment = VerticalAlignment.Center;
cell.Alignment = HorizontalAlignment.Center;
}
在此之前以下代码可以实现指定字体和文字颜色,我该如何使用上面的代码添加字体和字体颜色。
TextState ts = new TextState(System.Drawing.Color.Red);
//SimSun就是宋体
ts.Font = FontRepository.FindFont("SimSun");
//字体大小
ts.FontSize = 13f;
//ts.FontStyle = FontStyles.Bold;
//添加
row.Cells.Add($"{rowData[i]}", ts);
2,table.ColumnWidths = “70 60 60”; 有没有其他API,给指定列添加列宽如:
第一列=70
第二列=60
第三列=60
@fhn123456
请使用以下代码示例来实现您的要求。
// 加载源PDF文档
Aspose.Pdf.Document doc = new Aspose.Pdf.Document(MyDir + "input.pdf");
// 初始化表的新实例
Aspose.Pdf.Table table = new Aspose.Pdf.Table();
// 将表格边框颜色设置为浅灰色
table.Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Red));
// 设置表格单元格的边框
table.DefaultCellBorder = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Red));
// 使用表的列宽设置
table.ColumnWidths = "60 60 60";
// 创建MarginInfo对象并设置其左、下、右和上边距
Aspose.Pdf.MarginInfo margin = new Aspose.Pdf.MarginInfo();
margin.Top = 5f;
margin.Left = 5f;
margin.Right = 5f;
margin.Bottom = 5f;
////将默认单元格填充设置为MarginInfo对象
table.DefaultCellPadding = margin;
// 创建循环以添加10行
for (int row_count = 0; row_count < 2; row_count++)
{
// 将行添加到表
Aspose.Pdf.Row row = table.Rows.Add();
string[] rowData = sqlData[row_count].Split(';');
for (int i = 0; i < rowData.Length; i++)
{
TextFragment fragment = new TextFragment();
Aspose.Pdf.Text.TextSegment segment = new Aspose.Pdf.Text.TextSegment($"{rowData[i]}");
Aspose.Pdf.Text.TextState ts = new TextState(System.Drawing.Color.Red);
ts.Font = FontRepository.FindFont("SimSun");
ts.Font.IsEmbedded = true;
ts.FontSize = 13f;
segment.TextState = ts;
fragment.Segments.Add(segment);
Cell cell = new Cell();
row.FixedRowHeight = 100.0;
row.Cells.Add(cell);
cell.Paragraphs.Add(fragment);
cell.VerticalAlignment = VerticalAlignment.Center;
cell.Alignment = HorizontalAlignment.Center;
}
}
double pageWhile = doc.Pages[1].GetPageRect(false).Width;
//右上角
table.Alignment = HorizontalAlignment.Right;
table.Top = 15f;
table.Left = (float)pageWhile / 2;
// 将表对象添加到输入文档的第一页
doc.Pages[1].Paragraphs.Add(table);
// 保存包含表对象的更新文档
doc.Save(MyDir + "output.pdf");
好的,谢谢您,但是我还有一个问题,需要向您请教。
我遇到了一个新问题,表格大小,宽:6cm 高:3cm
我有3列,这样可以设置表格宽6cm
table.ColumnWidths = “2.4cm 1.8cm 1.8cm”;
但是行高如何设置成3cm,这里的30f默认是什么单位,是镑?还是厘米?我该如何换算成3cm
table.Rows[0].FixedRowHeight = 30f;
@fhn123456
API 中的基本测量单位是点,其中 72 点 = 1 英寸。 此外,页边距的默认值为每边 72 磅。
1 厘米 = 28.3464566929 点。 您可以使用此值将您的 cm 值转换为点。
@fhn123456
如果您对 Aspose.PDF 有任何疑问,请随时询问,我们很乐意为您提供帮助。
你好,我遇到了一个问题,表格没有在PDF文件的右上角。
我希望表格在PDF文件的头部右上角。
input.pdf (1.5 MB)
output.pdf (1.6 MB)
我希望表格:正确的.jpg (194.8 KB)
这是我的全部代码:
string[] sqlData = {
$"46;2020年;1",
$"运输;10年;页码"
};
// 加载源PDF文档
Aspose.Pdf.Document doc = new Aspose.Pdf.Document(@"E:\桌面\666\源文件\input.pdf");
// 初始化表的新实例
Aspose.Pdf.Table table = new Aspose.Pdf.Table();
// 将表格边框颜色设置为浅灰色
table.Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Red));
// 设置表格单元格的边框
table.DefaultCellBorder = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Red));
// 使用表的列宽设置
table.ColumnWidths = "2.4cm 1.8cm 1.8cm";
// 创建循环以添加10行
for (int row_count = 0; row_count < 2; row_count++)
{
// 将行添加到表
Aspose.Pdf.Row row = table.Rows.Add();
table.Rows[row_count].FixedRowHeight = 42.525;
string[] rowData = sqlData[row_count].Split(';');
for (int i = 0; i < rowData.Length; i++)
{
TextFragment fragment = new TextFragment();
Aspose.Pdf.Text.TextSegment segment = new Aspose.Pdf.Text.TextSegment($"{rowData[i]}");
Aspose.Pdf.Text.TextState ts = new TextState(System.Drawing.Color.Red);
ts.Font = FontRepository.FindFont("SimSun");
ts.Font.IsEmbedded = true;
ts.FontSize = 13f;
segment.TextState = ts;
fragment.Segments.Add(segment);
Cell cell = new Cell();
row.Cells.Add(cell);
cell.Paragraphs.Add(fragment);
cell.VerticalAlignment = VerticalAlignment.Center;
cell.Alignment = HorizontalAlignment.Center;
}
}
//Pdf页面宽度
double pageWidth = doc.Pages[1].GetPageRect(false).Width;
//获得表格的宽
float tableWidth = (float)table.GetWidth();
//右上角
table.Alignment = HorizontalAlignment.Right;
table.Top = 15f;
float rightMargin = (float)(tableWidth / 1.9);
table.Left = (float)(pageWidth - (tableWidth + rightMargin));
// 将表对象添加到输入文档的第一页
doc.Pages[1].Paragraphs.Add(table);
// 保存包含表对象的更新文档 output.pdf
doc.Save(@"E:\桌面\666\源文件\output.pdf");