Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 后记获取文档页面大小_Java_Postscript - Fatal编程技术网

Java 后记获取文档页面大小

Java 后记获取文档页面大小,java,postscript,Java,Postscript,我希望采用文件的页面大小,如A4、A5、A6等 解决方案,我发现它解析postscript文本并从中提取字符串A6 功能开始{ %%BeginFeature:*页面大小A6 设置页面设备 %%末端特征 }特征清理 但这很慢 我怎么能做到?是否存在获取完整文档信息的库 如果存在,我更喜欢java解决方案。您的解决方案只适用于符合DSC(文档结构约定)的文件。虽然许多文件确实符合,但其他文件则不符合。此外,仅当PostScript文件包含注释(%在PostScript中引入注释)时,此操作才有效

我希望采用文件的页面大小,如A4、A5、A6等

解决方案,我发现它解析postscript文本并从中提取字符串
A6

功能开始{
%%BeginFeature:*页面大小A6
设置页面设备
%%末端特征
}特征清理
但这很慢

我怎么能做到?是否存在获取完整文档信息的库


如果存在,我更喜欢java解决方案。

您的解决方案只适用于符合DSC(文档结构约定)的文件。虽然许多文件确实符合,但其他文件则不符合。此外,仅当PostScript文件包含注释(%在PostScript中引入注释)时,此操作才有效

您可以替代setpagedevice操作符,让它打印请求的媒体大小(如果存在)

/Oldsetpagedevice /setpagedevice load def

/setpagedevice {
  dup /PageSize known {
    dup /PageSize get
    dup 0 get 20 string cvs exch 1 get 20 string cvs exch
    (Requested Media Size is ) print print (points by ) print print (points\n) print
  } if
  Oldsetpagedevice
} bind def
“完整文档信息”是什么意思?顺便说一下,您需要知道(与PDF不同)PostScript文件是程序,而不是文档。因此,了解真正发生了什么的唯一方法是解读程序


您可以使用Ghostscript,但它没有Java接口,您需要更具体地了解所需的信息。

如果您使用
-sDEVICE=bbox
通过Ghostscript运行postscript,它将报告矩形的角点,以裁剪渲染输出,这可能(接近)您想要的


信息通常以DSC
%%BoundingBox:x0 y0 x1 y1
格式打印到
stderr

自己找一份官方PostScript语言参考。一般来说,“PostScript”文件没有(也不需要!)提及页面大小,尽管物理页面大小可能“在生成此页面描述的过程中”(参考文献)假设,并且这通常是以点为单位的维度,而不是您认为的名称。仅供参考,
DeferredMediaSelection
在我的PLRM(第三版)中描述,但当然不能保证文件中包含这一点。(@Sergey:它对您很有用,因为它的
/PageSize
值就是我上面提到的:以点为单位的大小。)Ghostscript可以通过充分的编程提供各种信息。就像我说的,你想知道什么?使用PostScript解释器的一个要点是,即使信息不在注释中,或者隐藏在过程中,它也可以找到信息。格雷普和朋友们将无法这样做。
/Oldsetpagedevice /setpagedevice load def

/setpagedevice {
  dup /PageSize known {
    dup /PageSize get
    dup 0 get 20 string cvs exch 1 get 20 string cvs exch
    (Requested Media Size is ) print print (points by ) print print (points\n) print
  } if
  Oldsetpagedevice
} bind def