给定pdf文档中的一页,我希望能够使用objetive-C找到文本的页边距。
我意识到已经有很多关于CGPDF...的问题,但我还没有找到任何有用的东西。我还看过PDF规范文档。我确信它一定在某个地方,但我还没能找到它。
示例
我创建了一个Word文档,左右边距各为2.5厘米。然后打印成pdf格式。以这个pdf为例,有没有什么方法可以计算出文本的宽度(即左右页边距)?
背景
如果我找错了树,我问这个问题的原因是为了能够像iBooks一样缩放。如果你双击iBooks,它会将你放大到正文的宽度。这在Mac的预览应用程序中也是一样的(按下“缩放以适应”)。
第一个想法
我首先想到的是,也许像kCGPDFBleedBox这样的PDF Boxes (CGPDFPage)可能会有所帮助,但在我的情况下,似乎没有帮助。
更新
我只关心页面的正文。图像等,这可能是外部的,我并不困扰。
相关帖子
Fast and Lean PDF Viewer for iPhone / iPad / iOs - tips and hints?
发布于 2011-06-19 18:51:35
您可以将PDF页面呈现为位图,检测其像素状态并获得白边距。看看这个来自Skim的优秀实现:http://skim-app.svn.sourceforge.net/viewvc/skim-app/trunk/NSBitmapImageRep_SKExtensions.m?revision=7036&content-type=text%2Fplain
发布于 2011-06-20 21:04:26
我不熟悉苹果的“缩放以适应”功能和它的具体行为(尽管我可以想象它最重要的属性)……
依赖不同的*box值(MediaBox、CropBox、TrimBox、BleedBox和(不推荐使用的) ArtBox)时的一个潜在缺点是,实际空白可能仍然与它们的返回值不同(主要是更大)。
Ghostscript有一个叫做bbox的特殊设备,它返回所有页面渲染内容的“边界框”。示例:
gswin32c.exe ^
-o nul: ^
-sDEVICE=bbox ^
input.pdf返回(对于一个随机的3页示例,我尝试使用此命令):
%%BoundingBox: 86 122 509 719
%%HiResBoundingBox: 86.993997 122.993996 508.013984 718.001978
%%BoundingBox: 103 199 152 271
%%HiResBoundingBox: 103.408098 199.998064 151.107956 270.897953
%%BoundingBox: 103 195 185 271
%%HiResBoundingBox: 103.208059 195.000041 184.000002 270.897953您可能会忽略高精度的HiResBoundingBox值。这就给你留下了:
%%BoundingBox: 86 122 509 719
%%BoundingBox: 103 199 152 271
%%BoundingBox: 103 195 185 271这四个值表示左下角和右上角的坐标,或者表示包围所有渲染像素的矩形。单位是PostScript points (72 points == 1 inch)。
将此值与pdfinfo.exe返回的*Box值进行比较
pdfinfo ^
-f 1 ^
-l 3 ^
-box ^
input.pdf
[....]
Page 1 size: 421 x 595 pts (A5)
Page 2 size: 421 x 595 pts (A5)
Page 3 size: 92 x 80 pts
Page 1 MediaBox: 0.00 0.00 595.00 842.00
Page 1 CropBox: 87.00 123.00 508.00 718.00
Page 1 BleedBox: 87.00 123.00 508.00 718.00
Page 1 TrimBox: 87.00 123.00 508.00 718.00
Page 1 ArtBox: 87.00 123.00 508.00 718.00
Page 2 MediaBox: 0.00 0.00 595.00 842.00
Page 2 CropBox: 87.00 123.00 508.00 718.00
Page 2 BleedBox: 87.00 123.00 508.00 718.00
Page 2 TrimBox: 87.00 123.00 508.00 718.00
Page 2 ArtBox: 87.00 123.00 508.00 718.00
Page 3 MediaBox: 0.00 0.00 595.00 842.00
Page 3 CropBox: 92.00 194.00 184.00 274.00
Page 3 BleedBox: 92.00 194.00 184.00 274.00
Page 3 TrimBox: 92.00 194.00 184.00 274.00
Page 3 ArtBox: 92.00 194.00 184.00 274.00
[...]更新:这里是一个屏幕截图,显示了3个页面的缩略图,我用它来演示上面的区别:

发布于 2011-06-20 20:21:52
根据CGPDF文档,您可以获得最多四个内容框,它们定义了内容被保存、打印、裁剪、裁切等的区域。使用CGPDFPageGetBoxRect()函数来获取这些盒子。我不确定它们的确切用途,所以这只是我对你需要哪些盒子的猜测:
CGRect mediaBox = CGPDFPageGetBoxRect(pageRef, kCGPDFMediaBox);
CGRect cropBox = CGPDFPageGetBoxRect(pageRef, kCGPDFCropBox);
CGFloat leftMargin = CGRectGetMinX(cropBox) - CGRectGetMinX(mediaBox);换句话说,你得到了页面边界和内容矩形边界,并对它们做了数学运算。一旦你了解了每个盒子代表什么,应该不会太难。
https://stackoverflow.com/questions/6400326
复制相似问题