String currFile="C:\misc\pdffiles\AcroJS.pdf" ;
String dest = "C:\misc\pdffiles\AcroJS_copy.pdf" ;
PdfReader reader = new PdfReader(currFile) ;
PdfStamper stamper = new PdfStamper(reader,new FileOutputStream(dest)) ;
stamper.close() ;
reader.close() ;
我希望在复制现有的pdf文件时,文件大小大致相同。我不明白为什么尺寸会增加这么多。
我也试过PdfCopy类。我使用PDFcopy遵循了2种方法:
但这两种方法的问题都是,它会从pdf文件中丢弃一些非内容的元数据,因此当Adobe Reader打开新的pdf时会损坏。例如,我的pdf包含字典对象pdfname.s。在这种情况下,新创建的pdf文件只有2KB(原始文件是1.6MB),这显然意味着没有任何东西被复制到文档中,它被破坏了。
我最初的要求很简单:将现有的pdf复制到新的pdf文件中,不增加大小,不丢弃必要的项目。很明显,它不是像复制,粘贴,然后重命名。因为在下一步,我有一些处理与pdf内容有关。任何帮助都将不胜感激。
操作系统:Windows 10 Pro Java:1.8.101 itext:5.5.10
谢谢
您的代码
PdfStamper stamper = new PdfStamper(reader,new FileOutputStream(dest)) ;
stamper.close() ;
本质上告诉iText复制原始的PDF,丢弃未使用的对象,并使用iText的默认压缩设置。
iText的默认压缩设置包括不使用压缩的交叉引用和对象流(在PDF 1.5中介绍),而是使用比较老的交叉引用表和单独压缩的对象的技术。
PdfReader reader = new PdfReader(resourceStream);
PdfStamper stamper = new PdfStamper(reader, outputStream);
stamper.setFullCompression();
stamper.close();
(stamping.java测试方法teststampacrojscompressed
)
这将导致文件的大小小于4 MB。
如果您希望保持对原始对象存储方式的忠实,则可以使用append模式,该模式相同地复制原始文件,并以所谓的增量更新的形式添加更改,如下所示:
PdfReader reader = new PdfReader(resourceStream);
PdfStamper stamper = new PdfStamper(reader, outputStream, '\0', true);
stamper.close();
您注意到pdfcopy
正在丢弃一些非内容元数据
当然有。pdfcopy
旨在将页面从一个PDF复制到另一个PDF,保持内容和注释原样,但忽略其他页面级和所有文档级信息。
我只使用了库中的几个实际类,即: 提前道谢。
问题内容: 在Windows上的Python中,我可以通过创建一个大文件 现在大约是1 GB。但是,在Linux上,这将返回。 有没有办法在Linux上获得与Windows相同的行为?也就是说,能够使用?来增加文件的大小。 问题答案: 至少在POSIX系统上,不能用于增加(或减小)文件的大小。的功能是将文件的一部分映射到内存。合乎逻辑的是,您请求映射的东西应该确实存在!坦白说,我真的很惊讶您实际上
问题内容: 我正在使用JVM标志运行Java进程,并看到以下输出: 有没有办法解决这个问题? 问题答案: 当无法满足Java堆的分配或永久生成时,命令行选项告诉HotSpot VM生成堆转储。使用此选项运行不会产生任何开销,因此对于OutOfMemoryError需要很长时间才能浮出水面的生产系统很有用。 为了解决您面临的特定问题,可以使用以下纠正措施之一: 措施1: XX:HeapDumpSeg
我正在创建一个简单的文件复制应用程序供我个人使用。但是当我运行这个程序时,输出文件比源文件稍大。我根据文件大小使用缓冲区,如下所示 如果文件大小小于9KB,则缓冲区为512字节 源代码 } 文件大小比较…:<源文件:“龙珠84集mp4”。。。。。文件大小:8,59,93580字节 目标文件:“sample.mp4”。。。。。文件szie:8,70,31808字节 用于运行程序的命令 此问题中使用和
本文向大家介绍C# FileStream复制大文件,包括了C# FileStream复制大文件的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C# FileStream复制大文件的具体代码,供大家参考,具体内容如下 即每次复制文件的一小段,以节省总内存开销。当然,本机复制也可以采用.NET内部的System.IO.File.Copy方法。 以上就是本文的全部内容,希望对大家的学习有所
问题内容: 我目前正在实现使用jersey rest上传文件的功能。我想设置一个允许的最大文件大小,这对我来说似乎是很常见的要求。 我的第一种方法是使用Jerseys FormDataContentDisposition,它应该包含我可能需要的有关文件的所有信息。但是似乎缺少所有信息,除了文件名,包括文件大小。 这是我的休息方法: 由于返回的大小始终为“ -1”,因此不起作用! 我使用一个非常简单