【问题标题】:Clean way to convert spreadsheet with many rows into pdf将多行电子表格转换为 pdf 的简洁方法
【发布时间】:2011-06-04 19:28:28
【问题描述】:

我不是在寻找将 excel 文件转换为 pdf 的库,有很多可用的。我正在寻找一种干净的方法来将行数超过页面宽度的电子表格转换为 pdf。

这甚至可以做到吗?我不认为缩小文本是一个有效的选项,因为它可能会达到上限(即 1 pt 字体),并且电子表格中可能有足够的列来实际达到该限制(~30)。

我现在唯一的想法是让页面成为横向,但是有没有办法让 pdf 显示为“双合一”,两个页面都处于横向,并在下面有正确的页面顺序,看起来像一个有凝聚力的电子表格?

还有其他想法吗?或对我的想法有什么建议?

【问题讨论】:

    标签: java excel pdf landscape


    【解决方案1】:

    假设您可以读取 Excel 文件(例如使用Apache POI),请考虑使用您定义的自定义纸张大小使用Apache FOP 写入 PDF。没有卷纸打印机可能很难打印,但它会很好地显示在屏幕上。

    【讨论】:

    • 不幸的是,这是很多工作。当然应该有一种简单的方法来做到这一点,而不是重新发明轮子?
    • 你指的是哪个轮子?一定要使用它,让我们知道你把它放在哪里! :-)
    【解决方案2】:

    你看过JasperReports吗?它有一个非常强大的模板引擎。

    我从来没有像你那样使用 JasperReports,但他们的专长是动态报告,所以我猜他们知道如何以一种很好的方式处理页面溢出。

    【讨论】:

      【解决方案3】:

      这就是我最终要做的。它使用 MacOS 上的 QuickLook 功能制作 HTML 文件,然后使用wkhtmltopdf 将 HTML 文件转换为 PDF。

      #!/usr/bin/python                                                                                                           
      #                                                                                                                           
      # convert an excel workbook to a PDF on a Mac                                                                               
      #                                                                                                                           
      #                                                                                                                           
      from subprocess import Popen,call,PIPE
      import os, os.path, sys
      import xml.dom.minidom
      import plistlib
      
      if len(sys.argv)==1:
          print("Usage: %s filename.xls output.pdf" % sys.argv[0])
          exit(1)
      
      if os.path.exists("xdir"):
          raise RuntimeError,"xdir must not exists"
      os.mkdir("xdir")
      call(['qlmanage','-o','xdir','-p',sys.argv[1]])
      
      # Now we need to find the sheets and sort them.                                                                             
      # This is done by reading the property list                                                                                 
      qldir = sys.argv[1] + ".qlpreview"
      propfile = open("%s/%s/%s" % ('xdir',qldir,'PreviewProperties.plist'))
      plist = plistlib.readPlist(propfile)
      attachments = plist['Attachments']
      sheets = []
      for k in attachments.keys():
          if k.endswith(".html"):
              basename = os.path.basename(k)
              fn = attachments[k]['DumpedAttachmentFileName']
              print("Found %s -> %s" % (basename,fn))
              sheets.append((basename,fn))
      sheets.sort()
      
      # Use wkhtmltopdf to generate the PDF output                                                                                
      os.chdir("%s/%s" % ('xdir',qldir))
      cmd = ['wkhtmltopdf'];
      for (basename,fn) in  sheets:
          cmd.append(fn)
      cmd.append("../../" + sys.argv[2])
      try:
          call(cmd)
      except OSError:
          print("\n\nERROR: %s is not installed\n\n" % (cmd[0]))
          exit(1)
      os.chdir("../..")
      call(['/bin/rm','-rf','xdir'])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-06
        • 2012-04-23
        • 1970-01-01
        • 2011-01-20
        • 1970-01-01
        • 1970-01-01
        • 2018-09-03
        • 1970-01-01
        相关资源
        最近更新 更多