【问题标题】:perl PDF text coordinatesperl PDF文本坐标
【发布时间】:2015-10-23 15:13:40
【问题描述】:

这是一个在 perl 中生成 PDF 文件的简单 hello world 测试脚本:

#!/usr/bin/perl

use PDF::API2;

# Create a blank PDF file
$pdf = PDF::API2->new();

# Add a blank page
$page = $pdf->page();

# Set the page size
$page->mediabox('A4');

# Add a built-in font to the PDF
$font = $pdf->corefont('Helvetica-Bold');

# Add some text to the page
$text = $page->text();
$text->font($font, 20);
$text->translate(72, 28); # 1inch, 1cm
$text->text('Hello World!');

# Save the PDF
$pdf->saveas('test.pdf');

我希望我的文本底部比页面底部高 1 厘米,但事实并非如此(另一方面,x 位置正确地位于页面左侧 1 英寸处)。

在打印页面上测量显示 1 厘米位于文本中心(或多或少)。这是否意味着一个对象的 y 定位是从它的垂直中间?

谢谢

【问题讨论】:

  • 这似乎是您可以通过一些实验自行解决的问题
  • 过程中不要杀死太多树...
  • 最有可能的是字母基线是答案,至少对于一般的 pdf 来说是正确的。
  • 您的打印机精度如何?
  • 我的打印机并不是一个杀手...三星 M2070...

标签: perl pdf


【解决方案1】:

以下是从输出 PDF 复制和粘贴的几个关键对象,一旦解压缩:

页面对象:

5 0 obj
<< /Type /Page /Contents [ 7 0 R ] /MediaBox [ 0 0 595 842 ] /Parent 2 0 R
   /Resources << /Font << /HeBoCBA~1438376482 6 0 R >> /ProcSet
   [/PDF /Text /ImageB /ImageC /ImageI ] >> >>
endobj

页面内容:

7 0 obj
<< /Length 77 >>
stream
BT  /HeBoCBA~1438376482 20 Tf 1 0 0 1 72 28 Tm [ (Hello World!) ] TJ  ET
endstream
endobj

媒体框为[0 0 595 842],即A4。

指令1 0 0 1 72 28 Tm(设置文本矩阵)将Tx设置为72,Ty设置为28。

所以查看 PDF,它似乎正确地将页面大小设置为 A4 并将文本从其基线而不是其中心定位。

更新: 这是一个屏幕截图,显示了在 Adob​​e Reader 中 PDF 上Hello World! 的外观,使用测量工具放大 300%。

【讨论】:

  • 好的,谢谢,那么您如何解释 1cm y 位于文本的中心,而 x 正确位于 1 英寸?我尝试了 Tx 72 和 ty 72 并且 1 英寸 y 再次位于文本的中心......奇怪。在尝试 tx 0 和 Ty 0 时,我的文本正确地从页面的左下角水平和垂直地开始!
  • 快点:不建议测量硬拷贝。 Acrobat Reader 有一些相当不错的内置测量工具。 Zoom & Edit &gt;&gt; Analysis &gt;&gt; Measuring Tools 是你的朋友,还有Edit &gt;&gt; Preferences &gt;&gt; Measuring
  • 根据阅读器距离工具,我的文本似乎正确定位在页面上。我想我不得不责怪我的打印机......疯了,它对于 x 非常精确,而不是对于 y 坐标
  • 可能在您的打印机设置中有所帮助。很可能是缩放而不尊重媒体框设置。
  • 我基本上是直接在硬拷贝上测量的,因为我试图在标签(A4 纸)上自动打印条形码。检查我的打印机设置(我从未更改过),我注意到每英寸的行数设置为 6。看起来正确吗?
猜你喜欢
  • 2012-11-06
  • 2011-11-16
  • 2011-09-05
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 2010-10-02
  • 2014-05-18
  • 1970-01-01
相关资源
最近更新 更多