We're sorry Aspose doesn't work properply without JavaScript enabled.

Free Support Forum - aspose.com

PDF插入表格在右上角,表格里面的字显示不全。

您好,感谢您的查看。
我在PDF文件右上角插入3列2行表格,第三列数据没有显示出来。但是PDF左上角插入表格和中间显示正常。

输入文件:input.pdf (44.5 KB)
错误文件:document_with_table_out.pdf (152.3 KB)

以下是我的全部代码,谢谢。

       //数据
        string[] sqlData = {
           $"46;2020年;1",
           $"运输;10年;页码"
           };


        //加载源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, 0.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));

        //使用表的列宽设置  如果有3列就设置三个数字:第一列 70 60 60 
        table.ColumnWidths = "70 60 60";

         //创建循环以添加2列
        for (int row_count = 0; row_count < 2; row_count++)
        {
            //将行添加到表
            Aspose.Pdf.Row row = table.Rows.Add();              
            //默认单元格文字水平对齐
            row.DefaultCellTextState.HorizontalAlignment = HorizontalAlignment.Center;
            //设置行高
            row.FixedRowHeight = 30f;              

            string[] rowData = sqlData[row_count].Split(';');

            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;
            }

        }



        float pageWidth = (float)doc.Pages[1].GetPageRect(false).Width;

        //获得表格的宽
        float tableWidth = (float)table.GetWidth();

        float x = 0;

        //左上
        if (fSSettingsData.fSWz == 0)
        {
            //不能为0 否则不管用   x = 1;是最右边
            x = 30f;

        }//居中
        else if (fSSettingsData.fSWz == 1)
        {

            //可以使用
            //中间    pageSize / 2 页面大小除以2 获得中间位置      190是表格总宽度
            float Center = (float)((pageWidth / 2) + (tableWidth / 2));
            x = pageWidth - Center;

        }//右上
        else if (fSSettingsData.fSWz == 2)
        {

            x = pageWidth - (tableWidth + 30f);

        }

        table.Top = 30f;
        table.Left = x;

       //将表对象添加到输入文档的第一页
        doc.Pages[1].Paragraphs.Add(table);

        string datasave = fSSettingsData.fSFileSave + "\\document_with_table_out.pdf";
        // 保存包含表对象的更新文档
        doc.Save(datasave);

        System.Diagnostics.Process.Start(datasave);

@fhn123456

在设置表格的位置时,您不尊重页边距。我们假设创建 PDF 时页面的右边距为 36。所以我们在计算中包含了这个值,结果很好。

x = pageWidth - (tableWidth + 30f + 36f);

document_with_table_out.pdf (321.8 KB)

感谢您的耐心解答。

30f就是PDF页面的边距,PDF页面宽度减去表格的宽度就是PDF的右上角坐标,加上30就是右边距。
x = pageWidth - (tableWidth + 30f);

问题:
1,这里任然有bug, table.ColumnWidths = “70 60 60”; 一共三列,第一列宽度70,第二列宽度60,第三列宽度60,第二列和第三列都是相同的宽度,所有table列宽也应该相同,但是输出的第三列明显小于第二列。
问题图片:366.jpg (17.8 KB)
2,table不能像正常图片这样完全在PDF的右上角。
代码: x = pageWidth - tableWidth - 10;
正确图片:56.jpg (5.7 KB)
错误图片:36.jpg (13.6 KB)

上面的问题能解决最好,解决不了,也没问题。

我遇到了一个新问题,表格大小,宽:6cm 高:3cm
我有3列,这样可以设置表格宽6cm
table.ColumnWidths = “2.4cm 1.8cm 1.8cm”;
但是行高如何设置成3cm,这里的30f默认是什么单位,是镑?还是厘米?我发如何换算成3cm
table.Rows[0].FixedRowHeight = 30f;

@fhn123456

我们已在我们的问题跟踪系统中记录了一份调查票 PDFNET-52916。我们将进一步调查其详细信息,并随时向您发布其解决方案的状态。请耐心等待,给我们一些时间。

对此造成的不便,我们表示歉意。

好的,谢谢您,但是我还有一个问题,需要向您请教。
我遇到了一个新问题,表格大小,宽:6cm 高:3cm
我有3列,这样可以设置表格宽6cm
table.ColumnWidths = “2.4cm 1.8cm 1.8cm”;
但是行高如何设置成3cm,这里的30f默认是什么单位,是镑?还是厘米?我该如何换算成3cm
table.Rows[0].FixedRowHeight = 30f;

table 表格每行,行高计量单位是磅?还是厘米?
我的table总共有两行,table高度是3cm,每行如何计算成cm。
table.Rows[0].FixedRowHeight = 30f;这里的30f如何计算成3cm。

@fhn123456

Aspose.PDF 中的基本测量单位是点,其中 72 点 = 1 英寸。您可以在使用适当的计算时将这些值转换为厘米。

谢谢您,您的解答对我很有帮助。

@fhn123456

感谢您的反馈意见。一旦票证得到解决,我们将进一步通知您。