我有一堆 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;
}

干杯!

最佳答案

请允许我引用我的书:

iText 实战 - 第二版,第 9 页:



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

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

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



这个键是在 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

关于c# - 如何使用 iTextSharp PdfReader 从 PdfFile 获取 UserUnit 属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14586315/

10-11 11:45