Sha*_*son 3 .net c# pdf itextsharp
我有一堆PDF文件-我按要求将它们读取到字节数组中,然后还将其传递给iTextSharp PdfReader实例。然后,我想获取每个页面的尺寸(以像素为单位)。从我到目前为止所读的内容来看,PDF文件似乎是按点工作的,这一点是存储在某种形式的字典中的可配置单元,该类存储在名为UserUnit的元素中。
将我的PDF文件加载到PdfReader中,我需要做些什么来获取每个页面的UserUnit(显然每个页面的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;
}
Run Code Online (Sandbox Code Playgroud)
干杯!
请允许我引用我的书:
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.3Page Objects部分中,您将在表30“页面对象中的条目”中找到UserUnit的描述:
(可选; PDF 1.6)一个正数,应为默认用户空间单位的大小,为1到72英寸的倍数。支持值的范围应取决于实现。默认值:1.0(用户空间单位是1?72英寸)。
此密钥是在PDF 1.6中引入的;您不会在较旧的文件中找到它。它是可选的,因此您不会总是在每个页面词典中都找到它。在我的书中,我还解释了UserUnit键的最大值是75,000。
现在如何使用iTextSharp检索此值?
您已经有了Rectangle dim = reader.GetPageSize(i);返回MediaBox的控件。这可能不是页面视觉部分的大小。如果为页面定义了一个CropBox,则查看器将显示比您所拥有的小得多的大小xy(但您可能已经知道了)。
现在,您需要的是页面字典,以便您可以检索UserUnit键的值:
PdfDictionary pageDict = reader.GetPageN(i);
PdfNumber userUnit = pageDict.GetAsNumber(PdfName.USERUNIT);
Run Code Online (Sandbox Code Playgroud)
大多数情况下,userUnit将是null,但是如果不是,则可以使用userUnit.FloatValue。
| 归档时间: |
|
| 查看次数: |
2560 次 |
| 最近记录: |