Один и тот же код, Wicked PDF создает два разных отчета на двух разных компьютерах - PullRequest
1 голос
/ 18 сентября 2019

Я использую Ruby on Rails для создания PDF-файла с помощью WickedPDF и отправки его по электронной почте.У меня точно такой же код на двух компьютерах (код хранится на GitHub, а локальные экземпляры обновлены и абсолютно одинаковы), но по какой-то причине шрифт, предоставляемый в отчетах PDF, отличается.Один из них - Arial, другой - Verdana.

Это код, который создает PDF:

    header_html = av.render(template: "layouts/report_header", locals: {company_name: company_name, layout: nil)
    footer_html = av.render(template: "layouts/report_footer", locals: {company_name: company_name, layout: nil)
    pdf_html = av.render(:template => "reports/report", locals: {data: data})
    body_pdf = WickedPdf.new.pdf_from_string(
      pdf_html,
      footer: {
        content: footer_html
      },
      header: {
        content: header_html
      },
      margin:  {  
        top:               25,
        bottom:            17,
        left:              10,
        right:             10 
      },
    )

    body_path = Rails.root.join("public/#{@project_id}/body.pdf")
    File.open(body_path, "wb") do |file|
      file << body_pdf
    end

Содержимое pdf_html (тело содержимого) показывает это:

<!DOCTYPE html>
<html>
<head>
    <style>
        p {
            color: #545658;
            font-size: 12pt;
            font-family: "Arial";
            font-weight: 500;
        }
        li {
            color: #545658;
            font-size: 12pt;
            font-family: "Arial";
            font-weight: 500;
        }
        h1 {
            color: #ED1C24;
            font-weight: normal;
            font-family: "Arial";
        }
        th {
            padding-top: 12px;
            padding-bottom: 12px;
            text-align: center;
            background-color: black;
            color: white;
        }

        td {
            color: #545658;
            padding-top: 5px;
            padding-left: 10px;
            padding-right: 10px;
            padding-bottom: 5px;
        }

        table.bordered {
            border-collapse: collapse;
        }
        table.bordered td {
            border: 1px solid black; 
        }
        table.bordered tr:first-child td {
            border-top: 0;
        }
        table.bordered tr td:first-child {
            border-left: 0;
        }
        table.bordered tr:last-child td {
            border-bottom: 0;
        }
        table.bordered tr td:last-child {
            border-right: 0;
        }

        tr.bordered:nth-child(even) {background-color: #f2f2f2;}

        img.finding {
            position:absolute;
            width:60%;
            height: 40px;
            margin-left: -20px;
            max-width: 100%;
            z-index:-1;
        }

        p.finding {
            display: inline;
            color: white;
            font-weight: bold;
            font-size: 16pt;
            line-height: 1.75em;
        }

        pre code {
            background-color: #eee;
            border: 1px solid #999;
            display: block;
            padding: 5px;
            font-family: "Consolas";
            font-size: 10pt;
            color: black;
        }

    </style>
</head>
<body>
<p>Hello world</p>
</body>
</html>

Это прекрасно работает на одном компьютере, но не на другом.У меня такое ощущение, что эта проблема возникает за пределами Rails.

Есть какие-либо предложения о том, почему это может дать мне разные результаты на двух разных компьютерах?

1 Ответ

1 голос
/ 19 сентября 2019

wicked_pdf использует wkhtmltopdf .Если вы хотите получить одинаковый результат на всех компьютерах, версия wkhtmltopdf должна быть одинаковой на всех компьютерах.Вероятно, версия wkhtmltopdf на компьютерах не совпадает.

ОБНОВЛЕНИЕ

Все компьютеры должны иметь Arial шрифты.Если шрифт Arial отсутствует, это может привести к этой ошибке.

...