跳转到主要内容

RML的另一种实现

项目描述

z3c.rml – RML的另一种实现

Latest Version Supported Python versions Build Status https://coveralls.io/repos/github/zopefoundation/z3c.rml/badge.svg?branch=master

这是ReportLab的RML PDF生成XML格式的另一种实现。与原始实现一样,它基于ReportLab的reportlab库。

您可以阅读有关z3c.rml的所有信息,并查看许多使用示例,请参阅RML参考

在pip上安装

pip install z3c.rml

z3c.rml安装后,可在命令行上作为z3c.rml使用。

$ z3c.rml --help
usage: rml2pdf [-h]
               xmlInputName [outputFileName] [outDir]
               [dtdDir]

Converts file in RML format into PDF file.

positional arguments:
  xmlInputName    RML file to be processed
  outputFileName  output PDF file name
  outDir          output directory
  dtdDir          directory with XML DTD (not yet supported)

optional arguments:
  -h, --help      show this help message and exit

Copyright (c) 2007 Zope Foundation and Contributors.

将此文件保存为file.rml

<!DOCTYPE document SYSTEM "rml.dtd">
<document filename="example_01.pdf">
 <template showBoundary="1"> <!--Debugging is now turned on, frame outlines -->
 <!--will appear on the page -->
 <pageTemplate id="main">
 <!-- two frames are defined here: -->
 <frame id="first" x1="100" y1="400" width="150" height="200"/>
 <frame id="second" x1="300" y1="400" width="150" height="200"/>
 </pageTemplate>
 </template>
 <stylesheet>
 <!-- still empty...-->
 </stylesheet>
 <story>
 <para>
 Welcome to RML.
 </para>
 </story>
</document>

然后运行

$ z3c.rml file.rml

输出将是文档中定义的example_01.pdf

代码方式,您可以这样做

from z3c.rml import rml2pdf
rml2pdf.go('file.rml','file.pdf')

变更记录

4.4.0 (2023-08-23)

  • 为BlockTable添加对splitByRow和splitInRow参数的支持。

  • rlPyCairo作为安装要求添加,因为reportlab >= 4.0需要该库。(#117 <https://github.com/zopefoundation/z3c.rml/issues/117>

4.3.0 (2023-04-25)

  • 支持Python 3.11。

  • 停止支持Python 2.7,3.5,3.6。

  • 添加了对图像上文本锚点的支持。

  • 确保我们只在打开文件时关闭输入文件。

  • 将图像比例委托给drawImage。(PR #105)

  • 标签框颜色接受“None”。

  • 使用svglib进行svg到rml的转换,而不是维护自己的。

  • 允许使用Unicode字符作为项目符号。

4.2.1 (2022-09-30)

  • 添加对Python 3.10的支持。

  • 恢复对Python 3.6的支持。

  • 修复在非大小写敏感但只保留大小写的文件系统上的存储库中名称冲突。

  • 将测试输出目录移动到临时目录。

  • 支持pikepdf 6.0+。

4.2.0 (2021-10-14)

  • 升级到使用pikepdf 3.0+。

4.1.2 (2020-12-14)

  • 修复第一页的包含问题。(PR #84)

4.1.1 (2020-12-08)

  • 允许<registerTTFont>在默认字体目录中搜索,而不是要求绝对或相对路径。(修复问题 #46。)

  • 确保在文档末尾没有可流动内容时,includePages会在文档末尾添加空白页。

4.1.0 (2020-12-07)

  • <blockTableStyle>实现新的标签<blockNosplit>

  • 修复段落中的动态标签。修复页码。

  • 使Reportlab 3.5的新项目符号样式可用。

  • 支持自定义Canvas类。

4.0.0 (2020-12-07)

  • 停止支持Python 2.x。

  • 停止使用PyPDF2并改用pikepdf

3.10.0 (2020-03-27)

  • <linePlot>添加了inFill属性,它将填充线下方的区域,使其有效地成为面积图。

  • 允许通过Python路径引用函数来指定<xValueAxis><yValueAxis>labelTextFormat属性。

  • 添加了来自Stack Overflow的示例,该示例练习了新功能。请参阅tag0linePlot.rml

  • 移除Python 3.6支持并添加3.8。

3.9.1 (2019-10-04)

  • 添加textTransform实现。

3.9.0 (2019-07-19)

  • 创建一个合适的、可解析的DTD。添加一个测试来验证其有效性。

  • 更新了rml.dtd

  • strandLabels不支持文本内容。这是由于错误的模式继承而意外断言的。

3.8.0 (2019-06-24)

  • 进一步统一了paraStylespanStyle

  • 扩展<spanStyle>以支持下划线和删除线。

  • 简化了下划线和删除线样式实现。这也是更正确的实现。

3.7.0 (2019-06-14)

  • 停止使用python setup.py test运行测试。

  • 停止支持Python 3.5。

  • 扩展了<paraStyle>

    • underline:一个布尔字段,指示整个段落是否下划线。以下相关属性也已添加到样式:underlineColorunderlineOffsetunderlineWidthunderlineGapunderlineKind

    • strike:一个布尔字段,指示整个段落是否被删除。以下相关属性也已添加到样式:strikeColorstrikeOffsetstrikeWidthstrikeGapstrikeKind

    • justifyLastLine:添加了API中可用的属性。

    • justifyBreaks:添加了API中可用的属性。

    • spaceShrinkage:添加了API中可用的属性。

    • linkUnderline:添加了API中可用的属性。

3.6.3 (2019-04-11)

  • 添加了缺失的lineBelowDashlineAboveDashlineLeftDashlineRightDash属性。

3.6.2 (2019-03-27)

  • 修复num2words(缺少导入,两位数破折号)

  • 添加了测试来检查不在标签中的文本(例如,不在<para>标签中)会发生什么。

3.6.1 (2018-12-01)

  • 添加Python 3.7 Trove分类器。

3.6.0 (2018-12-01)

  • 升级以支持Python 3.7

  • 允许<place>包含<fixedSize>,这样可以使内容适应位置边界。

3.5.1 (2018-10-09)

  • 升级以支持Reportlab 3.5.9

3.5.0 (2018-04-10)

  • 尊重文档中属性选择的顺序。

  • 从基本段落样式中抽象出span样式,以便可以重用属性。

  • 移除所有SpanStyle样式的默认值,以便所有值都可以从段落继承。

  • 支持在<para> <img>标签中使用包相对src值。

3.4.0 (2018-04-09)

  • 放弃对Python 3.4的支持。

  • 功能:支持<span style="NAME">和相应的<spanStyle>样式。

  • 错误:attr.Sequencemin_lengthmax_length无效。

3.3.0 (2017-12-06)

  • 添加对非rml页眉和页脚语句的支持,这样就可以支持导出到Open Document格式。

  • 放弃对Python 3.3的支持。

3.2.0 (2017-01-08)

  • 改进IntegerSequence字段,使用两个数字的列表而不是列出所有数字来返回范围。

  • 扩展IntegerSequence,允许指定第一个数字以及下限/上限包含。

  • 更新ConcatenationPostProcessor以处理新的整数序列数据结构。由于这对合并库来说效率更高,当包含具有页面范围的PDF时,性能提高了5倍。

  • 实现基于PdfTk的合并后处理器。PdfTk非常快,但不幸的是,由于必须手动合并大纲,大部分的增益都丢失了。可以通过以下方式启用PdfTk后处理器:

    from z3c.rml import pdfinclude
    pdfinclude.IncludePdfPages.ConcatenationPostProcessorFactory = \
        pdfinclude.PdfTkConcatenationPostProcessor
  • 修复首次可流动时PDF包含的初始空白页面。[Kyle MacFarlane]

  • 支持Python 3.5 [Kyle MacFarlane]

  • 如果上下文元素没有被解析,attr.getFileInfo()会崩溃。

3.1.0 (2016-04-04)

  • 功能:添加了新的段落样式属性splitLongWordsunderlineProportionbulletAnchor

  • 功能:添加了topPadder指令。由Alvin Gonzales修补。

  • 错误:默认SVG填充为黑色。由Alvin Gonzales修补。

  • 错误:修复了当SVG viewBox没有锚定在坐标(0, 0)时错误显示绘图的问题。由Alvin Gonzales修补。

  • 测试:更新versions.cfg以引用所有依赖项的最新版本。

  • 错误:避免在包含PDF时引发PdfReadWarning的异常。由Adam Groszer修补。

3.0.0 (2015-10-02)

  • 支持python 3.3和3.4

  • 添加“bulletchar”作为有效的无序列表符号类型。

  • 添加rml2pdf脚本的友好帮助信息。

  • 允许“go()”接受输入和输出文件对象。

  • 修复“未解决的书签”问题。

  • 修复问题#10。

2.9.3 (2015-09-18)

  • 支持<image>标签中的透明图像。

2.9.2 (2015-06-16)

  • 将拼写错误“nineth”更正为“ninth”。

2.9.1 (2015-06-15)

  • 添加brow-bag 2.9.0版本中缺失的文件。

2.9.0 (2015-06-15)

  • 为有序列表添加了更多的编号方案支持。以下新bulletType值被支持:

    • ‘l’ - 数字作为小写文本。

    • ‘L’ - 数字作为大写文本。

    • ‘o’ - 小写序数,数字转换为文本。

    • ‘O’ - 大写序数,数字转换为文本。

    • ‘r’ - 小写序数,数字。

    • ‘R’ - 大写序数,数字。

2.8.1 (2015-05-05)

  • barCodebarCodeFlowable标签添加了barBorder属性。该属性控制QR码周围白色边框的厚度。

2.8.0 (2015-02-02)

  • 从包版本中获取参考手册的版本。

  • 添加了将任何一组字符指定为“项目内容”的能力,就像ReportLab支持的那样。

  • 修复了与ReportLab 3.1.44版本兼容的代码。

2.7.2 (2014-10-28)

  • 现在支持最新的PyPDF2版本。

2.7.1 (2014-09-10)

  • 修复了包名称。

2.7.0 (2014-09-10)

  • 增加了对 listStyle 标签的 bulletType 支持。

  • 将“bullet”添加为有效的无序列表类型值。

2.6.0 (2014-07-24)

  • 实现了在 pageTemplate 标签内使用 mergePage 标签的能力。这样可以使用PDF作为页面背景。

  • 更新代码以支持ReportLab 3.x,特别是最新的3.1.8版本。这包括对Python 2代码格式化器的monkeypatch。

  • 更新代码以支持PyPDF2 1.21。1.22版本存在一个错误,阻止我们完全升级。

  • 将buildout改为在Ubuntu上创建一个可测试的脚本集。在这个过程中,所有包版本都被固定以进行测试。

2.5.0 (2013-12-10)

  • 重新实现了 includePdfPages 指令,使用新的PyPDF2合并组件,该组件支持简单的页面追加。还优化了页面创建并最小化了文件加载。所有这些导致速度提高了95%。

2.4.1 (2013-12-10)

  • 修复了在渲染相同样式的表格两次时的错误。不幸的是,Reportlab在使用时会修改样式,因此必须为每次使用创建一个副本。[Marcin Nowak]

2.4.0 (2013-12-05)

  • pyPdf 切换到更新且维护的 PyPDF2 库。

2.3.1 (2013-12-03)

  • 在错误报告期间报告正确的元素。

  • registerFontFamily 之前从未起作用,因为指令没有正确注册。

2.3.0 (2013-09-03)

  • titlesubjectauthorcreator 属性添加到 document 元素。这些属性被设置为PDF注释,现在通常用于提示查看器窗口标题等。(这些字段在RML2PDF中不可用。)

2.2.1 (2013-08-06)

  • 通过在API中公开设置,使最大渲染遍历次数可配置。

  • align 属性添加到 img 标签。

2.2.0 (2013-07-08)

  • 添加了一个新的控制台脚本“rml2pdf”,用于将RML文件渲染为PDF。

  • preserveAspectRatio 添加到 img 标签的可流式元素。该属性已经支持 image 标签。

2.1.0 (2013-03-07)

  • 实现了所有PDF查看器首选项。[Kyle MacFarlane]

    • 隐藏工具栏

    • 隐藏菜单栏

    • 隐藏窗口UI

    • 适应窗口

    • 居中窗口

    • 显示文档标题

    • 非全屏页面模式

    • 方向

    • 视图区域

    • 视图剪辑

    • 打印区域

    • 打印剪辑

    • 打印缩放

    它们都可通过 docinit 标签访问。

  • 将SVG支持添加到 imageimageAndFlowables 标签。[Kyle MacFarlane]

    方法:将绘图转换为PIL Image 实例,并像普通图像一样传递它。大问题是,在从 Drawing 转换到 Image 时,笔触宽度经常会出错并变得太粗。我认为这可能是由于缩放方式的问题,但你可以通过编辑要插入的SVG来避免它。你还会丢失任何透明度并得到一个白色背景。基本上,你不再真正拥有矢量图形,而是拥有一个300 DPI的位图,它自动缩放到正确的尺寸,并且质量损失很小。

  • 添加了在包中使用标准“[package.path]/dir/filename”表示法查找字体文件的能力。[Kyle MacFarlane]

  • 在RML2PDF中与 templatepageTemplate 元素相比,记录了 pageSizepagesize 属性的差异。[Kyle MacFarlane]

  • namedString 元素现在评估其内容,因此你可以在其中使用像 pageNumber 这样的东西。[Kyle MacFarlane]

  • 使用禁用内置的Python的 eval() 实现了 evalString。[Kyle MacFarlane]

  • getName 元素现在会检查是否具有默认属性。这用于第一次遍历时的宽度测量,或者在第二次遍历后无法解析引用时使用实际值。[Kyle MacFarlane]

  • getName 元素现在支持向前引用。这意味着你现在可以做一些像“第X页,共Y页”这样的操作。这仅适用于 drawStringpara 元素。[Kyle MacFarlane]

  • 通用性能改进。[Kyle MacFarlane]

  • 通过不将默认样式应用于每个表格单元格,并且当 lxml 表示它们不存在时,甚至不尝试初始化属性,提高了性能。[Kyle MacFarlane]

  • MergePostProcessor 类没有复制 inputFile1 的文档信息和目录(即大纲)。这意味着如果你使用了任何 includePdfPagesmergePage 指令,就会丢失任何 outlineAdd 指令的效果。[Alex Garel]

  • 修复了所有失败的测试,包括在 Windows 上失败的测试。[Kyle MacFarlane]

  • 修复了表格边框在某些查看器中无法打印或显示的问题。[Kyle MacFarlane]

  • 更新了 bootstrap.pybuildout.cfg 以与 zc.buildout 的最新版本一起使用。

  • 将构建更新为使用最新版本的 lxml。

2.0.0 (2012-12-21)

  • 实现了 saveStaterestoreState 指令。(LP #666194)

  • 实现了 storyPlace 指令。(LP #665941)

  • 实现了 path 指令的 clip 属性。请参阅 RML 示例 041。

  • 添加了 h4h5h6 指令。

  • 实现了 codesnippet 指令。

  • 为段落样式实现了 pageBreakBeforeframeBreakBeforetextTransformendDots 属性。

  • pre 指令添加了 maxLineLengthnewLineChars 属性。

  • 为所有 draw*String 元素实现了 pageNumber 元素。

  • 实现了 NamedString 指令。

  • 实现了 startIndexshowIndex 指令。还正确地将段落中的 index 连接起来。你现在可以创建真正的书索引了。

  • 实现了 olulli 指令,允许创建高度灵活的列表。还实现了一个互补的 listStyle 指令。

  • 实现了以下文档编程指令:

    • docAssert

    • docAssign

    • docElse

    • docIf

    • docExec

    • docPara

    • docWhile

  • registerCidFont 指令的 encName 属性添加到 registerCidFont 指令。

  • bookmark 重命名为 bookmarkPage

  • 创建了一个新的名为 bookmark 的画布指令。

  • 添加了 img 指令,这是一个简单的图像可流动指令。

  • 完全实现了裁剪标记支持。

  • pageLayoutpageMode 添加到 docInit 指令。

  • 实现了所有与日志相关的指令。

  • initialize 指令中实现了 color 指令。

  • pdfInclude 重命名为文档化的 includePdfPages 并添加了 pages 属性,这样你就可以仅包含特定的页面。

  • 在引用片段中不要显示“doc”命名空间。

  • 创建 RML2PDF 和 z3c.rml 差异的列表。

  • 实现了 ABORT_ON_INVALID_DIRECTIVE 标志,当设置为 True 时,在第一次出现不良标签时会引发 ValueError 错误。

  • 实现了用于页面绘制的 setFontSize 指令。

  • 实现了 plugInGraphic,它允许插入由 Python 渲染的图形。

  • hrefdestination 添加到表格单元格和矩形中。

  • 错误:由于逻辑错误,不良指令从未被正确检测和记录。

  • 错误:覆盖默认段落样式时没有正常工作。

  • 错误:如果颜色是一个引用名称,则在段落内的任何标签中指定颜色将会失败。

  • 错误:将过早的 getName 评估移到运行时以正确处理动态内容。现在,这对于任何段落和绘制字符串变体都是正确的。

  • 错误:修复了 DTD 生成器以正确忽略文本节点作为属性。此外,文本节点也没有作为元素 PCDATA 正确记录。

1.1.0 (2012-12-18)

  • 升级到 ReportLab 2.6。这需要一些字体更改,并且由于某些默认字体更改为 sans-serif,因此一些生成的 PDF 不匹配。

  • 添加了 Alex Garel 的 pdfInclude 指令。(LP #969399)。

  • 切换到 Pillow(从 PIL)。

  • 将 RML 参考中的 RML 突出显示从 SilverCity 切换到 Pygments。

  • 错误:解决了 ReportLab 2.6 中的一个错误,该错误禁止 3-D 饼图渲染。

  • 错误:在渲染文档之前正确重置 pdfform。

  • 错误:在渲染之前正确重置字体。

1.0.0 (2012-04-02)

  • 使用 Python 的 doctest 模块而不是已弃用的 zope.testing.doctest

0.9.1 (2010-07-22)

  • 我发现了一个更完整的段落边框补丁,来自 Yuan Hong。现在 DTD 已更新,边框支持边框半径,并且 tag-para.rml 示例也已更新。

0.9.0 (2010-07-22)

  • 升级到 ReportLab 2.4。这需要一些字体更改,并且由于一些默认字体更改,因此一些生成的 PDF 不匹配。

  • 升级到最新的 lxml。这只需要一个微小的更改。Felix Schwarz 的补丁。

  • 实现了 linePlot3D 指令。Faisal Puthuparackat 的补丁。

  • 添加了段落边框支持。Yuan Hong 的补丁。

  • 错误:修复了 reference.pt 中的版本号。Felix Schwarz 的补丁。

  • 错误:以二进制模式写入 PDF 文档。Felix Schwarz 的补丁。

0.8.0 (2009-02-18)

  • 错误:将 python 可执行文件作为子进程命令的一部分。

  • 添加对 RML 的 pageNumber 元素的支持。

0.7.3 (2007-11-10)

  • 确保输出目录包含在发行版中。

0.7.2 (2007-11-10)

  • 升级到与 ReportLab 2.1 和 lxml 1.3.6 兼容。

  • 修复纯 egg 安装的子进程测试。

0.7.1 (2007-07-31)

  • 错误:当指定的页面大小(在 pageInfo 元素内)是一个单词或一组单词时,处理会失败。感谢 Chris Zelenak 报告此错误并提供补丁。

0.7.0 (2007-06-19)

  • 功能:在 tests/expected 下的 sample-shipment-chinese.pdf 名称下添加了一个中文 PDF 示例文件。

  • 功能:添加了项目中通常需要的另一个标签。<keepTogether> 标签将保持子流式对象在同一个框架中。必要时,框架断行将是自动的。Yuan Hong 的补丁。

  • 功能:向 blockTable 指令添加了“对齐”属性。此属性定义了宽度不为包含流式对象 100% 的表格的水平对齐方式。Yuan Hong 的补丁。

  • 功能:创建中文 PDF 文档时,常规的 TTF 中文打印字体是“宋体”。但是,当需要粗体文本时,我们切换到“黑体”。为了正确注册,我们需要 reportlab.lib.fonts.addMapping 函数。这缺失在 reportlab RML 规范中,因此定义了一个新的指令

    <addMapping faceName="simsun" bold="1" italic="0" psName="simhei" />

    Yuan Hong 的补丁。

  • 特性:现在《para》和《paraStyle》指令支持“wordWrap”属性,允许选择不同的单词换行算法。这是必要的,因为一些远东亚洲语言不使用空格来分隔单词。补丁由袁红提供。

  • 错误:正确处理Windows驱动器字母。报告和修复由袁红提供。

0.6.0 (2007-06-19)

  • 错误:修复了setup.py,使其包含所有依赖项。

  • 错误:添加了测试以显示可以将块表样式应用多次。一位用户报告说这不起作用,但我无法重现该问题。

  • 更新:更新了预期渲染到ReportLab 2.1。有一些很好的布局修复破坏了图像比较。

0.5.0 (2007-04-01)

  • 初始发布

项目详情


下载文件

下载适用于您的平台文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

z3c.rml-4.4.0.tar.gz (1.6 MB 查看哈希值)

上传时间

构建分发

z3c.rml-4.4.0-py3-none-any.whl (2.0 MB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面