非常感谢您的查看和帮助!
我在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
很高兴知道您的问题已得到解决。如果您需要进一步的帮助,请随时创建一个新主题。