OpenOffice .xls导出为PDF会导致复选框重叠

时间:2009-01-08 02:10:05

标签: java pdf openoffice.org xls

OpenOffice Excel文件导出到PDF正在以编程方式完成,我希望知道是否有办法通过在转换过程中传递某种标志或某些东西来解决此问题,这将使单元格背景在PDF文档中透明。

请注意PDF输出示例。原始Excel文件根本不重叠边缘:http://www.freeimagehosting.net/uploads/4ab8dd9af0.jpg

这是PDF导出前的原始Excel文件:http://www.freeimagehosting.net/uploads/0cdcaad47a.jpg

OpenOffice 2.4和3.0都有同样的缺陷。

建议是最受欢迎的,这是持有这个项目的最后一件事。

请点击此链接获取OpenOffice网站上的示例:http://user.services.openoffice.org/en/forum/viewtopic.php?f=20&t=13528

以下是问题跟踪链接:http://www.openoffice.org/issues/show_bug.cgi?id=97856

还有一些代码,对于Java 2.5,它是Jython 2.2.1。

def _save_as_pdf(self, docSource):
    dirName=os.path.dirname(docSource)
    baseName=os.path.basename(docSource)
    baseName, ext=os.path.splitext(baseName)
    dirTmpPdfConverted=os.path.join(dirName + DIR + PDF_TEMP_CONVERT_DIR)
    if not os.path.exists(dirTmpPdfConverted):
        os.makedirs(dirTmpPdfConverted)
    pdfDest=os.path.join(dirTmpPdfConverted + DIR + baseName + ".pdf")
    url_save=self._create_UNO_File_URL(pdfDest)
    properties=self._create_properties(ext)
    try:
        try:
            self._xstorable=UnoRuntime.queryInterface(XStorable, self._doc)
            self._xstorable.storeToURL(url_save, properties)
        except AttributeError,e:
                self.logger.info("saving as pdf has problem: (" + str(e) + ")")
                raise e
        except:
            self.logger.info("storeToURL exception")
            raise
    finally:
        self.logger.info("converted document " + baseName + ext)
        if not self._doc:
            xCloseable = UnoRuntime.queryInterface(XCloseable, self._doc)
            if not xCloseable:
                try:
                    xCloseable.close(false)
                except CloseVetoException, (ex):
                    xComp = UnoRuntime.queryInterface(XComponent, self._doc)
                    xComp.dispose()
        else:
            xComp = UnoRuntime.queryInterface(XComponent, self._doc)
            xComp.dispose()
        self._doc=None

def _create_properties(self,ext):
    properties=[]
    p=PropertyValue()
    p.Name="Overwrite"
    p.Value=True
    properties.append(p)
    p=PropertyValue()
    p.Name="FilterName"
    if   ext==".doc":
        p.Value='writer_pdf_Export'
    elif ext==".rtf":
        p.Value='writer_pdf_Export'
    elif   ext==".html":
        p.Value='writer_pdf_Export'
    elif ext==".htm":
        p.Value='writer_pdf_Export'
    elif ext==".xls":
        p.Value='calc_pdf_Export'
    elif ext==".tif":
        p.Value='draw_pdf_Export'
    elif ext==".tiff":
        p.Value='draw_pdf_Export'
    properties.append(p)
    return tuple(properties)

1 个答案:

答案 0 :(得分:2)

是否可以将包含超大复选框的行放大一点?

这将是一个黑客攻击,而不是你要求的,但它可能会在比等待修复更短的时间内产生结果。

我已经检查了Office 2003和OpenOffice 3中的复选框,发现虽然Office允许对象使用透明背景,但OpenOffice却没有。在2.4的发行说明中提到了表单对象的Transparant背景,但我找不到在复选框上指定它的方法。

据我所知,甚至可能是“普通打印”和打印预览中的透明复选框背景是黑客,因为似乎没有指示透明背景的属性(背景颜色为默认值,而办公室的背景透明)。

然而,积极的是打印是可以的。打印到基于文件的打印机,您可以在其中定义文件名。也许Cups有一个打印到pdf文件的打印机? (在这种情况下,您不会使用PDF导出而是打印)。