已有PDF文件插入表格,如何将表格定位到右上角。

您好,非常感谢您的查看。
已有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

我们正在处理您的查询,并会尽快回复您。

@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");

@fhn123456

我们正在其他 线程 中回复您的类似询问。