使用html转pdf时,发现有标点符号错位居中,图片显示不能一行显示多张

以下为html转换pdf代码:
image.png

1.以下为转换为pdf后,标点符号显示效果。
(经排查,如对该文字设置字体样式后,在pdf中标点符号可正常显示)
image.png (107.4 KB)

2.在html页面中,显示为一行三张图片,转换pdf后,一行仅能显示一张。
以下为html显示效果:
image.jpg (77.2 KB)

以下为pdf显示效果:
image.jpg (77.7 KB)

@zt405368,

您是否尝试过最新 (21.8) 版本的 Aspose.Words for .NET? 如果问题仍然存在,请压缩并上传您输入的 HTML 文件和 Aspose.Words 生成的 PDF 文件,显示此处的不良行为以进行测试。 然后,我们将调查我们的问题并为您提供更多信息。

问题1:标点符号居中问题,目前只在正式服务器中出现居中显示,本地开发环境没有问题。已写测试程序(21.8)转换测试,问题依然存在(对指定单元格文字设置字体“微软雅黑”后,标点符号可显示正常,但是整个pdf中的文字,都会被修改,且字体不是“微软雅黑”。本地环境也存在该问题)。

问题2:同一行无法显示多张照片问题。已写测试程序(21.8)转换测试,问题依然存在(本地及服务器都有问题)。

以下为测试程序(21.8版本),在服务器中转换的文件
21.8.zip (115.6 KB)

@zt405368,

关于第二个问题,我们在错误跟踪系统中记录了一个 ID 为 WORDSNET-22590 的问题。 我们将进一步调查此问题的详细信息,并会在此处为您提供有关链接问题状态的最新信息。 对于给您带来的不便,我们深表歉意。

关于第一个问题,我已将pdf-local.html 转换为PDF 格式并附在此处供您参考。

您是否仍然在此输出 PDF 中观察到相同的问题? 如果是,那么还请提供一个对比屏幕截图,突出显示(圈出)此 Aspose.Words 21.8 生成的输出 PDF 中的问题区域。

关于第一个问题,标点符号居中问题,可明显看到转换成pdf后,很多标点符号显示居中了。且该问题仅在客户服务器环境中存在,我本地使用及你这边转换的pdf中不存在该问题。
image.png (110.9 KB)
你这边提供的pdf中,可明显看到字体与html原字体不一致了。(之前我将字体设置成“微软雅黑”,导出来的也是你这提供的pdf字体类似)
image.png (66.0 KB)

@zt405368,

Aspose.Words 使用以下字体文件在我的本地机器上生成 PDF:

  • Times New Roman
  • MS Mincho
  • PMingLiU
  • Arial Unicode MS

要解决标点符号的问题,还请尝试在出现此问题的机器上安装“Arial Unicode MS”字体文件。 您可以从以下链接下载:

在转换过程中,您是否仍然看到任何与字体相关的警告消息?

关于 WORDSNET-22590,图像的 url 在我们这边不起作用。 因此,我们要求您提供另一个内嵌图像的 HTML 文档。

我在客户服务器中,安装了“Arial Unicode MS”字体文件,发现导出pdf后,标点符号还是会居中。
我用html转换word,标点符号也是正常的,但是用word转pdf后,还是会标点居中显示。我发现是只有中文标点才会居中,是不是还缺少其它字体?
关于 WORDSNET-22590,图像的 url ,我已经在以下压缩包html中放了几个base64图片,可以导出测试下
htmlToPdf.zip (834.8 KB)

@zt405368,

您可以使用以下代码来确定源文件中使用的字体:

LoadOptions opts = new LoadOptions();
opts.LoadFormat = LoadFormat.Html;
opts.Encoding = Encoding.UTF8;

Document doc = new Document("C:\\Temp\\pdf-local.html", opts);

ArrayList listOfFonts = new ArrayList();
foreach (Run run in doc.GetChildNodes(NodeType.Run, true))
{
    string fontName = run.Font.Name;
    if (!listOfFonts.Contains(fontName))
        listOfFonts.Add(fontName);
}

foreach (string fontName in listOfFonts)
    Console.WriteLine(fontName);

其次,请尝试运行以下代码以确定 Aspose.Words for Java 是否在有问题的机器上渲染为 PDF 时抛出任何与字体相关的警告消息。

Aspose.Words.License lic = new Aspose.Words.License();
lic.SetLicense("Aspose.Words.lic");

LoadOptions opts = new LoadOptions();
opts.LoadFormat = LoadFormat.Html;
opts.Encoding = Encoding.UTF8;

Document doc = new Document("C:\\Temp\\htmlToPdf (1)\\pdf-local.html", opts);

HandleDocumentWarnings warningsHandler = new HandleDocumentWarnings();
doc.WarningCallback = warningsHandler;

doc.Save("C:\\temp\\htmlToPdf (1)\\awnet-21.8.pdf");

warningsHandler.SaveIt();

public class HandleDocumentWarnings : Aspose.Words.IWarningCallback
{
    public ArrayList listOfFonts = new ArrayList();
    public DocumentBuilder builder;
    public HandleDocumentWarnings()
    {
        builder = new DocumentBuilder();
    }

    public void Warning(Aspose.Words.WarningInfo info)
    {
        if (info.WarningType == WarningType.FontSubstitution || info.WarningType == WarningType.FontEmbedding)
            if (!listOfFonts.Contains(info.Description))
                listOfFonts.Add(info.Description);
    }

    public void SaveIt()
    {
        builder.Font.Name = "SimHei"; // or try any other font name
        foreach (string str in listOfFonts)
            builder.Writeln(str.Trim());

        builder.Document.Save(@"C:\Temp\warnings.docx");
    }
}

关于标点符号居中显示问题,经过多次测试,发现可能跟系统字体(mingLiu_hkscs)有关。我的本地电脑上安装该字体后,标点符号也会居中显示,卸载后就正常了。但是客户服务器中该字体又无法卸载删除(在C盘下也无法删除),不知道为什么在转换pdf时,默认会使用该字体?
无法删除字体.jpg (45.7 KB)

关于图片在pdf中无法一行显示多张问题,经过多次测试,发现pdf中可能不显示div样式布局,我使用table进行布局后,即可正常显示一行多张,只是宽高比跟html页面显示略有差异

@zt405368,

或者,您可以将所有系统字体复制到一个单独的文件夹中,并使用以下方法指示 Aspose.Words 仅使用该自定义字体文件夹。 当然,您将有权从自定义字体文件夹中删除不需要的字体。

关于WORDSNET-22590,我们已经完成了这个问题的分析。HTML 导入不支持这种情况,因为它是文档模型限制。 MS Word 以类似的方式导入它。 我们可以建议您更改标记并将图像放入表格中,以便更正确地导入。

@zt405368,

关于 WORDSNET-22590,我们已经完成了这个问题的工作,并得出结论以“非错误”状态关闭这个问题。 详情请看我之前的帖子。 如果您有进一步的疑问或将来可能需要任何帮助,请通过在 Aspose 论坛中创建一个新线程告诉我们。