我如何使用iText7获得ByteRange?

我如何使用iText7获得ByteRange?,itext,itext7,Itext,Itext7,如图所示,我需要从ByteRange获取字节数组来进行一些验证,它们是0到840和960到1200 我发现了类似的问题:iText在自己的验证代码中需要做同样的事情。它在其SignatureUtil类中执行此操作。因此,可以简单地借用该代码,例如: try ( PdfReader pdfReader = new PdfReader(SOURCE_PDF); PdfDocument pdfDocument = new PdfDocument(pdfReader);) {

如图所示,我需要从ByteRange获取字节数组来进行一些验证,它们是0到840和960到1200


我发现了类似的问题:

iText在自己的验证代码中需要做同样的事情。它在其
SignatureUtil
类中执行此操作。因此,可以简单地借用该代码,例如:

try (   PdfReader pdfReader = new PdfReader(SOURCE_PDF);
        PdfDocument pdfDocument = new PdfDocument(pdfReader);) {
    SignatureUtil signatureUtil = new SignatureUtil(pdfDocument);
    for (String name : signatureUtil.getSignatureNames()) {
        PdfSignature signature = signatureUtil.getSignature(name);
        PdfArray b = signature.getByteRange();
        RandomAccessFileOrArray rf = pdfReader.getSafeFile();
        try (   InputStream rg = new RASInputStream(new RandomAccessSourceFactory().createRanged(rf.createSourceView(), SignatureUtil.asLongArray(b)));
                OutputStream result = TARGET_STREAM_FOR_name_BYTES) {
            byte[] buf = new byte[8192];
            int rd;
            while ((rd = rg.read(buf, 0, buf.length)) > 0) {
                result.write(buf, 0, rd);
            }
        }
    }
}
(测试
testExtractSignedBytes


如果您希望将字节范围作为内存中的
byte[]
,您可以将
ByteArrayOutputStream
作为
TARGET\u STREAM\u作为\u name\u字节
并从中检索生成的字节数组。

非常感谢!这才是我真正需要的!