Java 从字节[]识别分页符

Java 从字节[]识别分页符,java,arrays,pdfbox,Java,Arrays,Pdfbox,我有一个用例,通过将字节写入ServletOutputStream来下载一个大文件,我希望返回一些指定的页面,而不必在内存中完全加载文件并使用库 是否可以从字节流中识别分页符 如果是,正确的方法应该是什么 编辑 该文件是使用ApachePDFBox创建和存储的 是否可以从字节流中识别分页符 不会。原因很简单,字节流中没有分页符 PDF文件包含许多可以在多个页面上使用的对象(字体、颜色空间、位图等)。在一些PDF中,所有页面甚至共享所有资源。因此,PDF字节数组中没有用于页面的节,而仅用于该页面

我有一个用例,通过将字节写入ServletOutputStream来下载一个大文件,我希望返回一些指定的页面,而不必在内存中完全加载文件并使用库

  • 是否可以从字节流中识别分页符
  • 如果是,正确的方法应该是什么
  • 编辑 该文件是使用ApachePDFBox创建和存储的

    是否可以从字节流中识别分页符

    不会。原因很简单,字节流中没有分页符

    PDF文件包含许多可以在多个页面上使用的对象(字体、颜色空间、位图等)。在一些PDF中,所有页面甚至共享所有资源。因此,PDF字节数组中没有用于页面的节,而仅用于该页面

    此外,这些对象通过文件中的偏移量通过交叉引用流或表进行引用。因此,仅为某些给定页面所需的字节流区域提供服务一开始是不可行的,因为偏移量将是错误的

    从理论上讲,我们可以确定PDF字节流中那些给定页面不使用的区域,然后传输
    0
    s。如果您使用一些传输压缩,这些区域将得到很好的压缩。但要确定这些区域,您需要一个您不想做的PDF库

    或者,有一种特殊的方法保存PDF文件,该方法针对部分文件访问进行了优化(这样保存的文件称为“线性化”),但这对您也没有帮助,因为PDFBox不提供这样的保存PDF,因为利用这种优化需要支持HTTP范围,而servlet容器或servlet本身很少支持HTTP范围


    在我看来,您最好的选择是更改大文件的生成,以生成所需的较小文件,而不是(或除了)大文件。

    您所要求的

    有了PDF文档,您可以编写代码,只需一页就可以创建一个小的PDF文档。一个10页的PDF将提供10个单独的PDF,总字节数比原始的PFD多得多

    这是令人失望的,我知道没有一个简单的寻呼系统

    围绕PDF流媒体

    您可以生成针对web流媒体优化的PDF:

    • 顺序的,按顺序的元素表示
    • 使用前,将图像数据放在前面
    • 最好使用标准字体,PDF查看器中已经提供了这些字体。 仅传输所用字符的嵌入式字体排名第二,但 不适用于PFD表格
    • PDFBox及其线性化PDF的功能我不知道,但它可能足以按顺序创建PDF
    当然,一个页面的标志和这样的只需要定义一次

    图像必须有足够的打印解决方案


    矢量图形可能是理想的(eps、svg)。

    如果使用字符串,我认为应该使用char[],而不是byte[]。二进制文件中的“分页符”是什么?例如,GIF图像文件没有分页符。MP3音乐文件确实有分页符。Java源文件没有分页符。这意味着分页符是特定于格式的,并且在从二进制文件转换为特定格式时由库插入。如果可能的话,请用一个具体的例子解释您试图进一步实现的目标。“分页符”是指换页字符吗?()我需要为用户提供PDF文档中的指定页面,这里不需要整个PDF,只需要下载其中的一部分。我没有在内存中加载完整的PDF。所以我想从stream中获取分页符,并仅在需要当前页面时返回。谢谢,这对我帮助很大。