【问题标题】:How to get the UserUnit property from a PdfFile using iTextSharp PdfReader如何使用 iTextSharp PdfReader 从 PdfFile 获取 UserUnit 属性
【发布时间】:2013-01-13 05:23:34
【问题描述】:

我有一堆 PDF 文件——我按照要求将这些文件读入字节数组,然后将其传递给 iTextSharp PdfReader 实例。然后我想获取每个页面的尺寸(以像素为单位)。从我目前所读到的内容来看,PDF 文件似乎是以点为单位工作的——一个点是一个可配置的单元,存储在名为 UserUnit 的元素中的某种字典中。

将我的 PDF 文件加载到 PdfReader 中,我需要做些什么来获取每个页面的 UserUnit(显然它可能因页面而异),这样我才能以像素为单位获取页面尺寸。

目前我有这段代码,它以“点”为单位获取每个页面的尺寸 - 我猜我只需要 UerUnit,然后可以将这些尺寸乘以得到像素或类似的东西。

//Create an object to read the PDF
PdfReader reader = new iTextSharp.text.pdf.PdfReader(file_content);

for (int i = 1; i <= reader.NumberOfPages; i++)
{
  Rectangle dim = reader.GetPageSize(i);
  int[] xy = new int[] { (int)dim.Width, (int)dim.Height };  // returns page size in "points"
  page_data[objectid + '-' + i] = xy;
}

干杯!

【问题讨论】:

    标签: c# .net pdf itextsharp


    【解决方案1】:

    请允许我引用我的书:

    iText in Action - 第二版,第 9 页:

    常见问题解答 PDF 文档中的度量单位是什么? 大多数度量单位 在 PDF 中以用户空间单位表示。 ISO-32000-1(第 8.3.2.3 节)告诉我们 “默认用户空间(1/72 英寸)中的默认单位大小是 与点 (pt) 大致相同,是印刷中广泛使用的单位 行业。不完全相同;一点没有普遍的定义。” 简而言之,1 英寸 = 25.4 毫米 = 72 个用户单位(大致相当于 72 磅)。

    在下一页,我解释了可以更改用户单位的默认值,并添加了一个示例,说明如何使用具有不同用户单位的页面创建文档。

    现在你的问题是:假设你有一个现有的 PDF,你如何找到使用了哪个用户单元?在回答这个问题之前,我们需要先了解一下 ISO-32000-1。

    在第 7.7.3.3 节页面对象中,您将在表 30“页面对象中的条目”中找到 UserUnit 的描述:

    (可选;PDF 1.6)一个正数,应给出 默认用户空间单位,1⁄72 英寸的倍数。的范围 支持的值应依赖于实现。默认值:1.0 (用户空间单位为 1⁄72 英寸)。

    此密钥是在 PDF 1.6 中引入的;你不会在旧文件中找到它。它是可选的,因此您不会总是在每页词典中都能找到它。在我的书中,我还解释了 UserUnit 键的最大值是 75,000。

    现在如何使用 iTextSharp 检索此值?

    您已经拥有返回 MediaBox 的 Rectangle dim = reader.GetPageSize(i);。这可能不是页面可视部分的大小。如果为页面定义了 CropBox,查看器将显示比您在 xy 中的尺寸小得多(但您可能已经知道)。

    您现在需要的是页面字典,以便您可以检索 UserUnit 键的值:

    PdfDictionary pageDict = reader.GetPageN(i);
    PdfNumber userUnit = pageDict.GetAsNumber(PdfName.USERUNIT);
    

    大多数时候 userUnit 将是null,但如果不是,您可以使用userUnit.FloatValue

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2023-01-23
      • 2015-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多