【发布时间】:2014-01-21 03:43:02
【问题描述】:
如何使用 PDFBox 找到(以 mm 为单位)pdf 页面的宽度和高度?目前,我正在使用这个:
System.out.println(page.getMediaBox().getHeight());
System.out.println(page.getMediaBox().getWidth());
但结果是(不是毫米):
842.0
595.22
【问题讨论】:
如何使用 PDFBox 找到(以 mm 为单位)pdf 页面的宽度和高度?目前,我正在使用这个:
System.out.println(page.getMediaBox().getHeight());
System.out.println(page.getMediaBox().getWidth());
但结果是(不是毫米):
842.0
595.22
【问题讨论】:
PDF 中的度量单位是 points,这是一种传统的图形行业度量单位。 Adobe 使用以下定义:
1 pt = 1/72 inch
并且由于一英寸被定义为正好 25.4 毫米(真的!),您可以使用公式将点转换为毫米
mm = pt*25.4 / 72
顺便说一句,您的价值观(粗略地)转换为 210 x 297 毫米的 A4 纸尺寸。 (“松散”,有两个原因。首先:Ax 尺寸源自公制系统中的 1 平方米。点数基于英制系统(根据 Adobe 的用法);因此,所有点和毫米之间的转换是近似值。第二:A4 的给定值(以毫米为单位)也是四舍五入的。Ax 相对和绝对大小基于an irrational number。)
在对象流中,度量单位可以缩放为其他值。以上仅适用于顶级基础对象。
【讨论】:
DTP 点的坐标定义为:1 pt = 1/72 inch = 25.4/72 mm
你可以这样写一个方法:
public float pt2mm(float pt) {
return pt * 25.4f / 72;
}
【讨论】:
如果文档是使用不同于 72 的 DPI 创建的,则使用更通用的公式:
public float pt2mmForWeb72dpi(float pt) {
return pt2mm(pt,72);
}
public float pt2mmForPrint300dpi(float pt) {
return pt2mm(pt,300);
}
public float pt2mmForPrint600dpi(float pt) {
return pt2mm(pt,600);
}
public float pt2mm(float pt, float dpi) {
return pt * 25.4f / dpi;
}
A4 是一种文档格式,作为将依赖于的屏幕图像 图像分辨率,例如将 A4 文档调整为:
- 72 dpi(网络)= 595 X 842 像素
- 300 dpi(打印)= 2480 X 3508 像素 (据我所知,这是“A4”,即“210mm X 297mm @ 300 dpi”)
- 600 dpi(打印)= 4960 X 7016 像素
等等。 FWIW 文档格式(如 A4)由其描述 打印尺寸(毫米),这与打印尺寸完全不同 屏幕图像(像素),这就是为什么您看不到任何人使用像素的原因 描述 A4。 :是的
【讨论】: