Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails WickedPDF本地呈现与生产呈现不同_Ruby On Rails_Ruby_Fonts_Wkhtmltopdf_Wicked Pdf - Fatal编程技术网

Ruby on rails WickedPDF本地呈现与生产呈现不同

Ruby on rails WickedPDF本地呈现与生产呈现不同,ruby-on-rails,ruby,fonts,wkhtmltopdf,wicked-pdf,Ruby On Rails,Ruby,Fonts,Wkhtmltopdf,Wicked Pdf,我已在我的台式机上安装了wkhtmltopdf 0.12.3(带补丁qt),并在我的Centos虚拟机上安装了完全相同的版本 我正在使用WickedPDF和Rails将HTML转换为PDF 生成PDF时,字体略有不同。一些奇怪的字母间距。我附上的图片显示了这一点 您可以看到e和n之间的差距,但这在我的本地计算机上不存在。下图: 有人知道为什么会这样吗 如有任何建议,将不胜感激 谢谢 这是我用WickedPDF生成PDF的Ruby代码 def generate_pdf pdf = Wi

我已在我的台式机上安装了wkhtmltopdf 0.12.3(带补丁qt),并在我的Centos虚拟机上安装了完全相同的版本

我正在使用WickedPDF和Rails将HTML转换为PDF

生成PDF时,字体略有不同。一些奇怪的字母间距。我附上的图片显示了这一点

您可以看到en之间的差距,但这在我的本地计算机上不存在。下图:

有人知道为什么会这样吗

如有任何建议,将不胜感激

谢谢

这是我用WickedPDF生成PDF的Ruby代码

def generate_pdf
    pdf = WickedPdf.new

    pdf_file = pdf.pdf_from_string(ActionController::Base.new().render_to_string('card_requests/show.pdf.haml', layout: 'pdf', locals: {card_request: self}),
      dpi: '300',
      margin: {top: 0, bottom: 0, left: 0, right: 0},
      page_height: '2.25in',
      page_width: '3.75in',
      disable_smart_shrinking: false
    )

    tempfile = Tempfile.new(["#{self.name.gsub(' ', '_').downcase}_biz_card", '.pdf'], Rails.root.join('pdfs'))
    tempfile.binmode
    tempfile.write pdf_file
    tempfile.close

    self.pdf = File.open(tempfile.path)
    tempfile.unlink

    self.save

  end
下面是顶部带有CSS的show.pdf.haml文件:

!!! 5
%html
  %head
    :css
      html * {
        margin: 0 !important;
        padding: 0 !important;
        page-break-inside: avoid !important;
      }
      body {
        margin: 0 !important;
        padding: 0 !important;
        page-break-inside: avoid !important;
        text-rendering: optimize-speed;
      }
      .card-preview {
        font-family: 'TradeGothic';

        background-size: contain;
        width: 369px;
        height: 220px;
        page-break-after: avoid !important;
        position: relative;
      }

      #card-name {
        color: #ED1D27;
        font-weight: bold;
        font-size: 12pt;
        position: absolute;
        top: 37px;
        left: 39px;
        width: 328px;
      }

      #card-title {
        color: #2E2D2D;
        font-weight: bold;
        position: absolute;
        top: 54px;
        left: 39px;
        font-size: 9pt;
      }

      #card-office-phone {
        color: #4e4e48;
        position: absolute;
        top: 148px;
        left: 39px;
        font-size: 8.5pt;
      }

      #card-cell-phone {
        color: #4e4e48;
        position: absolute;
        top: 135px;
        left: 39px;
        font-size: 8pt;
        width: 200px;
      }

      #card-email {
        color: #4e4e48;
        position: absolute;
        top: 161px;
        left: 39px;
        font-size: 8.5pt;
      }

      #card-website {
        color: #4e4e48;
        position: absolute;
        top: 174px;
        left: 39px;
        font-size: 8pt;
      }
      .hide {
        display: none;
      }
    %meta{:charset => "utf-8"}
  %body
    .card-preview{style: "background-image: url('#{Rails.root.join('app', 'assets', 'images', 'card_template_2.svg')}')"}
      #card-name
        = card_request.name
      #card-title
        = card_request.title
      #card-office-phone{class: (card_request.office? ? "" : 'hide')}
        == office 555 555 5555 #{card_request.ext? ? "ext #{card_request.ext_phone}" : ''}
      #card-cell-phone{class: ((card_request.cell? && !card_request.cell_phone.blank?) ? "" : 'hide'), style: (card_request.office? ? "" : 'top: 148px; left: 39px;')}
        = (card_request.cell? ? "cell 555 555 5555" : '')
      #card-email
        = card_request.email
      #card-website
        www.website.com
此后,我通过以下方式解决了此问题:


它为我解决了CentOS上的紧排问题。

我在某些特定的字母后面遇到了类似的空格问题,如

Reg istration  ---> space after letter 'g'

O pen   ---> space after Capital letter 'O'
上述问题可能是由于系统特定字体配置造成的。我引用了github上报告的同一个问题

此问题发生在CentOS 6.x的生产实例(AWS AMI linux)上,但在ubuntu 14.04上运行良好。我查看了CentOS上的系统字体配置51-local.conf,路径为/etc/fonts/conf.d。如果同一路径中没有名为wkhtmltopdf的文件,则使用默认字体文件51-local.conf将以下配置作为自定义字体

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
 <match target="font">
  <edit mode="assign" name="rgba">
   <const>rgb</const>
  </edit>
 </match>
 <match target="font">
  <edit mode="assign" name="hinting">
   <bool>true</bool>
  </edit>
 </match>
 <match target="font">
  <edit mode="assign" name="hintstyle">
   <const>hintslight</const>
  </edit>
 </match>
 <match target="font">
  <edit mode="assign" name="antialias">
   <bool>true</bool>
  </edit>
 </match>
 <match target="font">
  <edit mode="assign" name="lcdfilter">
   <const>lcddefault</const>
  </edit>
 </match>
</fontconfig>

rgb
真的
反光灯
真的
液晶显示器故障

另外,如果您正在使用wicked_pdf.rb初始值设定项配置exec path作为开发环境的
/usr/local/bin/wkhtmltopf
。尝试将生产捆绑包的路径替换为
/bin/wkhtmltopdf
,请显示相关代码。我已使用正在使用的代码进行了更新。相当明显的后续操作:您正在使用
TradeGothic
作为字体。这两个系统的字体版本是否完全相同?我的本地机器是LinuxMint。你认为这会有很大的不同吗?所有这些都是重要的信息。特别是如果操作系统不同,文本整形器可能会不同,这将使“相同字体看起来相同”的任何和所有假设都无效。我有完全相同的问题(在Ubuntu14.04上工作,在AWS AMI Linux上工作,字符之间的随机间隔),这个修复就成功了。非常感谢。