PDF插入表格,如何指定系统字体SimSun

非常感谢您的查看和帮助!

我在PDF右上角插入了一个表格,表格里面的字体,如何检测是不是SimSun,如果不是SimSun,我该如何指定表格字体使用系统里面的字体。

以下是设置字体的代码,供您查验:

                TextFragment fragment = new TextFragment();

                TextSegment segment = new TextSegment($"{rowData[i]}");
                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;

@fhn123456

此代码片段与将字体设置为文本片段有关。你说你正在添加表格。您能否与输出 PDF 分享相应的完整代码片段?

1,表格里面的字体,如何检测是不是SimSun,如果不是SimSun,我该如何指定表格字体使用系统的字体。因为我在使用Aspose.Word添加表格的时候必须指定字体。

我向您输出了完整代码。

   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

首先,您需要确保所需的字体(即 SimSun)已正确安装并存在于系统的默认字体文件夹中。一旦它在那里,你就可以像你已经在做的那样使用它。如果您需要检查 PDF 中是否存在字体,您可以使用以下示例来提取所有字体:

非常感谢您的回复和帮助!

因为有的电脑没有安装SimSun字体,我将SumSun字体放到程序的根目录下,如下代码指定到字体,发现代码无法运行。
The required table ‘head’ was not found.

                string cc = Environment.CurrentDirectory + "\\Fonts\\simsun.ttc";

                Aspose.Pdf.Text.Font font = FontRepository.OpenFont(cc);

                TextFragment fragment = new TextFragment();

                TextSegment segment = new TextSegment($"{rowData[i]}");
                TextState ts = new TextState(System.Drawing.Color.Red);
                //指定字体
                ts.Font = font;

                ts.Font.IsEmbedded = true;
                ts.FontSize = 13f;
                segment.TextState = ts;

                fragment.Segments.Add(segment);

                row.Cells.Add(cell);
                cell.Paragraphs.Add(fragment);
                cell.VerticalAlignment = VerticalAlignment.Center;
                cell.Alignment = HorizontalAlignment.Center;

@fhn123456

能否请您也共享字体文件以供我们参考?请将字体文件添加到 .zip 存档并与我们分享。我们将在我们的环境中测试该场景并相应地解决它。

非常感谢您的回复和帮助!

我将向您提供FontFonts.zip (8.9 MB)

@fhn123456

我们能够在我们的环境中重现该问题。因此,它在我们的问题跟踪系统中被记录为 PDFNET-53153。我们将进一步调查其详细信息,并及时向您通报其更正状态。请耐心等待,给我们一些时间。

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

好的,谢谢您的帮助和支持。

您有其他的解决方案吗?
PDF生成表格,自定义字体路径,我可以自己通过代码指定我需要的字体,而不是使用默认使用它
ts.Font = FontRepository.FindFont(“SimSun”);,因为有时候客户电脑没有安装着SimSun,我需要将字体放到我的程序根路径下,过代码指定到程序根路径下就可以了。

@fhn123456

请尝试使用下面的代码片段,看看它是否有帮助:

FontRepository.Sources.Add(new FolderFontSource(FontFolder));              
Font reqFont = FontRepository.FindFont("simsun", true);

非常感谢您的帮助和支持!我的问题全部完成了。

@fhn123456

很高兴知道您的问题已得到解决。如果您需要进一步的帮助,请随时创建一个新主题。