Jus*_*oll 5 python printing pdf reportlab postscript
我正在尝试制作自己的网格(看起来非常像这样:http: //tinyurl.com/cdyre6k-以公制单位为毫米的心电图纸).
我正在使用ReportLab/Python(opensource)来制作这些报告.下面是我的代码片段.
在屏幕上,它看起来很棒!:

然而,当我将它发送到打印机时(是的,我也用打印机设置修改)它会打印一些线条,而不是其他线条(有时它是有条不紊的并且打印出图案式格子图案,有时则是更粗/更细的线条;请记住,打印机的输出是一致的,取决于我设置的笔画宽度.
我尝试了各种笔画宽度组合,以及各种打印机设置组合...我无法正确打印!我尝试了另一种打印机并获得了更好的结果,但我必须将打印机设置设置为超过1200 dpi(CAD级别打印).另一台打印机设置为600dpi.在那台相同的打印机(600dpi)上,我打印了一个由前同事制作的文件,打印就好了(请注意,他没有使用ReportLab,所以我不能使用他的代码/解决方案).
到底是怎么回事?这是打印机上的别名问题吗?如果我将网格转换为位图(或其他格式),它会对我有帮助吗?我该如何解决这个问题(我唯一的选择是使用Python和ReportLab)?ReportLab手册没有帮助,"谷歌"没有帮助,而以前的StackExchange问题似乎没有涵盖这一特定主题.如果我将笔画宽度设置为"1",我可以让网格打印所有行,但是后面的网格线太粗了.
最终结果是我正在处理的折线图,我知道ReportLab有图表功能,但reportlabs图表/网格功能不能给我我的项目所需,所以我被迫让我拥有主要/次要线的自己的网格(也许我错过了一些东西,并开放替代技术,但目前它看起来很好的PDF形式,只是不在打印机).
任何建议表示赞赏!
TIA,
-J
for i in decimal_range(0, _time, 1):
if (i % 5.0 == 0):
if (i % 25.0 == 0):
grid_pattern.add(shapes.Line(_temp_x,
(_temp_y + _height_of_box),
_temp_x,
(_temp_y + _height_of_box+4),
strokeWidth=1,
strokeColor=colors.black))
else:
pass
grid_pattern.add(shapes.Line(_temp_x, _temp_y, _temp_x,
(_temp_y + _height_of_box),
strokeWidth=.12,
strokeColor=colors.pink))
else:
grid_pattern.add(shapes.Line(_temp_x, _temp_y, _temp_x,
(_temp_y + _height_of_box),
strokeWidth=.12,
strokeColor=colors.pink))
_temp_x += 1 * mm
_temp_x = xorigin
for i in range(0, _mv, 1):
if (i % 5.0 == 0):
grid_pattern.add(shapes.Line(_temp_x, _temp_y,
_temp_x + _width_of_box,
_temp_y, strokeWidth=.12,
strokeColor=colors.pink))
else:
grid_pattern.add(shapes.Line(_temp_x, _temp_y,
_temp_x + _width_of_box,
_temp_y, strokeWidth=.12,
strokeColor=colors.pink))
_temp_y += 1 * mm
Run Code Online (Sandbox Code Playgroud)
UPDATE1
我已经尝试按照几个海报(以及ReportLab社区/邮件列表)的建议将笔划宽度设置为"0",如下所示:
grid_pattern.add(shapes.Line(_temp_x, _temp_y, _temp_x,
(_temp_y + _height_of_box),
strokeWidth=0,
strokeColor=colors.pink))
Run Code Online (Sandbox Code Playgroud)
这确实产生了一条像素宽的线,再次在PC上看起来很棒,但仍然以PDF的时髦图案打印.
UPDATE2 +解决方案
经过大量的发脾气和ReportLab与我的计算机的争论后,结果发现它不是我的PC或ReportLab.这是打印机(我使用两种完全不同的打印机佳能和惠普 - 虽然模型) - 我觉得我有足够的覆盖率来排除打印机,但这个问题还有更多!继续阅读...
ReportLab实际上并没有绘制直线,只是添加了一个postscript线,告诉渲染器绘制直线.
我的初步调试的一部分包括改变我正在使用的颜色,看看这是否是一个问题 - 好吧 - 我把颜色从粉红色改为红色(没有太大的变化,我知道,但是再次,我认为我改变了它足够排除颜色作为一个问题).
那么从我最近和惨痛教训,是打印机转换颜色使用公式为灰度和公式具有产生抗锯齿的副作用(如我所看到)的倾向.
解决方案:改变网格的颜色.某些颜色比其他颜色表现更好.因此,为了测试这一点,我写了一个简单的脚本,你可以在这里下载,将使用所有存储在reportlabs颜色字典中的颜色生成PDF文件-打印这是造成我的问题的样品网格和提供的RGB值.事实证明,alllllllll各种颜色不能很好地跨多个打印机(所有不同)打印-它不只是红名/粉红色......一些"红色系列"颜色印制精美,一些打印机处理灰度转换比另一种更好.
所以现在,我们的任务是使用我创建的PDF文档来查找打印(彩色和灰度)和屏幕上看起来很好的颜色.
如果你不想下载脚本,怕我邪恶的 - 至少检查出的PDF打印自己的样品看,如果你可以重新创建我有问题(我是在600dpi的打印 - 标准 - 没有什么花哨...记住,如果我打开DPI /质量设置,它打印得很好,但标准设置让我感到悲伤!).
要么
如果我理解ReportLab如何正确处理行,则要求它创建分别具有1和0.12用户空间单位的行.在PDF中,一个"用户空间单元"实际上是1/72英寸.
这意味着您绘制的线条分别为0.014和0.0017英寸宽.那真的不多.根据输出设备的分辨率和页面上的位置(因此,取决于它是否恰好与屏幕或打印机的像素网格对齐),您可能会得到不同的结果.
您的打印机可能会尝试通过抗锯齿来优化输出,这将使最终结果更加不确定.
打印机像素网格的对齐效果可能是您看到某些线条并且看不到其他线条的原因.
尝试/玩的几件事.
1)输出0行宽的行.这是PDF中的特殊情况,它意味着"输出一行恰好一个像素宽".请记住,这样的线应该在屏幕上可见(仅为72或96 dpi),但可能不在您的打印机上(现在将打印一个1/1200英寸的点).但是,如果您的打印机遵守规则,它应该始终打印一个点.
2)让你的线条更宽 - 可能是获得一致结果的唯一方法.如果较小的线条看起来太粗,请考虑打印虚线而不是实线(设置虚线图案).
| 归档时间: |
|
| 查看次数: |
1858 次 |
| 最近记录: |