pdfbox – 性能优化

huangapple go评论73阅读模式
英文:

pdfbox - performance tuning

问题

如何优化以下代码以减少运行时间,以下代码在加载PDF后未应用任何业务逻辑时耗时为384毫秒。

有什么建议吗?

MultipartFile file= ...;
byte[] pdfByte = file.getBytes();
PDDocument pdfDoc = PDDocument.load(new ByteArrayInputStream(pdfByte));
List<PDSignature> signatures = pdfDoc.getSignatureDictionaries();
pdfDoc.close();
英文:

How to enhance the below code to take less time, the below code takes 384 ms without applying any business logic after load the PDF.

Any suggestions ?

MultipartFile file= ...;
byte[] pdfByte = file.getBytes();
PDDocument pdfDoc = PDDocument.load(new ByteArrayInputStream(pdfByte));
List&lt;PDSignature&gt; signatures = pdfDoc.getSignatureDictionaries();
pdfDoc.close();

答案1

得分: 1

从评论中可以看出,实际问题是如何加快获取签名字节的速度。使用以下代码可避免再次读取文件:

COSString contents = (COSString) signature.getCOSObject().getDictionaryObject(COSName.CONTENTS);
byte [] signatureBytes = contents.getBytes();

在 PDFBox 2.0.22 中将会有一个新的方法 PDSignature.getContents(),无需参数,它不会再次读取 PDF。

另一个加快速度的方法是这样加载 PDF:

PDDocument pdfDoc = PDDocument.load(pdfByte);

因为从 InputStream 加载会创建另一个缓冲副本。

英文:

From the comments it turns out that the real question is how to speed up getting the signature bytes. Use this code to prevent reading the file a second time:

COSString contents = (COSString) signature.getCOSObject().getDictionaryObject(COSName.CONTENTS);
byte [] signatureBytes = contents.getBytes();

In PDFBox 2.0.22 there will be a new method PDSignature.getContents() without parameters which doesn't read the PDF a second time.

Another thing to speed up is to load the PDF like this:

PDDocument pdfDoc = PDDocument.load(pdfByte);

because loading from an InputStream would create another buffered copy.

huangapple
  • 本文由 发表于 2020年10月27日 22:29:07
  • 转载请务必保留本文链接:https://go.coder-hub.com/64556610.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定